mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-12-24 06:35:20 +00:00
0faa7afac2
Looking up devices on the port I/O bus is time consuming during the boot at there is an O(lg n) tree lookup and the overhead from taking a lock on the bus contents. Avoid this by adding a fast path uses the hardcoded port address and size and directs PCI config requests directly to the device. Command line: target/release/cloud-hypervisor --kernel ~/src/linux/vmlinux --cmdline "root=/dev/vda1 console=ttyS0" --serial tty --console off --disk path=~/workloads/focal-server-cloudimg-amd64-custom-20210609-0.raw --api-socket /tmp/api PIO exit: 17913 PCI fast path: 17871 Percentage on fast path: 99.8% perf before: marvin:~/src/cloud-hypervisor (main *)$ perf report -g | grep resolve 6.20% 6.20% vcpu0 cloud-hypervisor [.] vm_device:🚌:Bus::resolve perf after: marvin:~/src/cloud-hypervisor (2021-09-17-ioapic-fast-path *)$ perf report -g | grep resolve 0.08% 0.08% vcpu0 cloud-hypervisor [.] vm_device:🚌:Bus::resolve The compromise required to implement this fast path is bringing the creation of the PciConfigIo device into the DeviceManager::new() so that it can be used in the VmmOps struct which is created before DeviceManager::create_devices() is called. Signed-off-by: Rob Bradford <robert.bradford@intel.com> |
||
---|---|---|
.. | ||
api | ||
acpi.rs | ||
clone3.rs | ||
config.rs | ||
cpu.rs | ||
device_manager.rs | ||
device_tree.rs | ||
interrupt.rs | ||
lib.rs | ||
memory_manager.rs | ||
migration.rs | ||
seccomp_filters.rs | ||
serial_buffer.rs | ||
serial_manager.rs | ||
sigwinch_listener.rs | ||
vm.rs |