[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <A98597CB-F422-4FE4-9A08-6EABAAE8C649@oracle.com>
Date: Tue, 28 Jun 2022 17:57:30 +0000
From: Chuck Lever III <chuck.lever@...cle.com>
To: Frank van der Linden <fvdl@...gle.com>
CC: Linux NFS Mailing List <linux-nfs@...r.kernel.org>,
netdev <netdev@...r.kernel.org>,
Dave Chinner <david@...morbit.com>,
"tgraf@...g.ch" <tgraf@...g.ch>, Jeff Layton <jlayton@...hat.com>
Subject: Re: [PATCH RFC 00/30] Overhaul NFSD filecache
> On Jun 23, 2022, at 4:27 PM, Frank van der Linden <fvdl@...gle.com> wrote:
>
> On Wed, Jun 22, 2022 at 7:12 AM Chuck Lever <chuck.lever@...cle.com> wrote:
>>
>> This series overhauls the NFSD filecache, a cache of server-side
>> "struct file" objects recently used by NFS clients. The purposes of
>> this overhaul are an immediate improvement in cache scalability in
>> the number of open files, and preparation for further improvements.
>>
>> There are three categories of patches in this series:
>>
>> 1. Add observability of cache operation so we can see what we're
>> doing as changes are made to the code.
>>
>> 2. Improve the scalability of filecache garbage collection,
>> addressing several bugs along the way.
>>
>> 3. Improve the scalability of the filecache hash table by converting
>> it to use rhashtable.
>>
>> The series as it stands survives typical test workloads. Running
>> stress-tests like generic/531 is the next step.
>>
>> These patches are also available in the linux-nfs-bugzilla-386
>> branch of
>>
>> https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git
>>
>> ---
>>
>> Chuck Lever (30):
>> NFSD: Report filecache LRU size
>> NFSD: Report count of calls to nfsd_file_acquire()
>> NFSD: Report count of freed filecache items
>> NFSD: Report average age of filecache items
>> NFSD: Add nfsd_file_lru_dispose_list() helper
>> NFSD: Refactor nfsd_file_gc()
>> NFSD: Refactor nfsd_file_lru_scan()
>> NFSD: Report the number of items evicted by the LRU walk
>> NFSD: Record number of flush calls
>> NFSD: Report filecache item construction failures
>> NFSD: Zero counters when the filecache is re-initialized
>> NFSD: Hook up the filecache stat file
>> NFSD: WARN when freeing an item still linked via nf_lru
>> NFSD: Trace filecache LRU activity
>> NFSD: Leave open files out of the filecache LRU
>> NFSD: Fix the filecache LRU shrinker
>> NFSD: Never call nfsd_file_gc() in foreground paths
>> NFSD: No longer record nf_hashval in the trace log
>> NFSD: Remove lockdep assertion from unhash_and_release_locked()
>> NFSD: nfsd_file_unhash can compute hashval from nf->nf_inode
>> NFSD: Refactor __nfsd_file_close_inode()
>> NFSD: nfsd_file_hash_remove can compute hashval
>> NFSD: Remove nfsd_file::nf_hashval
>> NFSD: Remove stale comment from nfsd_file_acquire()
>> NFSD: Clean up "open file" case in nfsd_file_acquire()
>> NFSD: Document nfsd_file_cache_purge() API contract
>> NFSD: Replace the "init once" mechanism
>> NFSD: Set up an rhashtable for the filecache
>> NFSD: Convert the filecache to use rhashtable
>> NFSD: Clean up unusued code after rhashtable conversion
>>
>>
>> fs/nfsd/filecache.c | 677 +++++++++++++++++++++++++++-----------------
>> fs/nfsd/filecache.h | 6 +-
>> fs/nfsd/nfsctl.c | 10 +
>> fs/nfsd/trace.h | 117 ++++++--
>> 4 files changed, 522 insertions(+), 288 deletions(-)
>>
>> --
>> Chuck Lever
>>
>
> Yep, looks good so far, thanks for doing this. Somewhat similar to my (buggy)
> attempt at fixing it that I sent at the time (don't put open files on
> the LRU, and
> use rhashtable), but cleaner and, presumably, less buggy :)
>
> Can't test it right now, but it seems like Wang already confirmed that it works.
Frank, thanks to you and Wang for reporting this issue, and sorry for
taking so long to address it.
--
Chuck Lever
Powered by blists - more mailing lists