network-quality / goresponsiveness

A draft-ietf-ippm-responsiveness client in Go.
GNU General Public License v2.0
132 stars 10 forks source link

extended-stats: how are the multiple flows aggregated? #28

Open moeller0 opened 2 years ago

moeller0 commented 2 years ago

Playing around with the extended-stats output and selective MSS clamping on either the ingress or egress direction I saw:

user@ ubuntu:~/CODE/goresponsiveness$ time ./networkQuality --config mensura.cdn-apple.com --port 443 --path /api/v1/gm/config --extended-stats
06-18-2022 18:10:09 UTC Go Responsiveness to mensura.cdn-apple.com:443...
Download:  56.706 Mbps (  7.088 MBps), using 12 parallel connections.
Upload:    25.122 Mbps (  3.140 MBps), using 32 parallel connections.
Total measurements: 15
RPM:   352
Extended Statistics:
        Maximum Path MTU: 1500
        Maximum Send MSS: 1440
        Maximum Recv MSS: 524
        Total Retransmissions: 10
        Total Reorderings: 36
        Average RTT: 42028.75

real    0m18.954s
user    0m1.729s
sys     0m1.957s

user@ubuntu:~/CODE/goresponsiveness$ time ./networkQuality --config mensura.cdn-apple.com --port 443 --path /api/v1/gm/config --extended-stats
06-18-2022 18:23:45 UTC Go Responsiveness to mensura.cdn-apple.com:443...
Warning: Could not add extended stats for the connection: OOPS: Could not get the TCP info for the connection (not a TLS connection)!
Download:  50.325 Mbps (  6.291 MBps), using 20 parallel connections.
Upload:    21.711 Mbps (  2.714 MBps), using 20 parallel connections.
Total measurements: 15
RPM:   319
Extended Statistics:
        Maximum Path MTU: 1500
        Maximum Send MSS: 1440
        Maximum Recv MSS: 524
        Total Retransmissions: 4
        Total Reorderings: 57
        Average RTT: 47221.52631578947

real    0m11.520s
user    0m1.078s
sys     0m1.021s

user@ubuntu:~/CODE/goresponsiveness$ time ./networkQuality --config mensura.cdn-apple.com --port 443 --path /api/v1/gm/config --extended-stats
06-18-2022 18:24:01 UTC Go Responsiveness to mensura.cdn-apple.com:443...
Warning: Could not add extended stats for the connection: OOPS: Could not get the TCP info for the connection (not a TLS connection)!
Warning: Could not add extended stats for the connection: OOPS: Could not get the TCP info for the connection (not a TLS connection)!
Warning: Could not add extended stats for the connection: OOPS: Could not get the TCP info for the connection (not a TLS connection)!
Download:  53.388 Mbps (  6.673 MBps), using 24 parallel connections.
Upload:    27.276 Mbps (  3.409 MBps), using 12 parallel connections.
Total measurements: 15
RPM:   579
Extended Statistics:
        Maximum Path MTU: 1492
        Maximum Send MSS: 1208
        Maximum Recv MSS: 524
        Total Retransmissions: 12
        Total Reorderings: 63
        Average RTT: 51085.47619047619

real    0m13.586s
user    0m1.604s
sys     0m1.579s

Note how occasionally the pMTU appears to be 1500 and in others 1492 (the corrdet value), these wrong values seem to coincide with the

Warning: Could not add extended stats for the connection: OOPS: Could not get the TCP info for the connection (not a TLS connection)!

warnings. As a rough hypothesis it looks like this happens when one or more flows uses IPv4 instead of IPv6 (judged from running iftop on the router and visually cheching whether load-bearing flows use IPv6 or IPv4 addresses), so the 1500 pMTU values appear to come from IPv6, while the others appear to come from IPv4 stats.

That opens the question, if like in the last test 36 flows are used or (if data is passed through the same flows bidirectionally) "only" 24) what exact extended statistics are reported here?

I guess reporting data from a single flow is totally fine, but that could be made explicit and maybe add the run time of that flow and the total bytes transferred as well?