• willy tarreau's avatar
    net: mvneta: replace Tx timer with a real interrupt · 71f6d1b3
    willy tarreau authored
    Right now the mvneta driver doesn't handle Tx IRQ, and relies on two
    mechanisms to flush Tx descriptors : a flush at the end of mvneta_tx()
    and a timer. If a burst of packets is emitted faster than the device
    can send them, then the queue is stopped until next wake-up of the
    timer 10ms later. This causes jerky output traffic with bursts and
    pauses, making it difficult to reach line rate with very few streams.
    
    A test on UDP traffic shows that it's not possible to go beyond 134
    Mbps / 12 kpps of outgoing traffic with 1500-bytes IP packets. Routed
    traffic tends to observe pauses as well if the traffic is bursty,
    making it even burstier after the wake-up.
    
    It seems that this feature was inherited from the original driver but
    nothing there mentions any reason for not using the interrupt instead,
    which the chip supports.
    
    Thus, this patch enables Tx interrupts and removes the timer. It does
    the two at once because it's not really possible to make the two
    mechanisms coexist, so a split patch doesn't make sense.
    
    First tests performed on a Mirabox (Armada 370) show that less CPU
    seems to be used when sending traffic. One reason might be that we now
    call the mvneta_tx_done_gbe() with a mask indicating which queues have
    been done instead of looping over all of them.
    
    The same UDP test above now happily reaches 987 Mbps / 87.7 kpps.
    Single-stream TCP traffic can now more easily reach line rate. HTTP
    transfers of 1 MB objects over a single connection went from 730 to
    840 Mbps. It is even possible to go significantly higher (>900 Mbps)
    by tweaking tcp_tso_win_divisor.
    
    Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Cc: Gregory CLEMENT <gregory.clement@free-electrons.com>
    Cc: Arnaud Ebalard <arno@natisbad.org>
    Cc: Eric Dumazet <eric.dumazet@gmail.com>
    Tested-by: default avatarArnaud Ebalard <arno@natisbad.org>
    Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    71f6d1b3
mvneta.c 78.1 KB