Skip to content

feat(ixgbe): add network driver for the Intel X550 - #2612

Draft
stlankes wants to merge 1 commit into
mainfrom
ixgbe
Draft

feat(ixgbe): add network driver for the Intel X550#2612
stlankes wants to merge 1 commit into
mainfrom
ixgbe

Conversation

@stlankes

@stlankes stlankes commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

The initialization sequence follows the ixy.rs user space driver and the X550 datasheet. The driver operates a single receive and transmit queue.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

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: d07521f Previous: 2e23902 Performance Ratio
startup_benchmark Build Time 225.51 s 80.34 s 2.81
startup_benchmark File Size 0.79 MB 0.80 MB 0.99
Startup Time - 1 core 2.26 s (±0.22 s) 0.75 s (±0.02 s) 3.02
Startup Time - 2 cores 2.33 s (±0.23 s) 0.74 s (±0.02 s) 3.16
Startup Time - 4 cores 2.30 s (±0.29 s) 0.74 s (±0.02 s) 3.10
multithreaded_benchmark Build Time 217.79 s 82.11 s 2.65
multithreaded_benchmark File Size 0.88 MB 0.86 MB 1.03
Multithreaded Pi Efficiency - 2 Threads 82.50 % (±11.77 %) 85.89 % (±6.61 %) 0.96
Multithreaded Pi Efficiency - 4 Threads 54.80 % (±6.97 %) 43.43 % (±2.56 %) 1.26
Multithreaded Pi Efficiency - 8 Threads 33.53 % (±4.12 %) 25.76 % (±1.53 %) 1.30
micro_benchmarks Build Time 200.58 s 80.40 s 2.49
micro_benchmarks File Size 0.89 MB 0.86 MB 1.03
Scheduling time - 1 thread 181.45 ticks (±37.60 ticks) 62.65 ticks (±4.06 ticks) 2.90
Scheduling time - 2 threads 99.92 ticks (±19.21 ticks) 34.08 ticks (±4.10 ticks) 2.93
Micro - Time for syscall (getpid) 10.82 ticks (±4.29 ticks) 3.45 ticks (±0.58 ticks) 3.14
Memcpy speed - (built_in) block size 4096 57192.45 MByte/s (±40091.19 MByte/s) 82448.38 MByte/s (±56997.13 MByte/s) 0.69
Memcpy speed - (built_in) block size 1048576 14594.30 MByte/s (±12200.31 MByte/s) 30585.98 MByte/s (±24707.84 MByte/s) 0.48
Memcpy speed - (built_in) block size 16777216 13971.88 MByte/s (±11734.10 MByte/s) 26340.06 MByte/s (±21720.96 MByte/s) 0.53
Memset speed - (built_in) block size 4096 57641.23 MByte/s (±40426.37 MByte/s) 82292.76 MByte/s (±56891.50 MByte/s) 0.70
Memset speed - (built_in) block size 1048576 15016.03 MByte/s (±12464.37 MByte/s) 31323.85 MByte/s (±25145.86 MByte/s) 0.48
Memset speed - (built_in) block size 16777216 14349.45 MByte/s (±11954.28 MByte/s) 27104.68 MByte/s (±22209.94 MByte/s) 0.53
Memcpy speed - (rust) block size 4096 51098.91 MByte/s (±36539.20 MByte/s) 74097.96 MByte/s (±51811.44 MByte/s) 0.69
Memcpy speed - (rust) block size 1048576 16244.36 MByte/s (±14256.17 MByte/s) 30361.60 MByte/s (±24602.37 MByte/s) 0.54
Memcpy speed - (rust) block size 16777216 13800.30 MByte/s (±11441.62 MByte/s) 27625.34 MByte/s (±22806.88 MByte/s) 0.50
Memset speed - (rust) block size 4096 51781.43 MByte/s (±37065.38 MByte/s) 74373.47 MByte/s (±51976.48 MByte/s) 0.70
Memset speed - (rust) block size 1048576 16646.68 MByte/s (±14477.10 MByte/s) 31110.89 MByte/s (±25033.24 MByte/s) 0.54
Memset speed - (rust) block size 16777216 14172.52 MByte/s (±11658.39 MByte/s) 28386.93 MByte/s (±23265.03 MByte/s) 0.50
alloc_benchmarks Build Time 197.86 s 74.76 s 2.65
alloc_benchmarks File Size 0.87 MB 0.87 MB 0.99
Allocations - Allocation success 91.35 % 91.31 % 1.00
Allocations - Deallocation success 100.00 % 100.00 % 1
Allocations - Pre-fail Allocations 61.55 % 61.44 % 1.00
Allocations - Average Allocation time 16076.04 Ticks (±802.87 Ticks) 5860.58 Ticks (±98.43 Ticks) 2.74
Allocations - Average Allocation time (no fail) 16997.56 Ticks (±982.29 Ticks) 6554.81 Ticks (±92.86 Ticks) 2.59
Allocations - Average Deallocation time 3614.00 Ticks (±994.72 Ticks) 1805.01 Ticks (±250.35 Ticks) 2.00
mutex_benchmark Build Time 198.31 s 79.82 s 2.48
mutex_benchmark File Size 0.89 MB 0.86 MB 1.03
Mutex Stress Test Average Time per Iteration - 1 Threads 32.54 ns (±6.39 ns) 12.10 ns (±0.41 ns) 2.69
Mutex Stress Test Average Time per Iteration - 2 Threads 29.90 ns (±6.52 ns) 40.26 ns (±1.68 ns) 0.74

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

The initialization sequence follows the ixy.rs user space driver and the
X550 datasheet. The driver operates a single receive and transmit queue.

It prefers MSI-X over the legacy interrupt, because a hypervisor is not
obliged to offer one for a passed-through device and QEMU in fact does
not, which leaves MSI-X as the only way to receive interrupts at all.
Should neither be available, the device still makes progress when the
kernel is built with the idle-poll feature. This makes the msix module
available outside of virtio.
@mkroening

Copy link
Copy Markdown
Member

I have rebased, resolved conflicts, and squashed. I will do a proper review in the coming days. :)

@stlankes
stlankes marked this pull request as draft August 13, 2026 19:26
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