tohojo / flent

The FLExible Network Tester.
https://flent.org
Other
431 stars 77 forks source link

support (re-)enabling netperf routing of UDP packets #214

Closed jonassmedegaard closed 3 years ago

jonassmedegaard commented 3 years ago

I want to test my internet connection, and wanted to test against a virtual machine at Scaleway - which uses 1:1 NAT (seen from the host itself is a private 10.x.x.x/23 IPv4 address mapped to a public IPv4 address) which apparently require setting an undocumented option -R in netperf.

Please have flent support that custom "re-enable routing which we silently disabled for UDP) netperf option - or support passing custom options if you dislike hardcoding something undocumented.

tohojo commented 3 years ago

Jonas Smedegaard notifications@github.com writes:

I want to test my internet connection, and wanted to test against a virtual machine at Scaleway - which uses 1:1 NAT (seen from the host itself is a private 10.x.x.x/23 IPv4 address mapped to a public IPv4 address) which apparently require setting an undocumented option -R in netperf.

Please have flent support that custom "re-enable routing which we silently disabled for UDP) netperf option - or support passing custom options if you dislike hardcoding something undocumented.

According to the post you linked this is only for UDP_STREAM tests, which we don't have any of in Flent; so why exactly is this needed?

jonassmedegaard commented 3 years ago

Sorry, I was too quick to conclude the exact cause of error messages I saw in the GUI.

When I saw those errors I cancelled the test, expecting no results at all - but trying more patiently to let it run its course I now see that output is generate (so something works) and those error messages are nicely emitted on console too (not only in GUI window), along with more details:

$ flent-gui 
Started Flent 1.3.2 using Python 3.9.1rc1.
Initialised matplotlib v3.3.2 on numpy v1.19.4.
GUI loaded. Running on PyQt v5.15.2.
Starting rrul test. Expected run time: 70 seconds.
WARNING: Program exited non-zero.
Runner class: NetperfDemoRunner
Command: /usr/bin/netperf -P 0 -v 0 -D -0.20 -4 -Y EF,EF -H XXXXX -p 12865 -t UDP_RR -l 70 -F /dev/urandom    -- -e 2  -H XXXXX -k THROUGHPUT,LOCAL_CONG_CONTROL,REMOTE_CONG_CONTROL,TRANSPORT_MSS,LOCAL_TRANSPORT_RETRANS,REMOTE_TRANSPORT_RETRANS,LOCAL_SOCKET_TOS,REMOTE_SOCKET_TOS,DIRECTION,ELAPSED_TIME,PROTOCOL,LOCAL_SEND_SIZE,LOCAL_RECV_SIZE,REMOTE_SEND_SIZE,REMOTE_RECV_SIZE,LOCAL_BYTES_SENT,LOCAL_BYTES_RECVD,REMOTE_BYTES_SENT,REMOTE_BYTES_RECVD  
Return code: 1
Stdout: send_data: data send error: Invalid argument (errno 22)

Stderr: netperf: send_omni: send_data failed: Invalid argument

WARNING: Command produced no valid data.
Runner class: NetperfDemoRunner
Command: /usr/bin/netperf -P 0 -v 0 -D -0.20 -4 -Y EF,EF -H XXXXX -p 12865 -t UDP_RR -l 70 -F /dev/urandom    -- -e 2  -H XXXXX -k THROUGHPUT,LOCAL_CONG_CONTROL,REMOTE_CONG_CONTROL,TRANSPORT_MSS,LOCAL_TRANSPORT_RETRANS,REMOTE_TRANSPORT_RETRANS,LOCAL_SOCKET_TOS,REMOTE_SOCKET_TOS,DIRECTION,ELAPSED_TIME,PROTOCOL,LOCAL_SEND_SIZE,LOCAL_RECV_SIZE,REMOTE_SEND_SIZE,REMOTE_RECV_SIZE,LOCAL_BYTES_SENT,LOCAL_BYTES_RECVD,REMOTE_BYTES_SENT,REMOTE_BYTES_RECVD  
Return code: 1
Stdout: send_data: data send error: Invalid argument (errno 22)

