![]() | Oracle System Handbook - ISO 7.0 May 2018 Internal/Partner Edition | ||
|
|
![]() |
||||||||||||||||
Solution Type Problem Resolution Sure Solution 1611334.1 : Sun Storage 7000 Unified Storage System: Extremely Slow SMB Performance to Mac Clients if Edge Switch is 10Gb Connected
In this Document
Created from <SR 3-7792689041> Applies to:Sun ZFS Storage 7120 - Version Not Applicable and laterSun Storage 7410 Unified Storage System - Version Not Applicable and later Sun ZFS Storage 7420 - Version Not Applicable and later Sun Storage 7310 Unified Storage System - Version Not Applicable and later Sun Storage 7210 Unified Storage System - Version Not Applicable and later Apple Mac OS X (Intel) (64-bit) Apple Mac OS X (Intel) (32-bit) 7000 Appliance OS (Fishworks) SymptomsSMB transfers are slow between Mac clients running OSX 10.7 or 10.8 when they are connected via the 10Gbps link. Those connected via a 1Gbps link do not show this problem. CauseMac OSX has a tunable parameter, net.inet.tcp.delayed_ack which controls when TCP acknowledgements are sent. The default setting, net.inet.tcp.delayed_ack=3, causes the OS to check for and throttle back high speed streaming data that can negatively impact interactive network I/O. If high speed streaming is detected, acknowledgements are delayed. Snoops show the delay is 200ms. This can result in an idle connection for significant periods of time on a high speed link. In our test, we saw about a 200 ms delay once every transfer of 61440 bytes. That limited the transfer speed to 300K bytes per second as the data transfer time was a fraction of the delay. The delayed acknowledgements introduce a pacing mechanism that seriously degrades throughput on file transfers.
SolutionThe customer tested the 4 possible settings, 0-3, and settled on net.inet.tcp.delayed_ack=2. This results in an acknowledgement every other packet. Commands To set the value in the running kernel: sudo sysctl -w net.inet.tcp.delayed_ack=2
To have the system set the value on subsequent boots: echo net.inet.tcp.delayed_ack=2 > /etc/sysctl.conf
Based on notes found on the internet, the following are the possible values and effects for net.inet.tcp.delayed_ack. I was unable to get a definitive answer. 0 = acknowledge each packet 1 = send 1 ack for each 6 packets 2 = send immediate ack after the 2nd packet, 2 packets per ack 3 = auto detect streaming (DEFAULT)
Attachments This solution has no attachment |
||||||||||||||||
|