Skip to content

Conversation

@cagatay-y
Copy link
Contributor

@cagatay-y cagatay-y commented Dec 1, 2025

cloud-hypervisor only supports MSI-X interrupts for PCI devices, so support for MSI-X is needed to support running on it. Additionally, MSI-X can allow us to set separate interrupt handlers for the configuration change interrupts and queue updates (even per-queue handlers once we have multiple queues) in the future.

The implementation does not work on QEMU with the TAP network device (tested with cargo xtask ci rs --arch x86_64 --profile dev --package httpd --features ci,hermit/virtio-net qemu --accel --sudo --devices virtio-net-pci --tap) and possibly other platforms as well. It works with QEMU user network device in addition to cloud-hypervisor.

@mkroening mkroening self-assigned this Dec 1, 2025
Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark Results

Details
Benchmark Current: 1ba6965 Previous: 5c2373f Performance Ratio
startup_benchmark Build Time 98.38 s 103.05 s 0.95
startup_benchmark File Size 0.82 MB 0.82 MB 1.00
Startup Time - 1 core 0.96 s (±0.04 s) 0.96 s (±0.04 s) 1.00
Startup Time - 2 cores 0.96 s (±0.03 s) 0.98 s (±0.03 s) 0.98
Startup Time - 4 cores 0.95 s (±0.03 s) 0.97 s (±0.03 s) 0.98
multithreaded_benchmark Build Time 102.33 s 104.21 s 0.98
multithreaded_benchmark File Size 0.96 MB 0.96 MB 1.00
Multithreaded Pi Efficiency - 2 Threads 90.90 % (±8.14 %) 91.81 % (±7.46 %) 0.99
Multithreaded Pi Efficiency - 4 Threads 44.32 % (±4.10 %) 45.70 % (±2.92 %) 0.97
Multithreaded Pi Efficiency - 8 Threads 25.58 % (±2.03 %) 26.46 % (±2.12 %) 0.97
micro_benchmarks Build Time 127.28 s 114.94 s 1.11
micro_benchmarks File Size 0.97 MB 0.97 MB 1.00
Scheduling time - 1 thread 69.16 ticks (±3.57 ticks) 68.93 ticks (±2.98 ticks) 1.00
Scheduling time - 2 threads 37.49 ticks (±3.65 ticks) 40.06 ticks (±5.98 ticks) 0.94
Micro - Time for syscall (getpid) 3.69 ticks (±0.30 ticks) 3.73 ticks (±0.28 ticks) 0.99
Memcpy speed - (built_in) block size 4096 64825.76 MByte/s (±46480.44 MByte/s) 66994.48 MByte/s (±47719.76 MByte/s) 0.97
Memcpy speed - (built_in) block size 1048576 29795.84 MByte/s (±24791.54 MByte/s) 29385.58 MByte/s (±24481.39 MByte/s) 1.01
Memcpy speed - (built_in) block size 16777216 25036.98 MByte/s (±21099.43 MByte/s) 25064.43 MByte/s (±21125.13 MByte/s) 1.00
Memset speed - (built_in) block size 4096 65268.35 MByte/s (±46782.89 MByte/s) 67685.76 MByte/s (±48231.86 MByte/s) 0.96
Memset speed - (built_in) block size 1048576 30566.33 MByte/s (±25223.82 MByte/s) 30198.29 MByte/s (±24956.06 MByte/s) 1.01
Memset speed - (built_in) block size 16777216 25808.20 MByte/s (±21593.56 MByte/s) 25803.06 MByte/s (±21583.89 MByte/s) 1.00
Memcpy speed - (rust) block size 4096 58873.79 MByte/s (±43563.69 MByte/s) 55897.99 MByte/s (±41026.54 MByte/s) 1.05
Memcpy speed - (rust) block size 1048576 29869.12 MByte/s (±24837.65 MByte/s) 29938.47 MByte/s (±24931.05 MByte/s) 1.00
Memcpy speed - (rust) block size 16777216 24999.18 MByte/s (±20985.82 MByte/s) 23502.66 MByte/s (±19727.50 MByte/s) 1.06
Memset speed - (rust) block size 4096 59704.56 MByte/s (±44080.17 MByte/s) 57038.42 MByte/s (±41882.25 MByte/s) 1.05
Memset speed - (rust) block size 1048576 30625.77 MByte/s (±25255.06 MByte/s) 30755.70 MByte/s (±25383.86 MByte/s) 1.00
Memset speed - (rust) block size 16777216 25756.72 MByte/s (±21467.52 MByte/s) 24236.51 MByte/s (±20209.31 MByte/s) 1.06
alloc_benchmarks Build Time 104.30 s 104.50 s 1.00
alloc_benchmarks File Size 0.89 MB 0.89 MB 1.00
Allocations - Allocation success 100.00 % 100.00 % 1
Allocations - Deallocation success 100.00 % 100.00 % 1
Allocations - Pre-fail Allocations 100.00 % 100.00 % 1
Allocations - Average Allocation time 6662.04 Ticks (±479.92 Ticks) 9529.16 Ticks (±370.84 Ticks) 0.70
Allocations - Average Allocation time (no fail) 6662.04 Ticks (±479.92 Ticks) 9529.16 Ticks (±370.84 Ticks) 0.70
Allocations - Average Deallocation time 1199.75 Ticks (±309.54 Ticks) 1304.79 Ticks (±577.98 Ticks) 0.92
mutex_benchmark Build Time 104.52 s 104.63 s 1.00
mutex_benchmark File Size 0.97 MB 0.97 MB 1.00
Mutex Stress Test Average Time per Iteration - 1 Threads 12.74 ns (±0.63 ns) 13.02 ns (±0.68 ns) 0.98
Mutex Stress Test Average Time per Iteration - 2 Threads 15.46 ns (±0.75 ns) 15.32 ns (±0.84 ns) 1.01

This comment was automatically generated by workflow using github-action-benchmark.

@cagatay-y cagatay-y force-pushed the cloud-hypervisor branch 2 times, most recently from 1bcd51c to 2f3ab43 Compare January 28, 2026 17:15
@cagatay-y cagatay-y closed this Jan 28, 2026
@cagatay-y cagatay-y reopened this Jan 28, 2026
@cagatay-y cagatay-y force-pushed the cloud-hypervisor branch 5 times, most recently from 844587c to d8017b5 Compare January 29, 2026 16:12
@cagatay-y cagatay-y marked this pull request as ready for review January 29, 2026 16:13
@mkroening
Copy link
Member

mkroening commented Feb 4, 2026

pci_types is updated as of #2220.

cloud-hypervisor only supports MSI-X interrupts for PCI devices, so
support for MSI-X is needed to support running on it. Additionally,
MSI-X can allow us to set separate interrupt handlers for the
configuration change interrupts and queue updates (even per-queue
handlers once we have multiple queues) in the future.

MSI-X is not working correctly or at all on all platforms, so it is used
as a fallback.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants