• Chuck Lever's avatar
    xprtrdma: Reduce the number of hardway buffer allocations · 65866f82
    Chuck Lever authored
    While marshaling an RPC/RDMA request, the inline_{rsize,wsize}
    settings determine whether an inline request is used, or whether
    read or write chunks lists are built. The current default value of
    these settings is 1024. Any RPC request smaller than 1024 bytes is
    sent to the NFS server completely inline.
    
    rpcrdma_buffer_create() allocates and pre-registers a set of RPC
    buffers for each transport instance, also based on the inline rsize
    and wsize settings.
    
    RPC/RDMA requests and replies are built in these buffers. However,
    if an RPC/RDMA request is expected to be larger than 1024, a buffer
    has to be allocated and registered for that RPC, and deregistered
    and released when the RPC is complete. This is known has a
    "hardway allocation."
    
    Since the introduction of NFSv4, the size of RPC requests has become
    larger, and hardway allocations are thus more frequent. Hardway
    allocations are significant overhead, and they waste the existing
    RPC buffers pre-allocated by rpcrdma_buffer_create().
    
    We'd like fewer hardway allocations.
    
    Increasing the size of the pre-registered buffers is the most direct
    way to do this. However, a blanket increase of the inline thresholds
    has interoperability consequences.
    
    On my 64-bit system, rpcrdma_buffer_create() requests roughly 7000
    bytes for each RPC request buffer, using kmalloc(). Due to internal
    fragmentation, this wastes nearly 1200 bytes because kmalloc()
    already returns an 8192-byte piece of memory for a 7000-byte
    allocation request, though the extra space remains unused.
    
    So let's round up the size of the pre-allocated buffers, and make
    use of the unused space in the kmalloc'd memory.
    
    This change reduces the amount of hardway allocated memory for an
    NFSv4 general connectathon run from 1322092 to 9472 bytes (99%).
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Tested-by: default avatarSteve Wise <swise@opengridcomputing.com>
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    65866f82
verbs.c 46.6 KB