CIFS read performance on Linux < 3.2

Here’s what you can expect from read performance using the Linux CIFS kernel module prior to kernel 3.2.

See the ‘rsync’ graph in the lower right.

Abysmal CIFS read performance

Relevant context:

  1. Each of the colors in the rsync graph represent remote WAN sites. Each data point represents a transfer of ~200MB.
  2. No amount of dickering with the cifs.ko kernel module options improved anything
  3. All sites have at least 1.5Mbps links
  4. An HTTP get to each remote site ran at ~900kbps
  5. Using a Windows 2008 client to each remote site’s CIFS share gave ~940kbps
  6. Performance did not improve when using cp in place of rsync, nor did it improve with tweaks to the rsync options.
  7. The client of the CIFS shares was 96% CPU idle. A textbook case for illustrating to novices the reduced value of looking at load averages (see graph) to indicate how hard a host is working. The CPU graph was removed as it was irrelevant.

Thankfully, this is a largely solved issue and we’ll see it in future distributions. Here is the thread from the linux-cifs list.