[PATCH 0/6 RFC v2] nfsd: allocate/free session-based DRC slots on demand

NeilBrown
2024-11-19T00:49:43Z

Here is v2 of my series for on-demand allocation and freeing of session DRC slots.

- Now uses an xarray to store slots, and the limit is raised to 2048
- delays retiring a slot until the client has confirmed that it isn't
using it as described in RFC:

The replier SHOULD retain the slots it wants to retire until the
requester sends a request with a highest_slotid less than or equal
to the replier's new enforced highest_slotid.

- When a retired slot is used, allow the seqid to be the next in sequence
as required by the RFC:

Each time a slot is reused, the request MUST specify a sequence
ID that is one greater than that of the previous request on the
slot.

or "1" as (arguably) allowed by the RFC:

The first time a slot is used, the requester MUST specify a
sequence ID of one

- current slot allocation is now reported in /proc/fs/nfsd/clients/*/info

This has been tested with highly aggressive shrinker settings:
nfsd_slot_shrinker->seeks = 0;
nfsd_slot_shrinker->batch = 2;

and with periodic "echo 3 > drop_caches". The slot count drops as
expected and then increases again.

NeilBrown