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

From: Jones Syue
Date: Thu Apr 16 2020 - 03:33:36 EST


Hello Steve

> Test read performance over 1GbE network with command:
Also test read performance over 10GbE network,
vers=2.1+ can reach over 600 MB/s with v2.patch.

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 110MB/s, max read IO size 16KB
vers=2.0,cache=strict: read throughput 106MB/s, max read IO size 16KB
vers=2.1,cache=strict: read throughput 667MB/s, max read IO size 1MB
vers=3.0,cache=strict: read throughput 639MB/s, max read IO size 1MB
without patch,
vers=1.0,cache=strict: read throughput 107MB/s, max read IO size 16KB
vers=2.0,cache=strict: read throughput 107MB/s, max read IO size 16KB
vers=2.1,cache=strict: read throughput 106MB/s, max read IO size 16KB
vers=3.0,cache=strict: read throughput 106MB/s, max read IO size 16KB

command:
mount -tcifs //<server_ip>/<share> /remote_strict
-overs=<x.y>,cache=strict,username=<uu>,password=<pp>
dd if=/remote_strict/10G.img of=/dev/null bs=1M count=10240

--
Regards,
Jones Syue | èæå
QNAP Systems, Inc.

On Thu, Apr 16, 2020 at 11:46 AM Jones Syue <jonessyue@xxxxxxxx> wrote:
>
> 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.