Whamcloud - gitweb
LU-8276 ldlm: Make lru clear always discard read lock pages 85/20785/7
authorPatrick Farrell <paf@cray.com>
Mon, 14 Aug 2017 10:09:35 +0000 (05:09 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 28 Aug 2017 06:26:21 +0000 (06:26 +0000)
commit6a369b59f3729513dd8e81c4964dc6183287b601
tree11b876c5f6aafff30582c2d626012905dc19f837
parentb36c377ff25c20417c481eab3798e67d042ec3a3
LU-8276 ldlm: Make lru clear always discard read lock pages

A significant amount of time is sometimes spent during
lru clearing (IE, echo 'clear' > lru_size) checking
pages to see if they are covered by another read lock.
Since all unused read locks will be destroyed by this
operation, the pages will be freed momentarily anyway,
and this is a waste of time.

This patch sets the LDLM_FL_DISCARD_DATA flag on all the PR
locks which are slated for cancellation by
ldlm_prepare_lru_list when it is called from
ldlm_ns_drop_cache.

The case where another lock covers those pages (and is in
use and so does not get cancelled by lru clear) is safe for
a few reasons:

1. When discarding pages, we wait (discard_cb->cl_page_own)
until they are in the cached state before invalidating.
So if they are actively in use, we'll wait until that use
is done.

2. Removal of pages under a read lock is something that can
happen due to memory pressure, since these are VFS cache
pages. If a client reads something which is then removed
from the cache and goes to read it again, this will simply
generate a new read request.

This has a performance cost for that reader, but if anyone
is clearing the ldlm lru while actively doing I/O in that
namespace, then they cannot expect good performance.

In the case of many read locks on a single resource, this
improves cleanup time dramatically.  In internal testing at
Cray with ~80,000 read locks on a single file, this improves
cleanup time from ~60 seconds to ~0.5 seconds.  This also
slightly improves cleanup speed in the case of 1 or a few
read locks on a file.

Signed-off-by: Patrick Farrell <paf@cray.com>
Change-Id: I0c076b31ea474bb5f012373ed2033de3e447b62d
Reviewed-on: https://review.whamcloud.com/20785
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/include/lustre_dlm_flags.h
lustre/include/lustre_osc.h
lustre/ldlm/ldlm_internal.h
lustre/ldlm/ldlm_request.c
lustre/ldlm/ldlm_resource.c
lustre/osc/osc_cache.c
lustre/osc/osc_lock.c
lustre/osc/osc_object.c