Skip to content

Conversation

@udaykiriti
Copy link

I've made some small, improvements to the virtio drivers. :| This commit optimizes queue selection for both MMIO and PCI to skip redundant register writes.

I've made some small, improvements to the virtio drivers. :|
This commit optimizes queue selection for both MMIO and PCI to skip redundant register writes.
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: b72167f Previous: 67c1b2b Performance Ratio
startup_benchmark Build Time 117.82 s 122.88 s 0.96
startup_benchmark File Size 0.87 MB 0.87 MB 1.00
Startup Time - 1 core 0.97 s (±0.03 s) 1.00 s (±0.02 s) 0.96
Startup Time - 2 cores 0.98 s (±0.02 s) 1.00 s (±0.02 s) 0.98
Startup Time - 4 cores 0.99 s (±0.03 s) 0.99 s (±0.03 s) 1.00
multithreaded_benchmark Build Time 120.84 s 123.06 s 0.98
multithreaded_benchmark File Size 0.97 MB 0.97 MB 1.00
Multithreaded Pi Efficiency - 2 Threads 89.07 % (±8.72 %) 88.68 % (±8.46 %) 1.00
Multithreaded Pi Efficiency - 4 Threads 43.76 % (±3.85 %) 44.47 % (±3.36 %) 0.98
Multithreaded Pi Efficiency - 8 Threads 25.66 % (±2.05 %) 25.46 % (±2.13 %) 1.01
micro_benchmarks Build Time 181.76 s 172.67 s 1.05
micro_benchmarks File Size 0.98 MB 0.98 MB 1.00
Scheduling time - 1 thread 73.98 ticks (±4.36 ticks) 75.22 ticks (±3.59 ticks) 0.98
Scheduling time - 2 threads 38.61 ticks (±2.16 ticks) 38.66 ticks (±2.11 ticks) 1.00
Micro - Time for syscall (getpid) 4.67 ticks (±0.25 ticks) 4.73 ticks (±0.33 ticks) 0.99
Memcpy speed - (built_in) block size 4096 56888.48 MByte/s (±40235.13 MByte/s) 57776.95 MByte/s (±40955.91 MByte/s) 0.98
Memcpy speed - (built_in) block size 1048576 28767.23 MByte/s (±24062.43 MByte/s) 29119.47 MByte/s (±24404.01 MByte/s) 0.99
Memcpy speed - (built_in) block size 16777216 25581.13 MByte/s (±21660.23 MByte/s) 24320.25 MByte/s (±20600.90 MByte/s) 1.05
Memset speed - (built_in) block size 4096 57194.58 MByte/s (±40430.99 MByte/s) 57846.57 MByte/s (±40990.95 MByte/s) 0.99
Memset speed - (built_in) block size 1048576 29611.17 MByte/s (±24552.52 MByte/s) 29837.87 MByte/s (±24806.06 MByte/s) 0.99
Memset speed - (built_in) block size 16777216 25908.84 MByte/s (±21774.53 MByte/s) 25074.19 MByte/s (±21076.19 MByte/s) 1.03
Memcpy speed - (rust) block size 4096 53168.09 MByte/s (±39021.55 MByte/s) 51978.32 MByte/s (±37541.67 MByte/s) 1.02
Memcpy speed - (rust) block size 1048576 28723.40 MByte/s (±24155.27 MByte/s) 28975.81 MByte/s (±24306.78 MByte/s) 0.99
Memcpy speed - (rust) block size 16777216 24933.33 MByte/s (±21170.78 MByte/s) 24942.26 MByte/s (±21157.69 MByte/s) 1.00
Memset speed - (rust) block size 4096 53484.69 MByte/s (±39187.19 MByte/s) 52746.25 MByte/s (±38138.36 MByte/s) 1.01
Memset speed - (rust) block size 1048576 29569.57 MByte/s (±24661.14 MByte/s) 29825.10 MByte/s (±24812.07 MByte/s) 0.99
Memset speed - (rust) block size 16777216 25224.88 MByte/s (±21268.11 MByte/s) 25391.70 MByte/s (±21352.68 MByte/s) 0.99
alloc_benchmarks Build Time 163.00 s 155.86 s 1.05
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 9901.86 Ticks (±446.35 Ticks) 8052.09 Ticks (±709.81 Ticks) 1.23
Allocations - Average Allocation time (no fail) 9901.86 Ticks (±446.35 Ticks) 8052.09 Ticks (±709.81 Ticks) 1.23
Allocations - Average Deallocation time 1073.33 Ticks (±558.57 Ticks) 929.37 Ticks (±301.24 Ticks) 1.15
mutex_benchmark Build Time 156.68 s 165.12 s 0.95
mutex_benchmark File Size 0.97 MB 0.97 MB 1.00
Mutex Stress Test Average Time per Iteration - 1 Threads 15.74 ns (±0.91 ns) 15.62 ns (±0.66 ns) 1.01
Mutex Stress Test Average Time per Iteration - 2 Threads 15.30 ns (±0.90 ns) 15.68 ns (±0.95 ns) 0.98

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

@mkroening mkroening self-assigned this Dec 22, 2025
Copy link
Member

@mkroening mkroening left a comment

Choose a reason for hiding this comment

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

This does not work at this level, since only one virtq can be selected at the same time, but self.selected is not set to false when other virtqs are selected.

@mkroening
Copy link
Member

The refactor required to properly support this would be rather big and nontrivial. I am not sure if it would be worth it. Are you okay with closing the PR or what would you prefer? :)

@mkroening mkroening mentioned this pull request Jan 8, 2026
@udaykiriti
Copy link
Author

udaykiriti commented Jan 8, 2026

Close the pr if is not that good:| and let me about remaining commits

@mkroening mkroening closed this Jan 8, 2026
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