2022-09-27 17:35:17

by Chuck Lever III

[permalink] [raw]
Subject: [PATCH RFC 0/2] Replace file_hashtbl with an rhashtable

Hi, while testing I noticed that sometimes thousands of items are
inserted into file_hashtbl, but it's a small fixed-size hash. That
makes the buckets in file_hashtbl larger than two or three items.
The comparison function (fh_match) used while walking through the
buckets is expensive and cache-unfriendly.

The following patches seem to help alleviate that overhead.

---

Chuck Lever (2):
NFSD: Use const pointers as parameters to fh_ helpers.
NFSD: Use rhashtable for managing nfs4_file objects


fs/nfsd/nfs4state.c | 227 ++++++++++++++++++++++++++++++--------------
fs/nfsd/nfsfh.h | 10 +-
fs/nfsd/state.h | 5 +-
3 files changed, 162 insertions(+), 80 deletions(-)

--
Chuck Lever


2022-09-28 10:36:09

by Jeff Layton

[permalink] [raw]
Subject: Re: [PATCH RFC 0/2] Replace file_hashtbl with an rhashtable

On Tue, 2022-09-27 at 13:22 -0400, Chuck Lever wrote:
> Hi, while testing I noticed that sometimes thousands of items are
> inserted into file_hashtbl, but it's a small fixed-size hash. That
> makes the buckets in file_hashtbl larger than two or three items.
> The comparison function (fh_match) used while walking through the
> buckets is expensive and cache-unfriendly.
>
> The following patches seem to help alleviate that overhead.
>
> ---
>
> Chuck Lever (2):
> NFSD: Use const pointers as parameters to fh_ helpers.
> NFSD: Use rhashtable for managing nfs4_file objects
>
>
> fs/nfsd/nfs4state.c | 227 ++++++++++++++++++++++++++++++--------------
> fs/nfsd/nfsfh.h | 10 +-
> fs/nfsd/state.h | 5 +-
> 3 files changed, 162 insertions(+), 80 deletions(-)
>
> --
> Chuck Lever
>

This set all looks reasonable to me, and I like the idea of moving to
rhashtable. You can add:

Reviewed-by: Jeff Layton <[email protected]>

2022-09-29 16:29:48

by Chuck Lever III

[permalink] [raw]
Subject: Re: [PATCH RFC 0/2] Replace file_hashtbl with an rhashtable



> On Sep 28, 2022, at 6:23 AM, Jeff Layton <[email protected]> wrote:
>
> On Tue, 2022-09-27 at 13:22 -0400, Chuck Lever wrote:
>> Hi, while testing I noticed that sometimes thousands of items are
>> inserted into file_hashtbl, but it's a small fixed-size hash. That
>> makes the buckets in file_hashtbl larger than two or three items.
>> The comparison function (fh_match) used while walking through the
>> buckets is expensive and cache-unfriendly.
>>
>> The following patches seem to help alleviate that overhead.
>>
>> ---
>>
>> Chuck Lever (2):
>> NFSD: Use const pointers as parameters to fh_ helpers.
>> NFSD: Use rhashtable for managing nfs4_file objects
>>
>>
>> fs/nfsd/nfs4state.c | 227 ++++++++++++++++++++++++++++++--------------
>> fs/nfsd/nfsfh.h | 10 +-
>> fs/nfsd/state.h | 5 +-
>> 3 files changed, 162 insertions(+), 80 deletions(-)
>>
>> --
>> Chuck Lever
>>
>
> This set all looks reasonable to me, and I like the idea of moving to
> rhashtable. You can add:
>
> Reviewed-by: Jeff Layton <[email protected]>

Thanks for having a look. I'm not sure I want to push these as soon
as v6.1, as they are quite fresh. That might increase the likelihood
of collisions when you work on cleaning up stateID reference counting.


--
Chuck Lever