• Alexander Lobakin's avatar
    iavf: kill "legacy-rx" for good · 53844673
    Alexander Lobakin authored
    Ever since build_skb() became stable, the old way with allocating an skb
    for storing the headers separately, which will be then copied manually,
    was slower, less flexible, and thus obsolete.
    
    * It had higher pressure on MM since it actually allocates new pages,
      which then get split and refcount-biased (NAPI page cache);
    * It implies memcpy() of packet headers (40+ bytes per each frame);
    * the actual header length was calculated via eth_get_headlen(), which
      invokes Flow Dissector and thus wastes a bunch of CPU cycles;
    * XDP makes it even more weird since it requires headroom for long and
      also tailroom for some time (since mbuf landed). Take a look at the
      ice driver, which is built around work-arounds to make XDP work with
      it.
    
    Even on some quite low-end hardware (not a common case for 100G NICs) it
    was performing worse.
    The only advantage "legacy-rx" had is that it didn't require any
    reserved headroom and tailroom. But iavf didn't use this, as it always
    splits pages into two halves of 2k, while that save would only be useful
    when striding. And again, XDP effectively removes that sole pro.
    
    There's a train of features to land in IAVF soon: Page Pool, XDP, XSk,
    multi-buffer etc. Each new would require adding more and more Danse
    Macabre for absolutely no reason, besides making hotpath less and less
    effective.
    Remove the "feature" with all the related code. This includes at least
    one very hot branch (typically hit on each new frame), which was either
    always-true or always-false at least for a complete NAPI bulk of 64
    frames, the whole private flags cruft, and so on. Some stats:
    
    Function: add/remove: 0/4 grow/shrink: 0/7 up/down: 0/-721 (-721)
    RO Data: add/remove: 0/1 grow/shrink: 0/0 up/down: 0/-40 (-40)
    Reviewed-by: default avatarAlexander Duyck <alexanderduyck@fb.com>
    Reviewed-by: default avatarPrzemek Kitszel <przemyslaw.kitszel@intel.com>
    Signed-off-by: default avatarAlexander Lobakin <aleksander.lobakin@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    53844673
iavf_main.c 146 KB