[PATCH] cifs: improve read performance for page size 64KB & cache=strict & vers=2.1+

Jones Syue jonessyue at qnap.com
Thu Apr 16 03:46:41 UTC 2020


Hello Steve

> Did you also test (at least briefly) with vers=1.0 since some of your
> code affects that code path too?

Yes test v2.patch on 2 platforms aarch64 (page size 64KB) and x86_64
(page size 4KB), vers=1.0 read function works fine on both.

Test read performance over 1GbE network with command:
'dd if=/remote_strict/10G.img of=/dev/null bs=1M count=10240'

For read performance on aarch64 (page size 64KB), vers=[1.0|2.0] is not as
fast as vers=2.1+, max_read on both SMB 1 (16KB) and SMB 2.0 (64KB) are
still smaller then page size 64KB plus packet header size, hence do not
support readpages.
aarch64, page size 64KB (CONFIG_ARM64_64K_PAGES=y), linux-4.2.8,
cpu Annapurna Labs Alpine AL324 Quad-core ARM Cortex-A57 CPU @ 1.70GHz,
ram 8GB,
with patch,
vers=1.0,cache=strict: read throughput 40MB/s, max read IO size 16KB
vers=2.0,cache=strict: read throughput 40MB/s, max read IO size 16KB
vers=2.1,cache=strict: read throughput 115MB/s, max read IO size 1MB
vers=3.0,cache=strict: read throughput 115MB/s, max read IO size 1MB
without patch,
vers=1.0,cache=strict: read throughput 40MB/s, max read IO size 16KB
vers=2.0,cache=strict: read throughput 40MB/s, max read IO size 16KB
vers=2.1,cache=strict: read throughput 40MB/s, max read IO size 16KB
vers=3.0,cache=strict: read throughput 40MB/s, max read IO size 16KB

For read performance on x86_64 (page size 4KB), all vers can support
readpages because max_read is bigger than page size 4KB plus packet header
size.
x86_64, page size 4KB, linux-4.2.8,
cpu AMD Embedded R-Series RX-421ND 2.10GHz,
ram 4GB,
without patch,
vers=1.0,cache=strict: read throughput 109MB/s, read IO size 60KB
vers=2.0,cache=strict: read throughput 115MB/s, read IO size 64KB
vers=2.1,cache=strict: read throughput 117MB/s, read IO size 1MB
vers=3.0,cache=strict: read throughput 117MB/s, read IO size 1MB
with patch,
vers=1.0,cache=strict: read throughput 110MB/s, read IO size 60KB
vers=2.0,cache=strict: read throughput 115MB/s, read IO size 64KB
vers=2.1,cache=strict: read throughput 117MB/s, read IO size 1MB
vers=3.0,cache=strict: read throughput 117MB/s, read IO size 1MB

> And if anyone figures out how to configure an x86_64 Linux to use
> PAGE_SIZE of 64K or larger let me know...
I am using physical platform with arm cpu and aarch64 toolchain,
perhaps try qemu-system-aarch64 later.

--
Regards,
Jones Syue | 薛懷宗
QNAP Systems, Inc.


More information about the samba-technical mailing list