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

Attachment: signature.asc
Description: PGP signature

Reply via email to