diff options
| author | Dipayaan Roy <dipayanroy@linux.microsoft.com> | 2026-07-28 23:21:29 -0700 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2026-08-03 19:09:07 -0700 |
| commit | 5b5cb75fb86af9752f8222ed6ca5aecfa4c8aa45 (patch) | |
| tree | 32b05dd557f85efb4fdd0a9e1f25b88d9169e71f /include/net | |
| parent | d52f80731055ee43b36bf60088679aca97a484da (diff) | |
| download | linux-5b5cb75fb86af9752f8222ed6ca5aecfa4c8aa45.tar.gz linux-5b5cb75fb86af9752f8222ed6ca5aecfa4c8aa45.zip | |
net: mana: force full-page RX buffers via ethtool private flag
On some ARM64 platforms with 4K PAGE_SIZE, page_pool fragment
allocation in the RX refill path can cause 15-20% throughput
regression under high connection counts (>16 TCP streams).
Add an ethtool private flag "full-page-rx" that allows the user to
force one RX buffer per page, bypassing the page_pool fragment path.
This restores line-rate (180+ Gbps) performance on affected platforms.
Usage:
ethtool --set-priv-flags eth0 full-page-rx on
There is no behavioral change by default. The flag must be explicitly
enabled by the user or udev rule.
The existing single-buffer-per-page logic for XDP and jumbo frames is
consolidated into a new helper mana_use_single_rxbuf_per_page() which
is now the single decision point for both the automatic and
user-controlled paths.
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Dipayaan Roy <dipayanroy@linux.microsoft.com>
Link: https://patch.msgid.link/20260729063347.3388035-3-dipayanroy@linux.microsoft.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include/net')
| -rw-r--r-- | include/net/mana/mana.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/include/net/mana/mana.h b/include/net/mana/mana.h index 4d041fb8437f..9ffbdff5746f 100644 --- a/include/net/mana/mana.h +++ b/include/net/mana/mana.h @@ -31,6 +31,12 @@ enum TRI_STATE { TRI_STATE_TRUE = 1 }; +/* MANA ethtool private flag bit positions */ +enum mana_priv_flag_bits { + MANA_PRIV_FLAG_USE_FULL_PAGE_RXBUF = 0, + MANA_PRIV_FLAG_MAX, +}; + /* Number of entries for hardware indirection table must be in power of 2 */ #define MANA_INDIRECT_TABLE_MAX_SIZE 512 #define MANA_INDIRECT_TABLE_DEF_SIZE 64 @@ -568,6 +574,8 @@ struct mana_port_context { u32 rxbpre_headroom; u32 rxbpre_frag_count; + u32 priv_flags; + struct bpf_prog *bpf_prog; /* Create num_queues EQs, SQs, SQ-CQs, RQs and RQ-CQs, respectively. */ |
