• Maciej Fijalkowski's avatar
    ice: xsk: change batched Tx descriptor cleaning · 29322791
    Maciej Fijalkowski authored
    AF_XDP Tx descriptor cleaning in ice driver currently works in a "lazy"
    way - descriptors are not cleaned immediately after send. We rather hold
    on with cleaning until we see that free space in ring drops below
    particular threshold. This was supposed to reduce the amount of
    unnecessary work related to cleaning and instead of keeping the ring
    empty, ring was rather saturated.
    
    In AF_XDP realm cleaning Tx descriptors implies producing them to CQ.
    This is a way of letting know user space that particular descriptor has
    been sent, as John points out in [0].
    
    We tried to implement serial descriptor cleaning which would be used in
    conjunction with batched cleaning but it made code base more convoluted
    and probably harder to maintain in future. Therefore we step away from
    batched cleaning in a current form in favor of an approach where we set
    RS bit on every last descriptor from a batch and clean always at the
    beginning of ice_xmit_zc().
    
    This means that we give up a bit of Tx performance, but this doesn't
    hurt l2fwd scenario which is way more meaningful than txonly as this can
    be treaten as AF_XDP based packet generator. l2fwd is not hurt due to
    the fact that Tx side is much faster than Rx and Rx is the one that has
    to catch Tx up.
    
    FWIW Tx descriptors are still produced in a batched way.
    
    [0]: https://lore.kernel.org/bpf/62b0a20232920_3573208ab@john.notmuch/
    
    Fixes: 126cdfe1 ("ice: xsk: Improve AF_XDP ZC Tx and use batching API")
    Signed-off-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
    Tested-by: default avatarGeorge Kuruvinakunnel <george.kuruvinakunnel@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    29322791
ice_xsk.h 2.08 KB