On Wed, Jul 01, 2026 at 04:45:14PM +0200, Maciej Fijalkowski wrote:
> On Wed, Jul 01, 2026 at 07:15:44AM -0700, Dipayaan Roy wrote:
> > On some ARM64 platforms with 4K PAGE_SIZE, utilizing page_pool
> > fragments for allocation in the RX refill path (~2kB buffer per fragment)
> > causes 15-20% throughput regression under high connection counts
> > (>16 TCP streams at 180+ Gbps). Using full-page buffers on these
> > platforms shows no regression and restores line-rate performance.
> >
> > This behavior is observed on a single platform; other platforms
> > perform better with page_pool fragments, indicating this is not a
> > page_pool issue but platform-specific.
> >
> > This series adds an ethtool private flag "full-page-rx" to let the
> > user opt in to one RX buffer per page:
> >
> > ethtool --set-priv-flags eth0 full-page-rx on
> >
> > There is no behavioral change by default. The flag can be persisted
> > via udev rule for affected platforms.
>
> Were you able to track down what is the actual bottleneck on the 'broken'
> platform? What is the performance of full-page approach on healthy
> platforms? On changelog below you mention the frag approach 'outperforms'
> the full-page one.
>
Hi Maciej,
The HW team identified a PCIE root port stall occurring due to a PCIe
errata in a HW IP used for this platform. Using full pages increases the
time in packet refill path and indirectly helping to reduce the back pressure
in NIC pipeline caused due to the stall in root port. As per them it
will be fixed in next version of this hw which is not anytime soon.
On various other healthy platforms with 4k base page size we tested, we see
improvements using page fragments than full pages around anywhere between 5 to
15%.
Regards
Dipayaan Roy
> >
> > This series depends on the following fixes now merged in net-next:
> > commit 17bfe0a8c014 ("net: mana: Add NULL guards in teardown path to
> > prevent panic on attach failure")
> > commit 5b05aa36ee24 ("net: mana: Skip redundant detach on
> > already-detached port")
> >
> > Changes in v11:
> > - Rebased on net-next
> > Changes in v10:
> > - Rebased on net-next which now includes the prerequisite fixes.
> > - Recovery logic in mana_set_priv_flags() leverages the idempotent
> > mana_detach() from the merged fixes.
> > Changes in v9:
> > - Added correct tree.
> > Changes in v8:
> > - Fixed queue_reset_work recovery by restoring port_is_up before
> > scheduling reset so the handler can properly re-attach.
> > - Simplified "err && schedule_port_reset" to "schedule_port_reset".
> > Changes in v7:
> > - Rebased onto net-next.
> > - Retained private flag approach after David Wei's testing on
> > Grace (ARM64) confirmed that fragment mode outperforms
> > full-page mode on other platforms, validating this is a
> > single-platform workaround rather than a generic issue.
> > Changes in v6:
> > - Added missed maintainers.
> > Changes in v5:
> > - Split prep refactor into separate patch (patch 1/2)
> > Changes in v4:
> > - Dropping the smbios string parsing and add ethtool priv flag
> > to reconfigure the queues with full page rx buffers.
> > Changes in v3:
> > - changed u8* to char*
> > Changes in v2:
> > - separate reading string index and the string, remove inline.
> >
> > Dipayaan Roy (2):
> > net: mana: refactor mana_get_strings() and mana_get_sset_count() to
> > use switch
> > net: mana: force full-page RX buffers via ethtool private flag
> >
> > drivers/net/ethernet/microsoft/mana/mana_en.c | 22 ++-
> > .../ethernet/microsoft/mana/mana_ethtool.c | 178 +++++++++++++++---
> > include/net/mana/mana.h | 8 +
> > 3 files changed, 177 insertions(+), 31 deletions(-)
> >
> > --
> > 2.43.0
> >
> >