Skip to content

MSI-X support#2101

Open
cagatay-y wants to merge 1 commit intohermit-os:mainfrom
cagatay-y:cloud-hypervisor
Open

MSI-X support#2101
cagatay-y wants to merge 1 commit intohermit-os:mainfrom
cagatay-y:cloud-hypervisor

Conversation

@cagatay-y
Copy link
Contributor

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.

@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: 938d062 Previous: ff18234 Performance Ratio
startup_benchmark Build Time 99.15 s 97.61 s 1.02
startup_benchmark File Size 0.86 MB 0.86 MB 1.00
Startup Time - 1 core 0.97 s (±0.04 s) 0.93 s (±0.03 s) 1.04
Startup Time - 2 cores 0.98 s (±0.02 s) 0.95 s (±0.03 s) 1.03
Startup Time - 4 cores 0.98 s (±0.04 s) 0.94 s (±0.03 s) 1.04
multithreaded_benchmark Build Time 103.38 s 99.88 s 1.04
multithreaded_benchmark File Size 0.96 MB 0.96 MB 1.00
Multithreaded Pi Efficiency - 2 Threads 87.55 % (±8.04 %) 88.00 % (±9.25 %) 0.99
Multithreaded Pi Efficiency - 4 Threads 43.53 % (±3.93 %) 43.12 % (±4.33 %) 1.01
Multithreaded Pi Efficiency - 8 Threads 25.02 % (±1.82 %) 24.87 % (±2.17 %) 1.01
micro_benchmarks Build Time 112.23 s 95.29 s 1.18
micro_benchmarks File Size 0.97 MB 0.97 MB 1.00
Scheduling time - 1 thread 71.60 ticks (±4.69 ticks) 66.64 ticks (±3.71 ticks) 1.07
Scheduling time - 2 threads 39.12 ticks (±5.06 ticks) 38.45 ticks (±5.98 ticks) 1.02
Micro - Time for syscall (getpid) 2.93 ticks (±0.29 ticks) 3.17 ticks (±0.47 ticks) 0.92
Memcpy speed - (built_in) block size 4096 62220.01 MByte/s (±44492.73 MByte/s) 66568.39 MByte/s (±47388.78 MByte/s) 0.93
Memcpy speed - (built_in) block size 1048576 29893.58 MByte/s (±24741.77 MByte/s) 29555.04 MByte/s (±24278.48 MByte/s) 1.01
Memcpy speed - (built_in) block size 16777216 25704.72 MByte/s (±21625.70 MByte/s) 28751.44 MByte/s (±23938.19 MByte/s) 0.89
Memset speed - (built_in) block size 4096 62363.88 MByte/s (±44585.36 MByte/s) 66780.03 MByte/s (±47520.66 MByte/s) 0.93
Memset speed - (built_in) block size 1048576 30697.52 MByte/s (±25205.32 MByte/s) 30326.51 MByte/s (±24715.31 MByte/s) 1.01
Memset speed - (built_in) block size 16777216 26486.35 MByte/s (±22117.96 MByte/s) 29524.28 MByte/s (±24375.39 MByte/s) 0.90
Memcpy speed - (rust) block size 4096 58148.66 MByte/s (±42771.28 MByte/s) 63679.07 MByte/s (±46857.40 MByte/s) 0.91
Memcpy speed - (rust) block size 1048576 29836.67 MByte/s (±24755.69 MByte/s) 29550.94 MByte/s (±24294.01 MByte/s) 1.01
Memcpy speed - (rust) block size 16777216 24288.25 MByte/s (±20508.25 MByte/s) 28708.33 MByte/s (±23916.49 MByte/s) 0.85
Memset speed - (rust) block size 4096 59449.21 MByte/s (±43690.98 MByte/s) 64665.18 MByte/s (±47525.69 MByte/s) 0.92
Memset speed - (rust) block size 1048576 30608.74 MByte/s (±25197.75 MByte/s) 30306.68 MByte/s (±24722.80 MByte/s) 1.01
Memset speed - (rust) block size 16777216 25002.99 MByte/s (±20957.96 MByte/s) 29488.78 MByte/s (±24360.76 MByte/s) 0.85
alloc_benchmarks Build Time 105.06 s 92.78 s 1.13
alloc_benchmarks File Size 0.94 MB 0.94 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 9940.86 Ticks (±134.93 Ticks) 9546.98 Ticks (±130.84 Ticks) 1.04
Allocations - Average Allocation time (no fail) 9940.86 Ticks (±134.93 Ticks) 9546.98 Ticks (±130.84 Ticks) 1.04
Allocations - Average Deallocation time 925.79 Ticks (±445.38 Ticks) 1180.86 Ticks (±623.01 Ticks) 0.78
mutex_benchmark Build Time 104.92 s 98.39 s 1.07
mutex_benchmark File Size 0.97 MB 0.97 MB 1.00
Mutex Stress Test Average Time per Iteration - 1 Threads 12.86 ns (±0.60 ns) 12.90 ns (±0.54 ns) 1.00
Mutex Stress Test Average Time per Iteration - 2 Threads 16.24 ns (±1.07 ns) 13.42 ns (±0.72 ns) 1.21

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