lkml.org 
[lkml]   [2019]   [Aug]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 157/223] nfsd: fix performance-limiting session calculation
    Date
    [ Upstream commit c54f24e338ed2a35218f117a4a1afb5f9e2b4e64 ]

    We're unintentionally limiting the number of slots per nfsv4.1 session
    to 10. Often more than 10 simultaneous RPCs are needed for the best
    performance.

    This calculation was meant to prevent any one client from using up more
    than a third of the limit we set for total memory use across all clients
    and sessions. Instead, it's limiting the client to a third of the
    maximum for a single session.

    Fix this.

    Reported-by: Chris Tracy <ctracy@engr.scu.edu>
    Cc: stable@vger.kernel.org
    Fixes: de766e570413 "nfsd: give out fewer session slots as limit approaches"
    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/nfsd/nfs4state.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
    index 0aacd1c850c3..c4762d8aa9f8 100644
    --- a/fs/nfsd/nfs4state.c
    +++ b/fs/nfsd/nfs4state.c
    @@ -1502,16 +1502,16 @@ static u32 nfsd4_get_drc_mem(struct nfsd4_channel_attrs *ca)
    {
    u32 slotsize = slot_bytes(ca);
    u32 num = ca->maxreqs;
    - int avail;
    + unsigned long avail, total_avail;

    spin_lock(&nfsd_drc_lock);
    - avail = min((unsigned long)NFSD_MAX_MEM_PER_SESSION,
    - nfsd_drc_max_mem - nfsd_drc_mem_used);
    + total_avail = nfsd_drc_max_mem - nfsd_drc_mem_used;
    + avail = min((unsigned long)NFSD_MAX_MEM_PER_SESSION, total_avail);
    /*
    * Never use more than a third of the remaining memory,
    * unless it's the only way to give this client a slot:
    */
    - avail = clamp_t(int, avail, slotsize, avail/3);
    + avail = clamp_t(int, avail, slotsize, total_avail/3);
    num = min_t(int, num, avail / slotsize);
    nfsd_drc_mem_used += num * slotsize;
    spin_unlock(&nfsd_drc_lock);
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-08-02 12:09    [W:4.071 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site