Steve French
2014-07-04 01:31:21 UTC
Pavel has been working on a patch series to improve performance of
large i/o from cifs.ko when mounted with the more modern SMB3
protocol.
My initial informal performance comparisons with and without his
patches looks very promising.
For comparison purposes among protocols etc. the default rsize that
will be negotiated is:
- for cifs mounts to Samba server (Unix Extensions enabled by default): 1MB
- for cifs mounts to servers that don't support the CIFS protocol Unix
Extensions: 61440
- for smb2/smb2.1/smb3 mounts prior to Pavel's patch series: 64K
- for smb2.1/smb3 mounts with his patch set: 1MB (write size also
increased from 64K to 1MB).
Note that protocol versions prior to SMB2.1 supported a maximum write
size of 64K (127K does work in some cases for cifs although rarely
used), except for the special case of cifs with Unix extensions.
Initial performance results are promising. Using a 1GB source file
on the server and copying it ala dd if=/mnt/sample of=/mnt/target
bs=20M
(Source and target are virtual machines on the same laptop -
performance gains would likely be more impressive on real hardware.
Target system was Samba server version 4.1.9 on Fedora 20. Client
system was current mainline 3.16.0-rc3 on Ubuntu)
With SMB3 mounts without Pavel's patches (current mainline kernel 3.16.0-rc3)
46MB/s
With his patches:
91MB/s (about a 2x improvement in large file copy performance)
(With cifs protocol instead of smb3 the performance was in between,
averaging about 65MB/s)
With my first set of iozone runs, I 2x to 4x improvement in read
performance with Pavel's patch set, and significant, although less
dramatic improvements in write performance. See below:
File size set to 512000 KB
Record Size 1024 KB
Include close in write timing
Command line used: iozone -s 500m -r 1m -c
Output is in Kbytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 Kbytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
New module, smb3 mounts:
random
random bkwd record stride
KB reclen write rewrite read reread read
write read rewrite read fwrite frewrite fread freread
512000 1024 102225 118000 272040 276514 228472
184573 226345 112443 230808 187307 185719 279627 278387
512000 1024 140464 111514 268999 277897 225019
139465 238265 125377 230924 112630 111014 275391 278125
Old module, prior to Pavel's paches, smb3 mounts:
512000 1024 99480 100647 76163 76199 78331
108361 74927 108555 77629 100585 100621 76882 77539
512000 1024 97903 142542 72895 75871 79708
108268 76519 105839 78979 122057 107614 75624 73454
large i/o from cifs.ko when mounted with the more modern SMB3
protocol.
My initial informal performance comparisons with and without his
patches looks very promising.
For comparison purposes among protocols etc. the default rsize that
will be negotiated is:
- for cifs mounts to Samba server (Unix Extensions enabled by default): 1MB
- for cifs mounts to servers that don't support the CIFS protocol Unix
Extensions: 61440
- for smb2/smb2.1/smb3 mounts prior to Pavel's patch series: 64K
- for smb2.1/smb3 mounts with his patch set: 1MB (write size also
increased from 64K to 1MB).
Note that protocol versions prior to SMB2.1 supported a maximum write
size of 64K (127K does work in some cases for cifs although rarely
used), except for the special case of cifs with Unix extensions.
Initial performance results are promising. Using a 1GB source file
on the server and copying it ala dd if=/mnt/sample of=/mnt/target
bs=20M
(Source and target are virtual machines on the same laptop -
performance gains would likely be more impressive on real hardware.
Target system was Samba server version 4.1.9 on Fedora 20. Client
system was current mainline 3.16.0-rc3 on Ubuntu)
With SMB3 mounts without Pavel's patches (current mainline kernel 3.16.0-rc3)
46MB/s
With his patches:
91MB/s (about a 2x improvement in large file copy performance)
(With cifs protocol instead of smb3 the performance was in between,
averaging about 65MB/s)
With my first set of iozone runs, I 2x to 4x improvement in read
performance with Pavel's patch set, and significant, although less
dramatic improvements in write performance. See below:
File size set to 512000 KB
Record Size 1024 KB
Include close in write timing
Command line used: iozone -s 500m -r 1m -c
Output is in Kbytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 Kbytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
New module, smb3 mounts:
random
random bkwd record stride
KB reclen write rewrite read reread read
write read rewrite read fwrite frewrite fread freread
512000 1024 102225 118000 272040 276514 228472
184573 226345 112443 230808 187307 185719 279627 278387
512000 1024 140464 111514 268999 277897 225019
139465 238265 125377 230924 112630 111014 275391 278125
Old module, prior to Pavel's paches, smb3 mounts:
512000 1024 99480 100647 76163 76199 78331
108361 74927 108555 77629 100585 100621 76882 77539
512000 1024 97903 142542 72895 75871 79708
108268 76519 105839 78979 122057 107614 75624 73454
--
Thanks,
Steve
Thanks,
Steve