Stderr: netperf: send_omni: send_data failed: Invalid argument

WARNING: Program exited non-zero.
Runner class: NetperfDemoRunner
Command: /usr/bin/netperf -P 0 -v 0 -D -0.20 -4 -Y CS1,CS1 -H XXXXX -p 12865 -t UDP_RR -l 70 -F /dev/urandom    -- -e 2  -H XXXXX -k THROUGHPUT,LOCAL_CONG_CONTROL,REMOTE_CONG_CONTROL,TRANSPORT_MSS,LOCAL_TRANSPORT_RETRANS,REMOTE_TRANSPORT_RETRANS,LOCAL_SOCKET_TOS,REMOTE_SOCKET_TOS,DIRECTION,ELAPSED_TIME,PROTOCOL,LOCAL_SEND_SIZE,LOCAL_RECV_SIZE,REMOTE_SEND_SIZE,REMOTE_RECV_SIZE,LOCAL_BYTES_SENT,LOCAL_BYTES_RECVD,REMOTE_BYTES_SENT,REMOTE_BYTES_RECVD  
Return code: 1
Stdout: send_data: data send error: Invalid argument (errno 22)

Stderr: netperf: send_omni: send_data failed: Invalid argument

WARNING: Command produced no valid data.
Runner class: NetperfDemoRunner
Command: /usr/bin/netperf -P 0 -v 0 -D -0.20 -4 -Y CS1,CS1 -H XXXXX -p 12865 -t UDP_RR -l 70 -F /dev/urandom    -- -e 2  -H XXXXX -k THROUGHPUT,LOCAL_CONG_CONTROL,REMOTE_CONG_CONTROL,TRANSPORT_MSS,LOCAL_TRANSPORT_RETRANS,REMOTE_TRANSPORT_RETRANS,LOCAL_SOCKET_TOS,REMOTE_SOCKET_TOS,DIRECTION,ELAPSED_TIME,PROTOCOL,LOCAL_SEND_SIZE,LOCAL_RECV_SIZE,REMOTE_SEND_SIZE,REMOTE_RECV_SIZE,LOCAL_BYTES_SENT,LOCAL_BYTES_RECVD,REMOTE_BYTES_SENT,REMOTE_BYTES_RECVD  
Return code: 1
Stdout: send_data: data send error: Invalid argument (errno 22)

Stderr: netperf: send_omni: send_data failed: Invalid argument

WARNING: Program exited non-zero.
Runner class: NetperfDemoRunner
Command: /usr/bin/netperf -P 0 -v 0 -D -0.20 -4  -H XXXXX -p 12865 -t UDP_RR -l 70 -F /dev/urandom    -- -e 2  -H XXXXX -k THROUGHPUT,LOCAL_CONG_CONTROL,REMOTE_CONG_CONTROL,TRANSPORT_MSS,LOCAL_TRANSPORT_RETRANS,REMOTE_TRANSPORT_RETRANS,LOCAL_SOCKET_TOS,REMOTE_SOCKET_TOS,DIRECTION,ELAPSED_TIME,PROTOCOL,LOCAL_SEND_SIZE,LOCAL_RECV_SIZE,REMOTE_SEND_SIZE,REMOTE_RECV_SIZE,LOCAL_BYTES_SENT,LOCAL_BYTES_RECVD,REMOTE_BYTES_SENT,REMOTE_BYTES_RECVD  
Return code: 1
Stdout: send_data: data send error: Invalid argument (errno 22)

Stderr: netperf: send_omni: send_data failed: Invalid argument

