lguest: implement deferred interrupts in example Launcher
authorRusty Russell <rusty@rustcorp.com.au>
Sat, 13 Jun 2009 04:27:11 +0000 (22:27 -0600)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 12 Jun 2009 12:57:11 +0000 (22:27 +0930)
commit38bc2b8c56a2e212bbd19de7cf9976dcc7bf9953
tree26071dbb540926c329ece0ab4d4425807021b5c8
parent5dac051bc6030963181b69faddd9e0ad04f85fa8
lguest: implement deferred interrupts in example Launcher

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: Rusty Russell <rusty@rustcorp.com.au>
Documentation/lguest/lguest.c