lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Wed, 26 Oct 2011 05:08:29 +0800
From:	Wu Fengguang <fengguang.wu@...el.com>
To:	Trond Myklebust <Trond.Myklebust@...app.com>,
	linux-nfs@...r.kernel.org
Cc:	Peter Zijlstra <a.p.zijlstra@...llo.nl>,
	"linux-fsdevel@...r.kernel.org" <linux-fsdevel@...r.kernel.org>,
	Andrew Morton <akpm@...ux-foundation.org>,
	Jan Kara <jack@...e.cz>, Christoph Hellwig <hch@....de>,
	Dave Chinner <david@...morbit.com>,
	Greg Thelen <gthelen@...gle.com>,
	Minchan Kim <minchan.kim@...il.com>,
	Vivek Goyal <vgoyal@...hat.com>,
	Andrea Righi <arighi@...eler.com>,
	linux-mm <linux-mm@...ck.org>,
	LKML <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH 1/2] nfs: writeback pages wait queue

On Sun, Oct 23, 2011 at 11:54:39PM +0800, Wu Fengguang wrote:
> On Fri, Oct 21, 2011 at 12:05:30AM +0800, Wu Fengguang wrote:
> > Trond,
> > 
> > After applying these two patches, the IO-less patchset performances
> > 45% better than the vanilla kernel and the average commit size only
> > decreases by -16% in the common NFS-thresh=1G/nfs-1dd case :)
> 
> To better understand how the NFS writeback wait queue helps, I
> visualized the network traffic over time. Attached are the graphs for
> the vanilla kernel and the one with the IO-less + NFS wait queue
> patches.
> 
> nfs-1dd-4k-32p-32016M-1024M:10-3.1.0-rc8-vanilla+/dstat-bw.png
> nfs-1dd-4k-32p-31951M-1024M:10-3.1.0-rc8-nfs-wq4+/dstat-bw.png
> 
> The obvious difference is, the network traffic become now more
> distributed and the "zero traffic" periods are mostly reduced.
> 
> The other 2dd, 10dd cases have similar results.

To better explore the internal NFS server states and to make it clear
where the performance gain comes from, I collected the dstat data in
the NFS server and visualized the network/disk throughputs over time.
The results are attached for the following test cases. 

nfs-1dd-4k-32p-32016M-1024M:10-3.1.0-rc10-vanilla+
nfs-1dd-4k-32p-31951M-1024M:10-3.1.0-rc9-ioless-full-nfs-wq5-next-20111014+

In the above cases, the vanilla kernel is shown to have roughly
_interleaved_ disk/net activities. After the patches, the disk/net
pipeline is well established, hence the impressive performance improvements.

     3.1.0-rc10-vanilla+  3.1.0-rc9-ioless-full-nfs-wq5-next-20111014+  
------------------------  ------------------------  
                   57.48       +25.5%        72.11  NFS-thresh=1G/nfs-10dd-4k-32p-32768M-1024M:10-X
                   63.86       +27.1%        81.15  NFS-thresh=1G/nfs-1dd-4k-32p-32768M-1024M:10-X
                   47.51       +80.1%        85.54  NFS-thresh=1G/nfs-2dd-4k-32p-32768M-1024M:10-X
                  168.85       +41.4%       238.80  TOTAL write_bw

          3.1.0-vanilla+  3.1.0-rc9-ioless-full-nfs-wq5-next-20111014+
------------------------  ------------------------
                   21.93       +97.0%        43.21  NFS-thresh=100M/nfs-10dd-4k-32p-32768M-100M:10-X
                   55.91       +27.4%        71.23  NFS-thresh=100M/nfs-1dd-4k-32p-32768M-100M:10-X
                   26.73      +129.2%        61.25  NFS-thresh=100M/nfs-2dd-4k-32p-32768M-100M:10-X
                   15.66       +40.3%        21.96  NFS-thresh=10M/nfs-10dd-4k-32p-32768M-10M:10-X
                   29.01        +0.7%        29.20  NFS-thresh=10M/nfs-1dd-4k-32p-32768M-10M:10-X
                   20.52        +7.9%        22.13  NFS-thresh=10M/nfs-2dd-4k-32p-32768M-10M:10-X
                   56.30       +28.1%        72.11  NFS-thresh=1G/nfs-10dd-4k-32p-32768M-1024M:10-X
                   63.33       +28.1%        81.15  NFS-thresh=1G/nfs-1dd-4k-32p-32768M-1024M:10-X
                   51.95       +64.6%        85.54  NFS-thresh=1G/nfs-2dd-4k-32p-32768M-1024M:10-X
                    9.87       -48.2%         5.11  NFS-thresh=1M/nfs-10dd-4k-32p-32768M-1M:10-X
                   14.52       -24.0%        11.03  NFS-thresh=1M/nfs-1dd-4k-32p-32768M-1M:10-X
                   15.69       -67.4%         5.12  NFS-thresh=1M/nfs-2dd-4k-32p-32768M-1M:10-X
                  381.42       +33.5%       509.05  TOTAL write_bw

