Skip to content

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

Draft
stlankes wants to merge 2 commits into
mainfrom
ixgbe
Draft

feat(ixgbe): add network driver for the Intel X550#2612
stlankes wants to merge 2 commits 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: 3163e48 Previous: 2e23902 Performance Ratio
startup_benchmark Build Time 94.82 s 80.34 s 1.18
startup_benchmark File Size 0.79 MB 0.80 MB 0.99
Startup Time - 1 core 0.71 s (±0.02 s) 0.75 s (±0.02 s) 0.96
Startup Time - 2 cores 0.75 s (±0.02 s) 0.74 s (±0.02 s) 1.01
Startup Time - 4 cores 0.74 s (±0.02 s) 0.74 s (±0.02 s) 1.00
multithreaded_benchmark Build Time 95.02 s 82.11 s 1.16
multithreaded_benchmark File Size 0.84 MB 0.86 MB 0.98
Multithreaded Pi Efficiency - 2 Threads 67.74 % (±6.10 %) 85.89 % (±6.61 %) 0.79
Multithreaded Pi Efficiency - 4 Threads 41.00 % (±2.07 %) 43.43 % (±2.56 %) 0.94
Multithreaded Pi Efficiency - 8 Threads 19.96 % (±1.48 %) 25.76 % (±1.53 %) 0.77
micro_benchmarks Build Time 231.97 s 80.40 s 2.89
micro_benchmarks File Size 0.84 MB 0.86 MB 0.98
Scheduling time - 1 thread 147.70 ticks (±33.80 ticks) 62.65 ticks (±4.06 ticks) 2.36
Scheduling time - 2 threads 86.12 ticks (±20.49 ticks) 34.08 ticks (±4.10 ticks) 2.53
Micro - Time for syscall (getpid) 10.36 ticks (±4.18 ticks) 3.45 ticks (±0.58 ticks) 3.00
Memcpy speed - (built_in) block size 4096 55382.91 MByte/s (±39839.19 MByte/s) 82448.38 MByte/s (±56997.13 MByte/s) 0.67
Memcpy speed - (built_in) block size 1048576 14028.69 MByte/s (±11664.20 MByte/s) 30585.98 MByte/s (±24707.84 MByte/s) 0.46
Memcpy speed - (built_in) block size 16777216 10401.66 MByte/s (±8764.47 MByte/s) 26340.06 MByte/s (±21720.96 MByte/s) 0.39
Memset speed - (built_in) block size 4096 55803.63 MByte/s (±40123.31 MByte/s) 82292.76 MByte/s (±56891.50 MByte/s) 0.68
Memset speed - (built_in) block size 1048576 14216.05 MByte/s (±11744.59 MByte/s) 31323.85 MByte/s (±25145.86 MByte/s) 0.45
Memset speed - (built_in) block size 16777216 10651.46 MByte/s (±8903.07 MByte/s) 27104.68 MByte/s (±22209.94 MByte/s) 0.39
Memcpy speed - (rust) block size 4096 55038.91 MByte/s (±38866.70 MByte/s) 74097.96 MByte/s (±51811.44 MByte/s) 0.74
Memcpy speed - (rust) block size 1048576 14692.32 MByte/s (±12387.55 MByte/s) 30361.60 MByte/s (±24602.37 MByte/s) 0.48
Memcpy speed - (rust) block size 16777216 10393.89 MByte/s (±8714.57 MByte/s) 27625.34 MByte/s (±22806.88 MByte/s) 0.38
Memset speed - (rust) block size 4096 55498.34 MByte/s (±39169.95 MByte/s) 74373.47 MByte/s (±51976.48 MByte/s) 0.75
Memset speed - (rust) block size 1048576 15030.74 MByte/s (±12534.80 MByte/s) 31110.89 MByte/s (±25033.24 MByte/s) 0.48
Memset speed - (rust) block size 16777216 10710.95 MByte/s (±8913.73 MByte/s) 28386.93 MByte/s (±23265.03 MByte/s) 0.38
alloc_benchmarks Build Time 211.98 s 74.76 s 2.84
alloc_benchmarks File Size 0.86 MB 0.87 MB 0.99
Allocations - Allocation success 91.38 % 91.31 % 1.00
Allocations - Deallocation success 100.00 % 100.00 % 1
Allocations - Pre-fail Allocations 61.60 % 61.44 % 1.00
Allocations - Average Allocation time 24563.51 Ticks (±1739.39 Ticks) 5860.58 Ticks (±98.43 Ticks) 4.19
Allocations - Average Allocation time (no fail) 25691.13 Ticks (±2363.59 Ticks) 6554.81 Ticks (±92.86 Ticks) 3.92
Allocations - Average Deallocation time 8103.32 Ticks (±2022.64 Ticks) 1805.01 Ticks (±250.35 Ticks) 4.49
mutex_benchmark Build Time 213.52 s 79.82 s 2.68
mutex_benchmark File Size 0.84 MB 0.86 MB 0.98
Mutex Stress Test Average Time per Iteration - 1 Threads 36.34 ns (±8.84 ns) 12.10 ns (±0.41 ns) 3.00
Mutex Stress Test Average Time per Iteration - 2 Threads 31.62 ns (±8.59 ns) 40.26 ns (±1.68 ns) 0.79

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

@mkroening

Copy link
Copy Markdown
Member

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

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.
Files send FUSE_FSYNC with the handle they already hold. Directory
handles keep no handle, so fsync opens and releases one around
FUSE_FSYNCDIR, the way getdents opens one for reading.

A host that does not implement the operation answers ENOSYS, which by
FUSE convention means there was nothing to do; other errors now map to
the reported errno instead of a blanket EIO.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants