Skip to content

feat(getsockopt): support SO_SNDBUF and SO_RCVBUF and more for iperf#2422

Merged
mkroening merged 8 commits into
hermit-os:mainfrom
cagatay-y:iperf-fix
Jun 1, 2026
Merged

feat(getsockopt): support SO_SNDBUF and SO_RCVBUF and more for iperf#2422
mkroening merged 8 commits into
hermit-os:mainfrom
cagatay-y:iperf-fix

Conversation

@cagatay-y
Copy link
Copy Markdown
Contributor

No description provided.

Copy link
Copy Markdown

@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: df4e6ff Previous: 0e06134 Performance Ratio
startup_benchmark Build Time 109.21 s 114.75 s 0.95
startup_benchmark File Size 0.75 MB 0.75 MB 1.00
Startup Time - 1 core 1.02 s (±0.06 s) 1.03 s (±0.05 s) 0.99
Startup Time - 2 cores 1.00 s (±0.05 s) 1.00 s (±0.04 s) 1.01
Startup Time - 4 cores 1.06 s (±0.07 s) 1.05 s (±0.06 s) 1.01
multithreaded_benchmark Build Time 117.17 s 118.19 s 0.99
multithreaded_benchmark File Size 0.87 MB 0.87 MB 1.00
Multithreaded Pi Efficiency - 2 Threads 95.98 % (±3.29 %) 88.13 % (±17.77 %) 1.09
Multithreaded Pi Efficiency - 4 Threads 46.68 % (±1.61 %) 43.83 % (±8.68 %) 1.07
Multithreaded Pi Efficiency - 8 Threads 25.77 % (±1.44 %) 24.19 % (±4.32 %) 1.07
micro_benchmarks Build Time 94.11 s 95.80 s 0.98
micro_benchmarks File Size 0.87 MB 0.87 MB 1.00
Scheduling time - 1 thread 74.43 ticks (±4.43 ticks) 73.66 ticks (±3.11 ticks) 1.01
Scheduling time - 2 threads 41.49 ticks (±3.80 ticks) 42.62 ticks (±4.47 ticks) 0.97
Micro - Time for syscall (getpid) 3.85 ticks (±0.30 ticks) 3.97 ticks (±0.24 ticks) 0.97
Memcpy speed - (built_in) block size 4096 73190.56 MByte/s (±50558.65 MByte/s) 74285.81 MByte/s (±51386.38 MByte/s) 0.99
Memcpy speed - (built_in) block size 1048576 29381.20 MByte/s (±24150.14 MByte/s) 29225.43 MByte/s (±24061.57 MByte/s) 1.01
Memcpy speed - (built_in) block size 16777216 24040.30 MByte/s (±19758.13 MByte/s) 24481.29 MByte/s (±20083.82 MByte/s) 0.98
Memset speed - (built_in) block size 4096 73398.43 MByte/s (±50682.59 MByte/s) 74360.40 MByte/s (±51439.53 MByte/s) 0.99
Memset speed - (built_in) block size 1048576 30162.22 MByte/s (±24586.25 MByte/s) 29962.87 MByte/s (±24486.09 MByte/s) 1.01
Memset speed - (built_in) block size 16777216 24563.30 MByte/s (±20029.89 MByte/s) 25226.63 MByte/s (±20580.18 MByte/s) 0.97
Memcpy speed - (rust) block size 4096 68294.64 MByte/s (±47779.41 MByte/s) 65746.63 MByte/s (±45737.46 MByte/s) 1.04
Memcpy speed - (rust) block size 1048576 29464.29 MByte/s (±24237.10 MByte/s) 29209.13 MByte/s (±23985.94 MByte/s) 1.01
Memcpy speed - (rust) block size 16777216 24167.98 MByte/s (±19911.83 MByte/s) 23697.58 MByte/s (±19489.14 MByte/s) 1.02
Memset speed - (rust) block size 4096 68901.29 MByte/s (±48100.67 MByte/s) 66213.47 MByte/s (±46120.45 MByte/s) 1.04
Memset speed - (rust) block size 1048576 30222.43 MByte/s (±24658.90 MByte/s) 29959.89 MByte/s (±24426.81 MByte/s) 1.01
Memset speed - (rust) block size 16777216 24802.31 MByte/s (±20290.52 MByte/s) 24144.16 MByte/s (±19717.09 MByte/s) 1.03
alloc_benchmarks Build Time 91.69 s 90.67 s 1.01
alloc_benchmarks File Size 0.83 MB 0.83 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 4037.01 Ticks (±52.60 Ticks) 4059.19 Ticks (±54.22 Ticks) 0.99
Allocations - Average Allocation time (no fail) 4037.01 Ticks (±52.60 Ticks) 4059.19 Ticks (±54.22 Ticks) 0.99
Allocations - Average Deallocation time 795.99 Ticks (±85.41 Ticks) 686.32 Ticks (±49.99 Ticks) 1.16
mutex_benchmark Build Time 91.05 s 90.77 s 1.00
mutex_benchmark File Size 0.87 MB 0.87 MB 1.00
Mutex Stress Test Average Time per Iteration - 1 Threads 13.94 ns (±0.68 ns) 13.46 ns (±0.64 ns) 1.04
Mutex Stress Test Average Time per Iteration - 2 Threads 17.18 ns (±1.80 ns) 15.42 ns (±9.10 ns) 1.11

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

@mkroening mkroening self-assigned this May 8, 2026
Copy link
Copy Markdown
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 is great, thanks! I tested it, and it works. I will take a look at the code later.

Two issues I noticed:

  1. When Hermit is the server, it can only accept one client. After the first client is done, the next client cannot establish a connection. This does not show an error message, but might be related to the next issue.

  2. When Hermit is the client, the test does not end cleanly:

    iperf3: error - unable to send control message - port may not be available, the other side may have stopped running, etc.: Function not implemented
    

These issues do not block this PR at all; I just wanted to document this.

@cagatay-y
Copy link
Copy Markdown
Contributor Author

I am not 100% sure if this is the same problem as the one you have with multiple connections on the server, but when I run the server with the --one-off option so that it shuts off after a test is completed, it gets stuck at https://github.com/esnet/iperf/blob/8a94f44cde986106abe8c8bf06d72d327570e34e/src/iperf_server_api.c#L488. I haven't had a chance to investigate further.

I need to check what the second issue is about.

mkroening and others added 5 commits May 31, 2026 20:08
Copy link
Copy Markdown
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.

Thanks, this is great!

I split up the commits a bit and refactored some tiny things. I'll merge this tomorrow. :)

cagatay-y added 3 commits May 31, 2026 21:09
We currently do not support IPv6, so return error to allow the caller to
handle the error.
Excessively large queue sizes can cause us to exhaust memory. Set a
maximum value that is based on the one used by the Linux kernel by
default.
@mkroening mkroening changed the title fix iperf related functions feat(getsockopt): support SO_SNDBUF and SO_RCVBUF and more for iperf Jun 1, 2026
@mkroening mkroening changed the title feat(getsockopt): support SO_SNDBUF and SO_RCVBUF and more for iperf feat(getsockopt): support SO_SNDBUF and SO_RCVBUF and more for iperf Jun 1, 2026
@mkroening mkroening added this pull request to the merge queue Jun 1, 2026
Merged via the queue into hermit-os:main with commit 6577b75 Jun 1, 2026
40 checks passed
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