lguest: avoid sending interrupts to Guest when no activity occurs.
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:12 +0000 (21:57 +0930)
commit95c517c09bad31a03e22f2fdb5f0aa26a490a92d
treeaa34fdb7ca3a6b7575a2ac7639c157995d334bc3
parent38bc2b8c56a2e212bbd19de7cf9976dcc7bf9953
lguest: avoid sending interrupts to Guest when no activity occurs.

If we track how many buffers we've used, we can tell whether we really
need to interrupt the Guest.  This happens as a side effect of
spurious notifications.

Spurious notifications happen because it can take a while before the
Host thread wakes up and sets the VRING_USED_F_NO_NOTIFY flag, and
meanwhile the Guest can more notifications.

A real fix would be to use wake counts, rather than a suppression
flag, but the practical difference is generally in the noise: the
interrupt is usually coalesced into a pending one anyway so we just
save a system call which isn't clearly measurable.

Secs Spurious IRQS
1G TCP Guest->Host: 3.93 58
1M normal pings: 100 72
1M 1k pings (-l 120): 57 492904

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Documentation/lguest/lguest.c