fix iperf related functions#2422
Conversation
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.
There was a problem hiding this comment.
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
left a comment
There was a problem hiding this comment.
This is great, thanks! I tested it, and it works. I will take a look at the code later.
Two issues I noticed:
-
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.
-
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.
|
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 I need to check what the second issue is about. |
No description provided.