]> git.karo-electronics.de Git - karo-tx-linux.git/commit
KVM: Intelligent device lookup on I/O bus
authorSasha Levin <levinsasha928@gmail.com>
Wed, 27 Jul 2011 13:00:48 +0000 (16:00 +0300)
committerAvi Kivity <avi@redhat.com>
Mon, 29 Aug 2011 13:22:32 +0000 (16:22 +0300)
commit91c15d3d35432d06068bdb1ecbb6ecd95e1ad48b
tree1dc3c0b4ebaa7b3605473daad84c45074c010fb1
parent5105caf2cd666e09a243f210c02c5409902d895f
KVM: Intelligent device lookup on I/O bus

Currently the method of dealing with an IO operation on a bus (PIO/MMIO)
is to call the read or write callback for each device registered
on the bus until we find a device which handles it.

Since the number of devices on a bus can be significant due to ioeventfds
and coalesced MMIO zones, this leads to a lot of overhead on each IO
operation.

Instead of registering devices, we now register ranges which points to
a device. Lookup is done using an efficient bsearch instead of a linear
search.

Performance test was conducted by comparing exit count per second with
200 ioeventfds created on one byte and the guest is trying to access a
different byte continuously (triggering usermode exits).
Before the patch the guest has achieved 259k exits per second, after the
patch the guest does 274k exits per second.

Cc: Avi Kivity <avi@redhat.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/kvm/i8254.c
arch/x86/kvm/i8259.c
arch/x86/kvm/irq.h
arch/x86/kvm/x86.c
include/linux/kvm_host.h
virt/kvm/coalesced_mmio.c
virt/kvm/eventfd.c
virt/kvm/ioapic.c
virt/kvm/kvm_main.c