Skip to content
  • Jianxin Xiong's avatar
    IB/hfi1: Reduce kernel context pio buffer allocation · 44306f15
    Jianxin Xiong authored
    
    
    The pio buffers were pooled evenly among all kernel contexts and
    user contexts. However, the demand from kernel contexts is much
    lower than user contexts. This patch reduces the allocation for
    kernel contexts and thus makes more credits available for PSM,
    helping performance. This is especially useful on high core-count
    systems where large numbers of contexts are used.
    
    A new context type SC_VL15 is added to distinguish the context used
    for VL15 from other kernel contexts. The reason is that VL15 needs
    to support 2KB sized packet while other kernel contexts need only
    support packets up to the size determined by "piothreshold", which
    has a default value of 256.
    
    The new allocation method allows triple buffering of largest pio
    packets configured for these contexts. This is sufficient to maintain
    verbs performance. The largest pio packet size is 2048B for VL15
    and "piothreshold" for other kernel contexts. A cap is applied to
    "piothreshold" to avoid excessive buffer allocation.
    
    The special case that SDMA is disable is handled differently. In
    that case, the original pooling allocation is used to better
    support the much higher pio traffic.
    
    Notice that if adaptive pio is disabled (piothreshold==0), the pio
    buffer size doesn't matter for non-VL15 kernel send contexts when
    SDMA is enabled because pio is not used at all on these contexts
    and thus the new allocation is still valid. If SDMA is disabled then
    pooling allocation is used as mentioned in previous paragraph.
    
    Adjustment is also made to the calculation of the credit return
    threshold for the kernel contexts. Instead of purely based on
    the MTU size, a percentage based threshold is also considered and
    the smaller one of the two is chosen. This is necessary to ensure
    that with the reduced buffer allocation credits are returned in
    time to avoid unnecessary stall in the send path.
    
    Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
    Reviewed-by: default avatarDean Luick <dean.luick@intel.com>
    Reviewed-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
    Reviewed-by: default avatarMark Debbage <mark.debbage@intel.com>
    Reviewed-by: default avatarJubin John <jubin.john@intel.com>
    Signed-off-by: default avatarJianxin Xiong <jianxin.xiong@intel.com>
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    44306f15