Skip to content
  • Trond Myklebust's avatar
    SUNRPC: Move TCP receive data path into a workqueue context · edc1b01c
    Trond Myklebust authored
    
    
    Stream protocols such as TCP can often build up a backlog of data to be
    read due to ordering. Combine this with the fact that some workloads such
    as NFS read()-intensive workloads need to receive a lot of data per RPC
    call, and it turns out that receiving the data from inside a softirq
    context can cause starvation.
    
    The following patch moves the TCP data receive into a workqueue context.
    We still end up calling tcp_read_sock(), but we do so from a process
    context, meaning that softirqs are enabled for most of the time.
    
    With this patch, I see a doubling of read bandwidth when running a
    multi-threaded iozone workload between a virtual client and server setup.
    
    Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
    edc1b01c