WARNING: Command produced no valid data.
Runner class: NetperfDemoRunner
Command: /usr/bin/netperf -P 0 -v 0 -D -0.20 -4  -H XXXXX -p 12865 -t UDP_RR -l 70 -F /dev/urandom    -- -e 2  -H XXXXX -k THROUGHPUT,LOCAL_CONG_CONTROL,REMOTE_CONG_CONTROL,TRANSPORT_MSS,LOCAL_TRANSPORT_RETRANS,REMOTE_TRANSPORT_RETRANS,LOCAL_SOCKET_TOS,REMOTE_SOCKET_TOS,DIRECTION,ELAPSED_TIME,PROTOCOL,LOCAL_SEND_SIZE,LOCAL_RECV_SIZE,REMOTE_SEND_SIZE,REMOTE_RECV_SIZE,LOCAL_BYTES_SENT,LOCAL_BYTES_RECVD,REMOTE_BYTES_SENT,REMOTE_BYTES_RECVD  
Return code: 1
Stdout: send_data: data send error: Invalid argument (errno 22)

Stderr: netperf: send_omni: send_data failed: Invalid argument

Summary of rrul test run from 2020-12-04 20:04:49.807272

                             avg       median          # data pts
 Ping (ms) ICMP   :        40.35        41.60 ms              350
 Ping (ms) UDP BE : No data.
 Ping (ms) UDP BK : No data.
 Ping (ms) UDP EF : No data.
 Ping (ms) avg    :        40.35          N/A ms              350
 TCP download BE  :         0.82         0.77 Mbits/s         350
 TCP download BK  :         0.80         0.75 Mbits/s         350
 TCP download CS5 :         0.79         0.75 Mbits/s         350
 TCP download EF  :         0.67         0.63 Mbits/s         350
 TCP download avg :         0.77          N/A Mbits/s         350
 TCP download sum :         3.08          N/A Mbits/s         350
 TCP totals       :        94.35          N/A Mbits/s         350
 TCP upload BE    :        23.03        23.02 Mbits/s         350
 TCP upload BK    :        22.70        22.67 Mbits/s         350
 TCP upload CS5   :        22.87        22.91 Mbits/s         350
 TCP upload EF    :        22.67        23.21 Mbits/s         350
 TCP upload avg   :        22.82          N/A Mbits/s         350
 TCP upload sum   :        91.27          N/A Mbits/s         350
Data file written to /home/jonas/flent/rrul-2020-12-04T210449.807272.flent.gz.

Output graph for an RRUL test is missing the 3 UDP ping series, but all other series seem to have gotten through. Perhaps this is no issue ~in~ possible to work around in flent after all, just my cloud provider blocking UDP ping...

tohojo commented 3 years ago

Jonas Smedegaard notifications@github.com writes:

Output graph for an RRUL test is missing the 3 UDP ping series, but all other series seem to have gotten through. Perhaps this is no issue in flent after all, just my cloud provider blocking UDP ping...

Or it may be that the same UDP issue you linked also affects the UDP_RR test; I'll dig around in the netperf source code a bit and see what I can find :)

jonassmedegaard commented 3 years ago

Quoting Toke Høiland-Jørgensen (2020-12-06 13:03:02)

Or it may be that the same UDP issue you linked also affects the UDP_RR test; I'll dig around in the netperf source code a bit and see what I can find :)

Thanks - much appreciated!

tohojo commented 3 years ago

Jonas Smedegaard notifications@github.com writes:

Quoting Toke Høiland-Jørgensen (2020-12-06 13:03:02)

Or it may be that the same UDP issue you linked also affects the UDP_RR test; I'll dig around in the netperf source code a bit and see what I can find :)

Thanks - much appreciated!

OK, poked around in the netperf sources a bit, and it seems the UDP_RR test is not affected by the -R flag, so the issue is most likely with some other source of blocking.

You could try setting up irtt on both server and client and see if that fares better - Flent should automatically pick it up if it's installed on the client, and you just need to start it along with netserver on the server-side:

https://github.com/heistp/irtt/

jonassmedegaard commented 3 years ago

Quoting Toke Høiland-Jørgensen (2020-12-08 17:19:18)

You could try setting up irtt on both server and client and see if that fares better - Flent should automatically pick it up if it's installed on the client, and you just need to start it along with netserver on the server-side:

https://github.com/heistp/irtt/

Installing irtt service worked. Thanks!

tohojo commented 3 years ago

Great! Closing this, then :)