Re: [PATCH net-next v9 2/9] iavf: kill "legacy-rx" for good

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 4/4/24 17:43, Alexander Lobakin wrote:
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: Alexander Duyck <alexanderduyck@xxxxxx>
Signed-off-by: Alexander Lobakin <aleksander.lobakin@xxxxxxxxx>
---
  drivers/net/ethernet/intel/iavf/iavf.h        |   2 +-
  drivers/net/ethernet/intel/iavf/iavf_txrx.h   |  27 +---
  .../net/ethernet/intel/iavf/iavf_ethtool.c    | 140 ------------------
  drivers/net/ethernet/intel/iavf/iavf_main.c   |  10 +-
  drivers/net/ethernet/intel/iavf/iavf_txrx.c   |  82 +---------
  .../net/ethernet/intel/iavf/iavf_virtchnl.c   |   3 +-
  6 files changed, 8 insertions(+), 256 deletions(-)

Awesome!
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@xxxxxxxxx>




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux