• Rusty Russell's avatar
    lguest: try to batch interrupts on network receive · 4a8962e2
    Rusty Russell authored
    Rather than triggering an interrupt every time, we only trigger an
    interrupt when there are no more incoming packets (or the recv queue
    is full).
    
    However, the overhead of doing the select to figure this out is
    measurable: 1M pings goes from 98 to 104 seconds, and 1G Guest->Host
    TCP goes from 3.69 to 3.94 seconds.  It's close to the noise though.
    
    I tested various timeouts, including reducing it as the number of
    pending packets increased, timing a 1 gigabyte TCP send from Guest ->
    Host and Host -> Guest (GSO disabled, to increase packet rate).
    
    // time tcpblast -o -s 65536 -c 16k 192.168.2.1:9999 > /dev/null
    
    Timeout		Guest->Host	Pkts/irq	Host->Guest	Pkts/irq
    Before		11.3s		1.0		6.3s		1.0
    0		11.7s		1.0		6.6s		23.5
    1		17.1s		8.8		8.6s		26.0
    1/pending	13.4s		1.9		6.6s		23.8
    2/pending	13.6s		2.8		6.6s		24.1
    5/pending	14.1s		5.0		6.6s		24.4
    Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    4a8962e2
lguest.c 53.3 KB