The vanilla kernel's disk idle periods indicate that the background
flusher work is not running. This is true. The NFS server has 12GB
memory and hence 1.2GB background dirty thresh. So when the client
side has dirty thresh <= 1GB, it won't send enough data to trigger
the background work in NFS server. So the server disk IOs will be
triggered mostly by NFS commits. The patched kernel seems to generate
smoother commit pattern to prevent most disk idles.

To explore how it performs when the NFS server's background writeback
kicks in, I further tried lowering the NFS server's dirty thresholds
to

dirty_bytes = 1GB, background threshold = 512MB
-----------------------------------------------
graphs attached for cases:
        nfs-1dd-1M-32p-32016M-1024M:10-3.1.0-vanilla+
        nfs-1dd-1M-32p-31951M-1024M:10-3.1.0-rc9-ioless-full-nfs-wq5-next-20111014+

          3.1.0-vanilla+  3.1.0-rc9-ioless-full-nfs-wq5-next-20111014+
------------------------  ------------------------
                   25.23       +71.2%        43.21  NFS-thresh=100M/nfs-10dd-1M-32p-32768M-100M:10-X
                   60.21       +15.1%        69.29  NFS-thresh=100M/nfs-1dd-1M-32p-32768M-100M:10-X
                   33.46       +82.8%        61.18  NFS-thresh=100M/nfs-2dd-1M-32p-32768M-100M:10-X
                   21.81        +2.8%        22.42  NFS-thresh=10M/nfs-10dd-1M-32p-32768M-10M:10-X
                   28.71       -11.0%        25.55  NFS-thresh=10M/nfs-1dd-1M-32p-32768M-10M:10-X
                   28.11       -13.0%        24.46  NFS-thresh=10M/nfs-2dd-1M-32p-32768M-10M:10-X
                   54.10       +42.3%        76.97  NFS-thresh=1G/nfs-10dd-1M-32p-32768M-1024M:10-X
                   64.88       +29.1%        83.76  NFS-thresh=1G/nfs-1dd-1M-32p-32768M-1024M:10-X
                   53.64       +56.2%        83.79  NFS-thresh=1G/nfs-2dd-1M-32p-32768M-1024M:10-X
                   13.00       -61.0%         5.06  NFS-thresh=1M/nfs-10dd-1M-32p-32768M-1M:10-X
                   13.53       -33.9%         8.95  NFS-thresh=1M/nfs-1dd-1M-32p-32768M-1M:10-X
                   16.51       -72.5%         4.54  NFS-thresh=1M/nfs-2dd-1M-32p-32768M-1M:10-X
                  413.20       +23.2%       509.18  TOTAL write_bw

dirty_bytes = 100MB, background threshold = 50MB
------------------------------------------------
graphs attached for cases:
        nfs-1dd-100k-32p-32016M-1024M:10-3.1.0-vanilla+
        nfs-1dd-100k-32p-31951M-1024M:10-3.1.0-rc9-ioless-full-nfs-wq5-next-20111014+

          3.1.0-vanilla+  3.1.0-rc9-ioless-full-nfs-wq5-next-20111014+
------------------------  ------------------------
                   24.93       +71.1%        42.67  NFS-thresh=100M/nfs-10dd-100k-32p-32768M-100M:10-X
                   58.35       +23.0%        71.78  NFS-thresh=100M/nfs-1dd-100k-32p-32768M-100M:10-X
                   28.47      +123.0%        63.48  NFS-thresh=100M/nfs-2dd-100k-32p-32768M-100M:10-X
                   18.44       +22.5%        22.60  NFS-thresh=10M/nfs-10dd-100k-32p-32768M-10M:10-X
                   28.75        +0.1%        28.78  NFS-thresh=10M/nfs-1dd-100k-32p-32768M-10M:10-X
                   20.84       +12.0%        23.34  NFS-thresh=10M/nfs-2dd-100k-32p-32768M-10M:10-X
                   71.78        +6.4%        76.38  NFS-thresh=1G/nfs-10dd-100k-32p-32768M-1024M:10-X
                   91.02        -4.7%        86.72  NFS-thresh=1G/nfs-1dd-100k-32p-32768M-1024M:10-X
                   78.84        +9.9%        86.64  NFS-thresh=1G/nfs-2dd-100k-32p-32768M-1024M:10-X
                  421.42       +19.2%       502.39  TOTAL write_bw

The conclusion is,

- it helps the vanilla kernel performance to lower the NFS server's
  dirty threshold

- when NFS server's background writeback is not running, the patches
  will help establish good net/disk pipeline and improve performance;
  otherwise it maintains roughly the same performance

Thanks,
Fengguang

Download attachment "dstat-nfss-bw.png" of type "image/png" (58596 bytes)

Download attachment "dstat-nfss-bw.png" of type "image/png" (80812 bytes)

Download attachment "dstat-nfss-bw.png" of type "image/png" (57489 bytes)

Download attachment "dstat-nfss-bw.png" of type "image/png" (72627 bytes)

Download attachment "dstat-nfss-bw.png" of type "image/png" (63146 bytes)

Download attachment "dstat-nfss-bw.png" of type "image/png" (70136 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