On Wed, 2016-09-07 at 18:08 +0300, Saeed Mahameed wrote: > On Wed, Sep 7, 2016 at 5:41 PM, Eric Dumazet <eric.duma...@gmail.com> wrote: > > On Wed, 2016-09-07 at 15:42 +0300, Saeed Mahameed wrote: > >> Previously we rang XDP SQ doorbell on every forwarded XDP packet. > >> > >> Here we introduce a xmit more like mechanism that will queue up more > >> than one packet into SQ (up to RX napi budget) w/o notifying the hardware. > >> > >> Once RX napi budget is consumed and we exit napi RX loop, we will > >> flush (doorbell) all XDP looped packets in case there are such. > > > > Why is this idea depends on XDP ? > > > > It looks like we could apply it to any driver having one IRQ servicing > > one RX and one TX, without XDP being involved. > > > > Yes but it is more complicated than XDP case, where the RX ring posts > the TX descriptors and once done > the RX ring hits the doorbell once for all the TX descriptors it > posted, and it is the only possible place to hit a doorbell > for XDP TX ring. > > For regular TX and RX ring sharing the same IRQ, there is no such > simple connection between them, and hitting a doorbell > from RX ring napi would race with xmit ndo function of the TX ring. > > How do you synchronize in such case ? > isn't the existing xmit more mechanism sufficient enough ?
Only if a qdisc is present and pressure is high enough. But in a forwarding setup, we likely receive at a lower rate than the NIC can transmit. A simple cmpxchg could be used to synchronize the thing, if we really cared about doorbell cost. (Ie if the cost of this cmpxchg() is way smaller than doorbell one)