After recently upgrading to OS X 10.11.5, I noticed some SMB file transfers were taking a lot longer than usual. Instead of the normal 100MB/sec transfer speeds I typically see between my Macbook Pro and my Synology NAS on a gigabit (wired) network, I was seeing something closer to 30MB/sec.
Turns out I’m not the only one with this issue. Searching Google for “10.11.5 slow smb” returns pages full of results of people reporting the same issue. Most of them say “switch to AFP and the problem goes away.” That’s nice but I specifically use SMB because I have a share that’s accessed by Linux, Mac, and Windows - and so SMB is the right solution to keep file naming consistent.
The issue seems to come down to Apple’s SMB forcing default enabling of “client signing” which ruins performance.
One smart person (or conspiracy theorist) guesses that this was a change made by Apple based on the Badlock SMB issue in order to mitigate Man-In-The-Middle attacks. Regardless of the reason, it’s a really shitty thing to do to break transfer speeds on a well used protocol without at least acknowledging the problem or suggesting workarounds.
Buried in one thread on the Apple Discussion Forum is a suggestion to use the /etc/nsmb.conf file to disable client signing on the client end.
After unmounting & remounting the SMB share, I verified this returns transfer speeds to normal.
How to Fix It In One Command
Open up a terminal and enter this command.
printf "[default]\nsigning_required=no\n" | sudo tee /etc/nsmb.conf >/dev/null
Then unmount and remount any SMB shares.
Client signing does provide additional security, but who’s kidding who - nobody should be running SMB over the internet or on any untrusted network in the first place.
When Won’t This Work?
If your server is set to require SMB signing from clients, then this change will break SMB connectivity, and you will have to either reverse the change or change your SMB server settings.
Reversing The Change
If the fix is causing other issues or lack of SMB connectivity, and you need to reverse it - simply delete the /etc/nsmb.conf file with this command
sudo rm /etc/nsmb.conf
By default the file does not exist on a fresh install of OS X/macOS.