subcultured Premium Member join:2001-08-21 Jamaica Plain, MA |
to Crypto5
Re: OS X client, linux server, samba pain.said by Crypto5:said by Daemon:I can tell you it's not a fatal flaw in the SMB implementation in OSX. I have a Fedora box connected to a 10.4 machine (used to be 10.3), and it just flies. Thats actually the most valuable data point I have gotten yet from this whole thing. That tells me that there might be something peculiar to the way this version of samba was compiled. Maybe it's time to compile it from scratch and see what happens. I was the admin for about a hundred macs in my last job and we had several Fedora boxen running samba flawlessly to the macs and windows clients alike. We also had one Debian fileserver (can't remember which version...) that did indeed give us some serious problems with netatalk but actually worked very well using SMB. Obviously there is some other issue with your server. Check that your macs, when sharing to windows/linux clients via samba, perform up to standard just to rule out an odd firewall issue. Regardless, I'd suggest rolling your own samba. It can't hurt... Good luck, Ian |
|
Crypto5 Premium Member join:2001-01-07 Saint Charles, MO |
to MiloMindbend
said by MiloMindbend:Try this (on the OS X side): 'sudo sysctl -w net.inet.tcp.delayed_ack=0' DING DING DING DING DING!! And we have a winner! that sped it right up. You say that this should do the same thing as putting TCP_NODELAY on the Linux samba server? Thats odd, because I did that already and didnt seem to have any results. It's certainly much, much faster with delayed acks set to 0 on the OS X box. What are the ramifications to just leaving the OS X box like that? |
|
Crypto5 |
Crypto5
Premium Member
2005-Sep-14 11:43 pm
Problem solved. Culprit: Bad Linux NIC/DriverWow, after googling on the sysctl command milo posted here, I saw at least one instance of someone saying "I set this command on my BSD box because I was having problems with a realtek ethernet card that for some reason wasnt handling delayed ACKs well"
Well, I have a Linksys card, which had a realtek in it. So I shut down the venerable linux server thats been going for 5 years, and swapped out the linksys card with a spare Intel E100 I had.
I remmed out all the samba performance options I had tried, and set delayed acks back to 1 on the OS X box, and pulled a giant file down from the samba share.
And it hauled ass.
Thats damned near the strangest network problem I have ever seen in my life, and I have no way to explain it other than to chalk it up to bad linux driver code.
Thanks everyone, for their help, and specially thanks to Milomindbender for putting me on the right track. |
|
|
to Crypto5
Re: OS X client, linux server, samba pain.said by Crypto5:You say that this should do the same thing as putting TCP_NODELAY on the Linux samba server? Thats odd, because I did that already and didnt seem to have any results. It effectively does the same thing _on the Mac_ that the smb.conf TCP_NODELAY does _on the Linux box_. But it was the Linux box that was pausing because the Mac wasn't sending an ack to every packet, so you have to disable the delayed acks on the Mac. You're supposed to be able to set socketopts in ~/.nsmbrc (disabling delayed acks just for the smbfs kernel extension, rather than for the whole system), but I never got that to work (hmm, wonder if it has to be in /etc/nsmbrc instead, since mount_smbfs is suid root)... Anyway, I run into it infrequently enough that I just twiddle the sysctl knob. It gets the job done. |
|
|
MiloMindbend |
to Crypto5
said by Crypto5:It's certainly much, much faster with delayed acks set to 0 on the OS X box. What are the ramifications to just leaving the OS X box like that? Sorry, forgot to answer that one. If you leave it like that, nothing will break, but your other network traffic will be less than optimal, as TCP will send an ack for every packet instead of combining them and acking several packets at a time. So just evaluate your typical network usage (with the most emphasis on local, high-speed stuff) -- if it's mostly SMB to a server that doesn't deal well with delayed acks, I'd normally leave it disabled. If that's a small percentage of your overall usage, I'd leave it at it's default. Heck, you could always wrap it with an Automator script and assign a hotkey to it to switch on demand. |
|
|
to Crypto5
Re: Problem solved. Culprit: Bad Linux NIC/DriverYou know I should have realized this. Right around when I upgraded from 10.3 to 10.4 I also had to a motherboard replacement on my linux server. The NIC was also changed. I was using a realtek chipset and went to a 3com 3c905. Changing the nic must have done it for me as well. |
|
z3r @tuebingen.mpg.de |
to MiloMindbend
Re: OS X client, linux server, samba pain.Hi.
Thanks for posting---I'm very glad to find a workaround for this problem, which was killing transfer speeds between a FreeBSD samba server with an Intel NIC and my OS 10.4 Powerbook client.
I'd like to try the nsmbrc solution you mention (and it seems plausible to put it in the root .nsmbrc) but documentation about .nsmbrc and its syntax is hard to find. All I find on my system and by Google is an "example file" with a few commented-out lines that seem irrelevant to this problem.
How would you, in principle, disable delayed acks in a nsmbrc config file?
cheers, --jez |
|
|
Same sort of thing as in smb.conf, iirc: "options TCP_NODELAY"
I'd start by pulling the smbfs kext source from OpenDarwin, though, and see if it actually even reads the nsmbrc files -- it could very well not. |
|
z3r @tuebingen.mpg.de |
z3r
Anon
2005-Sep-29 8:51 am
Thanks. I guess you must be write about the file being ignored. Certainly, appending
socket options = TCP_NODELAY
to /private/var/root/.nsmbrc (and also, for good measure, copying the resulting file to my $HOME and temporarily doing chmod go+r on both copies) doesn't change the behaviour. Estimate of time taken to transfer 152MB: 1 hour.
I guess sysctl twiddling must remain the solution. Irritating, but not serious. |
|
|
said by z3r :
I guess sysctl twiddling must remain the solution. Irritating, but not serious. Well, there is another option, if it's a big enough PITA for you (it wasn't a big enough itch for me to scratch, personally -- I only have limited interaction with SMB shares): Download the smbfs.kext source, tweak the socket options, rebuild it, and replace the original .kext with it (I'd rename the old one, not delete it . That's one of the neat things about Darwin -- the core OS _is_ open... |
|
|
deaDleSs balLoon to Crypto5
Anon
2005-Oct-6 5:34 am
to Crypto5
dont know if it's interesting for you guys, but i found that you can create file /etc/sysctl.conf (on mac of course) and put the following line in it: net.inet.tcp.delayed_ack=0 It works fine! PS Thanks for your wonderful advise, now my freebsd file server can serve macs too |
|
deaDleSs balLoon |
deaDleSs balLoon to Crypto5
Anon
2005-Oct-6 5:53 am
to Crypto5
btw, i have an another problem, maybe you can help me... mac users, when browsing samba share, cannot see full information about file ownership and permissions, they only see: you can read an write But they want to know who created file. Any suggestions, what can i do for them to see that info? |
|
|
to Crypto5
This sudo sysctl -w net.inet.tcp.delayed_ack=0 is Awesome!
My DL times from Suse9.2 (I know OpenSuse10 is out, and it is FREE! I'm upgrading I swear!) SMB server to my Mac went from (this is no exageration) 90-150KB/sec to 900KB-1MB/sec.
It does look like it bursts though... (Hi speeds for 10 seconds -- sleep for 2 seconds -- hi speed again but that could be my slow Wifi-G connection)
It Also provides much much faster responce time if you wan to cancel transfers. This is good stuff... has anyone seen it break anything? |
|
|
to Crypto5
Delayed ACK and TCP_NODELAY (disable Nagle's algorithm) are no the same thing. They do interact badly, however: » www.port80software.com/2 ··· 317.aspxThat shouldn't have been the problem in this case, 'cause you had TCP_NODELAY set in your smb.conf You might be on the right track with the Linux driver: » www.scyld.com/rtl8139.ht ··· #8139too |
|