Saturday, February 13, 2016

Efficient file transmission, part 3

While I was struggling with SCP/SFTP and FTP transmissions, I found that SMB, the protocol behind Windows file sharing, is also adversely affected by network latency.
SMB v1 is a block-level protocol, similar to what we saw in SFTP; SMB v1, as implemented in Windows versions up to XP/2003, does not support pipelining. As a result its performance deteriorates on long fat networks. It was virtually impossible to make full use of the available hardware using that protocol.
The situation was vastly improved in SMB v2, implemented in Vista and 2008. That protocol supports larger block sizes and multiple parallel requests, making better use of the available bandwidth. In order to make use of the new features, both client and server need to support SMB v2.
Recently I had a chance to compare the performance of both protocol versions; I used a tool that compressed 150k files downloaded over SMB. Running the tool on Windows 2003 took 6-8 hours. On 2008 it took 2 hours. Round-trip time was under 1 millisecond for both machines.