• Rusty Russell's avatar
    lguest: implement deferred interrupts in example Launcher · 38bc2b8c
    Rusty Russell authored
    Rather than sending an interrupt on every buffer, we only send an interrupt
    when we're about to wait for the Guest to send us a new one.  The console
    input and network input still send interrupts manually, but the block device,
    network and console output queues can simply rely on this logic to send
    interrupts to the Guest at the right time.
    
    The patch is cluttered by moving trigger_irq() higher in the code.
    
    In practice, two factors make this optimization less interesting:
    (1) we often only get one input at a time, even for networking,
    (2) triggering an interrupt rapidly tends to get coalesced anyway.
    
    Before:				Secs	RxIRQS	TxIRQs
     1G TCP Guest->Host:		3.72	32784	32771
     1M normal pings:		99	1000004	995541
     100,000 1k pings (-l 120):	5	49510	49058
    
    After:
     1G TCP Guest->Host:		3.69	32809	32769
     1M normal pings:		99	1000004	996196
     100,000 1k pings (-l 120):	5	52435	52361
    
    (Note the interrupt count on 100k pings goes *up*: see next patch).
    Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    38bc2b8c
lguest.c 52.7 KB