Whamcloud - gitweb
LU-13799 osc: Improve osc_queue_sync_pages 82/39482/22
authorPatrick Farrell <farr0186@gmail.com>
Tue, 15 Jun 2021 14:23:04 +0000 (10:23 -0400)
committerPatrick Farrell <pfarrell@whamcloud.com>
Sat, 3 Jul 2021 19:01:15 +0000 (15:01 -0400)
commitad6f5a41a14d6017e657d5c337fa24e96252bbeb
treeeae25f793b33cafc06c2433f17f6ace4401136ec
parentdd699f481ad03ce21225bd7a936c88417a786bc3
LU-13799 osc: Improve osc_queue_sync_pages

This patch was split and partially done in:
https://review.whamcloud.com/38214

So the text below refers to the combination of this patch
and that one.  This patch now just improves a looped atomic
add by replacing with a single one.  The rest of the grant
calcuation change is in
https://review.whamcloud.com/38214

(I am retaining the text below to show the performance
improvement)
----------
osc_queue_sync_pages now has a grant calculation component,
this has a pretty painful impact on the new faster DIO
performance.  Specifically, per page ktime_get() and the
per-page atomic_add cost close to 10% of total CPU time in
the DIO path.

We can make this per batch of pages rather than for each
page, which reduces this cost from 10% of CPU to almost
nothing.

This improves write performance by about 10% (but has no
effect on reads, since they don't use grant).

This patch reduces i/o time in ms/GiB by:
Write: 10 ms/GiB
Read: 0 ms/GiB

Totals:
Write: 158 ms/GiB
Read: 161 ms/GiB

mpirun -np 1 $IOR -w -t 1G -b 64G -o $FILE --posix.odirect

Before patch:
write     6071

After patch:
write     6470

(Read is similar.)

This also fixes a mistake in c24c25dc1b / LU-13419 where it
removed the shrink interval update entirely from the direct
i/o path.

Fixes: c24c25dc1b ("LU-13419 osc: Move shrink update to per-write")
Signed-off-by: Patrick Farrell <farr0186@gmail.com>
Change-Id: Ic606e03be58239c291ec0382fa89eba64560da53
lustre/osc/osc_cache.c