Skip to content

fix iperf related functions#2422

Open
cagatay-y wants to merge 5 commits into
hermit-os:mainfrom
cagatay-y:iperf-fix
Open

fix iperf related functions#2422
cagatay-y wants to merge 5 commits into
hermit-os:mainfrom
cagatay-y:iperf-fix

Conversation

@cagatay-y
Copy link
Copy Markdown
Contributor

No description provided.

cagatay-y added 5 commits May 8, 2026 14:42
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.
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: 3e27c44 Previous: 07d3301 Performance Ratio
startup_benchmark Build Time 89.71 s 89.18 s 1.01
startup_benchmark File Size 0.79 MB 0.78 MB 1.01
Startup Time - 1 core 0.82 s (±0.03 s) 0.80 s (±0.04 s) 1.03
Startup Time - 2 cores 0.81 s (±0.03 s) 0.81 s (±0.03 s) 1.00
Startup Time - 4 cores 0.83 s (±0.02 s) 0.83 s (±0.03 s) 0.99
multithreaded_benchmark Build Time 88.18 s 92.43 s 0.95
multithreaded_benchmark File Size 0.89 MB 0.89 MB 1.00
Multithreaded Pi Efficiency - 2 Threads 92.73 % (±6.16 %) 90.75 % (±6.76 %) 1.02
Multithreaded Pi Efficiency - 4 Threads 45.58 % (±2.61 %) 44.75 % (±3.33 %) 1.02
Multithreaded Pi Efficiency - 8 Threads 26.44 % (±1.57 %) 25.74 % (±1.81 %) 1.03
micro_benchmarks Build Time 93.40 s 99.63 s 0.94
micro_benchmarks File Size 0.89 MB 0.90 MB 1.00
Scheduling time - 1 thread 69.06 ticks (±3.94 ticks) 71.75 ticks (±4.55 ticks) 0.96
Scheduling time - 2 threads 37.82 ticks (±3.61 ticks) 39.08 ticks (±4.44 ticks) 0.97
Micro - Time for syscall (getpid) 3.73 ticks (±0.36 ticks) 3.13 ticks (±0.27 ticks) 1.19
Memcpy speed - (built_in) block size 4096 75100.33 MByte/s (±51919.02 MByte/s) 75616.90 MByte/s (±52577.63 MByte/s) 0.99
Memcpy speed - (built_in) block size 1048576 29892.00 MByte/s (±24496.54 MByte/s) 29990.09 MByte/s (±24687.99 MByte/s) 1.00
Memcpy speed - (built_in) block size 16777216 28092.05 MByte/s (±23202.24 MByte/s) 24067.71 MByte/s (±19970.69 MByte/s) 1.17
Memset speed - (built_in) block size 4096 75458.06 MByte/s (±52194.84 MByte/s) 75500.18 MByte/s (±52500.81 MByte/s) 1.00
Memset speed - (built_in) block size 1048576 30652.13 MByte/s (±24939.50 MByte/s) 30765.36 MByte/s (±25121.72 MByte/s) 1.00
Memset speed - (built_in) block size 16777216 28859.82 MByte/s (±23651.14 MByte/s) 24807.43 MByte/s (±20464.41 MByte/s) 1.16
Memcpy speed - (rust) block size 4096 67831.80 MByte/s (±47579.32 MByte/s) 69070.89 MByte/s (±48290.91 MByte/s) 0.98
Memcpy speed - (rust) block size 1048576 29804.77 MByte/s (±24431.37 MByte/s) 29768.99 MByte/s (±24513.26 MByte/s) 1.00
Memcpy speed - (rust) block size 16777216 27963.76 MByte/s (±23072.22 MByte/s) 24637.88 MByte/s (±20514.70 MByte/s) 1.13
Memset speed - (rust) block size 4096 68746.80 MByte/s (±48204.19 MByte/s) 69563.89 MByte/s (±48684.23 MByte/s) 0.99
Memset speed - (rust) block size 1048576 30608.96 MByte/s (±24894.88 MByte/s) 30549.28 MByte/s (±24960.18 MByte/s) 1.00
Memset speed - (rust) block size 16777216 28727.58 MByte/s (±23523.26 MByte/s) 25362.78 MByte/s (±20979.00 MByte/s) 1.13
alloc_benchmarks Build Time 93.26 s 91.86 s 1.02
alloc_benchmarks File Size 0.87 MB 0.85 MB 1.02
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 7911.85 Ticks (±181.91 Ticks) 8634.49 Ticks (±216.63 Ticks) 0.92
Allocations - Average Allocation time (no fail) 7911.85 Ticks (±181.91 Ticks) 8634.49 Ticks (±216.63 Ticks) 0.92
Allocations - Average Deallocation time 2338.16 Ticks (±1374.41 Ticks) 1135.91 Ticks (±535.66 Ticks) 2.06
mutex_benchmark Build Time 92.44 s 92.02 s 1.00
mutex_benchmark File Size 0.90 MB 0.89 MB 1.00
Mutex Stress Test Average Time per Iteration - 1 Threads 13.14 ns (±0.82 ns) 13.24 ns (±0.84 ns) 0.99
Mutex Stress Test Average Time per Iteration - 2 Threads 16.90 ns (±1.54 ns) 18.04 ns (±3.62 ns) 0.94

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.

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