feat(getsockopt): support SO_SNDBUF and SO_RCVBUF and more for iperf#2422
Conversation
There was a problem hiding this comment.
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
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. |
Co-authored-by: Martin Kröning <martin.kroening@eonerc.rwth-aachen.de>
Co-authored-by: Martin Kröning <martin.kroening@eonerc.rwth-aachen.de>
mkroening
left a comment
There was a problem hiding this comment.
Thanks, this is great!
I split up the commits a bit and refactored some tiny things. I'll merge this tomorrow. :)
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.
SO_SNDBUF and SO_RCVBUF and more for iperf
No description provided.