On Tue, Sep 29, 2026 at 12:30:11AM +0300, Vitaliy Sochnev wrote: > The driver hands one RX descriptor at a time to the hardware and points > every descriptor at the same buffer, so the ring holds a single frame. > The legacy stack mostly copes, but lwIP opens a TCP window and the peer > sends segments back to back. On QEMU with e1000, lwIP wget of 1 MB > takes about 300 s; virtio-net transfers 20 MiB in under a second. > > Give each descriptor its own buffer and keep the ring filled. The ring > grows to 16 descriptors. Descriptors are handed back one cache line at > a time, with one line held back, so that flushing a descriptor never > overwrites a neighbour the hardware has written back meanwhile on > platforms without coherent DMA. > > With this change, 1 MB takes under 5 s and 20 MiB take 5.5 s. > > A similar change was proposed in 2023 but not merged. > > Link: > https://lore.kernel.org/u-boot/[email protected]/
Note that 4/4 of the series introduced a warning and so the series
wasn't merged.
A quick check and this seems like a reasonable size growth for
performance gain to me, I was a little worried, so I checked real quick
on ls1043ardb_tfa:
ls1043ardb_tfa : all +124 text +124
u-boot: add: 1/-1, grow: 3/0 bytes: 288/-164 (124)
function old new delta
e1000_arm_rx - 152 +152
e1000_free_pkt 28 104 +76
e1000_eth_start 7172 7212 +40
e1000_eth_recv 132 152 +20
fill_rx 164 - -164
--
Tom
signature.asc
Description: PGP signature
