Iperf: Summengeschwindigkeit über geschwindigkeitsbegrenzte Geschwindigkeit

Erstellt am 24. Jan. 2018  ·  13Kommentare  ·  Quelle: esnet/iperf

Kontext

  • Version von iperf3: 3.2

  • Hardware: Zwischen einem Linux-Server und einem Linux-Client

  • Betriebssystem (und ggf. Distribution): Debian-basiertes Linux

Fehlerbericht

  • Erwartetes Verhalten

@ aledesma78 war der ursprüngliche Entdecker dieser Ausgabe.

Wir haben eine gerätegeschränkte Geräterate für 3750 KBit / s. Wir haben erwartet, dass das Endergebnis bei oder unter 3,75 Mbit / s liegt

  • Tatsächliches Verhalten

Wir sehen ein Endergebnis der Geschwindigkeit über der geschwindigkeitsbegrenzten Geschwindigkeit, aber keine nicht ausgelassenen Intervalle erreichen diese Geschwindigkeit.

  • Schritte zum Reproduzieren

Ratenbegrenzt ein Gerät und führen Sie einen Downstream-Geschwindigkeitstest durch.

KUNDENAUSGABE

iperf3_2 -c 10.254.223.197 -R -P 2 -O2 -t5 -C cubic
Connecting to host 10.254.223.197, port 5201
Reverse mode, remote host 10.254.223.197 is sending
[  5] local 10.0.0.103 port 48668 connected to 10.254.223.197 port 5201
[  7] local 10.0.0.103 port 48669 connected to 10.254.223.197 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   250 KBytes  2.05 Mbits/sec                  (omitted)
[  7]   0.00-1.00   sec   246 KBytes  2.02 Mbits/sec                  (omitted)
[SUM]   0.00-1.00   sec   496 KBytes  4.07 Mbits/sec                  (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec   250 KBytes  2.05 Mbits/sec                  (omitted)
[  7]   1.00-2.00   sec   185 KBytes  1.52 Mbits/sec                  (omitted)
[SUM]   1.00-2.00   sec   436 KBytes  3.57 Mbits/sec                  (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   0.00-1.00   sec   195 KBytes  1.60 Mbits/sec
[  7]   0.00-1.00   sec   242 KBytes  1.98 Mbits/sec
[SUM]   0.00-1.00   sec   437 KBytes  3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec   212 KBytes  1.74 Mbits/sec
[  7]   1.00-2.00   sec   225 KBytes  1.84 Mbits/sec
[SUM]   1.00-2.00   sec   437 KBytes  3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   2.00-3.00   sec   232 KBytes  1.90 Mbits/sec
[  7]   2.00-3.00   sec   204 KBytes  1.67 Mbits/sec
[SUM]   2.00-3.00   sec   436 KBytes  3.57 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   3.00-4.00   sec   266 KBytes  2.18 Mbits/sec
[  7]   3.00-4.00   sec   171 KBytes  1.40 Mbits/sec
[SUM]   3.00-4.00   sec   437 KBytes  3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   4.00-5.00   sec   164 KBytes  1.34 Mbits/sec
[  7]   4.00-5.00   sec   272 KBytes  2.22 Mbits/sec
[SUM]   4.00-5.00   sec   436 KBytes  3.57 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-5.02   sec  1.36 MBytes  2.28 Mbits/sec    0             sender
[  5]   0.00-5.00   sec  1.17 MBytes  1.96 Mbits/sec                  receiver
[  7]   0.00-5.02   sec  1.51 MBytes  2.53 Mbits/sec    0             sender
[  7]   0.00-5.00   sec  1.34 MBytes  2.24 Mbits/sec                  receiver
[SUM]   0.00-5.02   sec  2.88 MBytes  4.81 Mbits/sec    0             sender
[SUM]   0.00-5.00   sec  2.51 MBytes  4.20 Mbits/sec                  receiver

SERVER-AUSGANG

Accepted connection from 10.254.223.201, port 48667
[  5] local 10.254.223.197 port 5201 connected to 10.254.223.201 port 48668
[  8] local 10.254.223.197 port 5201 connected to 10.254.223.201 port 48669
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   518 KBytes  4.24 Mbits/sec    0   83.4 KBytes       (omitted)
[  8]   0.00-1.00   sec   520 KBytes  4.26 Mbits/sec    0   83.4 KBytes       (omitted)
[SUM]   0.00-1.00   sec  1.01 MBytes  8.50 Mbits/sec    0             (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec   407 KBytes  3.34 Mbits/sec    0   96.2 KBytes       (omitted)
[  8]   1.00-2.00   sec   263 KBytes  2.16 Mbits/sec    0   90.5 KBytes       (omitted)
[SUM]   1.00-2.00   sec   670 KBytes  5.49 Mbits/sec    0             (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   0.00-1.00   sec   153 KBytes  1.25 Mbits/sec    0    105 KBytes
[  8]   0.00-1.00   sec   297 KBytes  2.43 Mbits/sec    0    102 KBytes
[SUM]   0.00-1.00   sec   450 KBytes  3.68 Mbits/sec    0
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec   334 KBytes  2.73 Mbits/sec    0    115 KBytes
[  8]   1.00-2.00   sec   161 KBytes  1.32 Mbits/sec    0    112 KBytes
[SUM]   1.00-2.00   sec   495 KBytes  4.05 Mbits/sec    0
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   2.00-3.00   sec   187 KBytes  1.53 Mbits/sec    0    126 KBytes
[  8]   2.00-3.00   sec   356 KBytes  2.92 Mbits/sec    0    124 KBytes
[SUM]   2.00-3.00   sec   543 KBytes  4.45 Mbits/sec    0
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   3.00-4.00   sec   444 KBytes  3.64 Mbits/sec    0    163 KBytes
[  8]   3.00-4.00   sec   206 KBytes  1.69 Mbits/sec    0    146 KBytes
[SUM]   3.00-4.00   sec   650 KBytes  5.33 Mbits/sec    0
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   4.00-5.00   sec   280 KBytes  2.29 Mbits/sec    0    197 KBytes
[  8]   4.00-5.00   sec   529 KBytes  4.33 Mbits/sec    0    202 KBytes
[SUM]   4.00-5.00   sec   809 KBytes  6.63 Mbits/sec    0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-5.02   sec  1.36 MBytes  2.28 Mbits/sec    0             sender
[  8]   0.00-5.02   sec  1.51 MBytes  2.53 Mbits/sec    0             sender
[SUM]   0.00-5.02   sec  2.88 MBytes  4.81 Mbits/sec    0             sender

Wie Sie sehen können, gibt die endgültige Summe des Kunden 4,20 Mbit / s über dem Ratenlimit des Kunden an. Es sollte nicht möglich sein, Geschwindigkeiten zu erreichen, die über dem Ratenlimit liegen.

Nach dem letzten Testintervall tritt eine merkliche Verzögerung auf. Zählt iperf3 nach dem letzten Intervall immer noch die endgültigen eingehenden Pakete und addiert sie zur Gesamtsumme, die dann nur durch die Zeit der Intervalle geteilt wird? Dies würde erklären, dass die Summe über dem Durchschnitt der Intervallgeschwindigkeiten liegt.

Wir haben eine Wireshark-Erfassung der eingehenden Pakete auf der Serverseite durchgeführt und viele TCP-Fehler festgestellt (siehe unten). Die Fehler waren eine Reihe von doppelten ACKs, vermutlich aufgrund des Verkehrsausbruchs, den der kubische Algorithmus während des Hochfahrens ausführt.

iperf3 packets with cubic

Da eine Überlastung zu einer Verzögerung der Pakete führen kann, haben wir den Vegas TCP-Überlastungsalgorithmus ausprobiert, um festzustellen, ob dies einen Unterschied macht.

KUNDENAUSGABE

iperf3_2 -c 10.254.223.197 -R -P 2 -O2 -t5 -C vegas
Connecting to host 10.254.223.197, port 5201
Reverse mode, remote host 10.254.223.197 is sending
[  5] local 10.0.0.103 port 48680 connected to 10.254.223.197 port 5201
[  7] local 10.0.0.103 port 48681 connected to 10.254.223.197 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   238 KBytes  1.95 Mbits/sec                  (omitted)
[  7]   0.00-1.00   sec   259 KBytes  2.12 Mbits/sec                  (omitted)
[SUM]   0.00-1.00   sec   496 KBytes  4.07 Mbits/sec                  (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec   325 KBytes  2.66 Mbits/sec                  (omitted)
[  7]   1.00-2.00   sec   112 KBytes   915 Kbits/sec                  (omitted)
[SUM]   1.00-2.00   sec   437 KBytes  3.58 Mbits/sec                  (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   0.00-1.00   sec   208 KBytes  1.70 Mbits/sec
[  7]   0.00-1.00   sec   229 KBytes  1.88 Mbits/sec
[SUM]   0.00-1.00   sec   437 KBytes  3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec   178 KBytes  1.46 Mbits/sec
[  7]   1.00-2.00   sec   257 KBytes  2.11 Mbits/sec
[SUM]   1.00-2.00   sec   436 KBytes  3.57 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   2.00-3.00   sec   182 KBytes  1.49 Mbits/sec
[  7]   2.00-3.00   sec   255 KBytes  2.09 Mbits/sec
[SUM]   2.00-3.00   sec   437 KBytes  3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   3.00-4.00   sec   175 KBytes  1.44 Mbits/sec
[  7]   3.00-4.00   sec   262 KBytes  2.14 Mbits/sec
[SUM]   3.00-4.00   sec   437 KBytes  3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   4.00-5.00   sec   181 KBytes  1.48 Mbits/sec
[  7]   4.00-5.00   sec   256 KBytes  2.10 Mbits/sec
[SUM]   4.00-5.00   sec   437 KBytes  3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-5.02   sec   911 KBytes  1.49 Mbits/sec    0             sender
[  5]   0.00-5.00   sec   925 KBytes  1.52 Mbits/sec                  receiver
[  7]   0.00-5.02   sec  1.24 MBytes  2.08 Mbits/sec    0             sender
[  7]   0.00-5.00   sec  1.35 MBytes  2.27 Mbits/sec                  receiver
[SUM]   0.00-5.02   sec  2.13 MBytes  3.56 Mbits/sec    0             sender
[SUM]   0.00-5.00   sec  2.26 MBytes  3.79 Mbits/sec                  receiver

SERVER-AUSGANG

Accepted connection from 10.254.223.201, port 48679
[  5] local 10.254.223.197 port 5201 connected to 10.254.223.201 port 48680
[  8] local 10.254.223.197 port 5201 connected to 10.254.223.201 port 48681
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   379 KBytes  3.10 Mbits/sec    0   35.4 KBytes       (omitted)
[  8]   0.00-1.00   sec   455 KBytes  3.73 Mbits/sec    0   17.0 KBytes       (omitted)
[SUM]   0.00-1.00   sec   834 KBytes  6.83 Mbits/sec    0             (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec   325 KBytes  2.66 Mbits/sec    0   17.0 KBytes       (omitted)
[  8]   1.00-2.00   sec  70.7 KBytes   579 Kbits/sec    0   7.07 KBytes       (omitted)
[SUM]   1.00-2.00   sec   396 KBytes  3.24 Mbits/sec    0             (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   0.00-1.00   sec   195 KBytes  1.60 Mbits/sec    0   8.48 KBytes
[  8]   0.00-1.00   sec   212 KBytes  1.74 Mbits/sec    0   9.90 KBytes
[SUM]   0.00-1.00   sec   407 KBytes  3.34 Mbits/sec    0
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec   195 KBytes  1.60 Mbits/sec    0   7.07 KBytes
[  8]   1.00-2.00   sec   283 KBytes  2.32 Mbits/sec    0   9.90 KBytes
[SUM]   1.00-2.00   sec   478 KBytes  3.92 Mbits/sec    0
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   2.00-3.00   sec   195 KBytes  1.60 Mbits/sec    0   7.07 KBytes
[  8]   2.00-3.00   sec   283 KBytes  2.32 Mbits/sec    0   9.90 KBytes
[SUM]   2.00-3.00   sec   478 KBytes  3.92 Mbits/sec    0
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   3.00-4.00   sec   195 KBytes  1.60 Mbits/sec    0   7.07 KBytes
[  8]   3.00-4.00   sec   212 KBytes  1.74 Mbits/sec    0   9.90 KBytes
[SUM]   3.00-4.00   sec   407 KBytes  3.34 Mbits/sec    0
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   4.00-5.00   sec   130 KBytes  1.07 Mbits/sec    0   7.07 KBytes
[  8]   4.00-5.00   sec   283 KBytes  2.32 Mbits/sec    0   9.90 KBytes
[SUM]   4.00-5.00   sec   413 KBytes  3.38 Mbits/sec    0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-5.02   sec   911 KBytes  1.49 Mbits/sec    0             sender
[  8]   0.00-5.02   sec  1.24 MBytes  2.08 Mbits/sec    0             sender
[SUM]   0.00-5.02   sec  2.13 MBytes  3.56 Mbits/sec    0             sender

Viola! Die Summe liegt unter der geschwindigkeitsbegrenzten Geschwindigkeit. Aber es gab immer noch Zeiten, in denen ich iperf3 mit dem Vegas-Algorithmus ausführte, in denen ich eine Summe von 3,78 Mbit / s sah (nur geringfügig über der geschwindigkeitsbegrenzten Geschwindigkeit).

Wir haben erneut ein Wireshark-Capture durchgeführt (siehe unten). Diesmal keine TCP-Fehler.

iperf3 packets with vegas

  • Mögliche Lösung

N / A

Verbesserungs Vorschlag

  • Aktuelles Verhalten

Die Summengeschwindigkeit scheint mehr Bytes als die einzelnen Intervallgeschwindigkeiten zu enthalten, was zu ungenauen Summengeschwindigkeiten führt, die höher sind als sie sein sollten.

  • Gewünschtes Verhalten

Die Summengeschwindigkeiten sollten den Durchschnitt der Byteanzahlen über alle Intervalle enthalten, ein etwaiger Überschuss sollte als zusätzlicher Datensatz enthalten sein.

bug

Alle 13 Kommentare

Ich habe ein Skript erstellt, um die Intervallzählungen zu berechnen und mit der Summe zu vergleichen.

./iperf3 -c 10.254.223.197 -P 2 -R -J -t 5 -O 2 
{
    "start":    {
        "connected":    [{
                "socket":   5,
                "local_host":   "10.0.0.103",
                "local_port":   42061,
                "remote_host":  "10.254.223.197",
                "remote_port":  5201
            }, {
                "socket":   7,
                "local_host":   "10.0.0.103",
                "local_port":   42062,
                "remote_host":  "10.254.223.197",
                "remote_port":  5201
            }],
        "version":  "iperf 3.3",
        "system_info":  "Linux alarm 3.14.79-28-ARCH #1 SMP PREEMPT Tue Nov 28 20:47:59 MST 2017 aarch64",
        "timestamp":    {
            "time": "Mon, 15 Jan 2018 23:15:14 GMT",
            "timesecs": 1516058114
        },
        "connecting_to":    {
            "host": "10.254.223.197",
            "port": 5201
        },
        "cookie":   "p53abfwnpdgxdb4i4ben3aby5q6p3tr72mzd",
        "tcp_mss_default":  1448,
        "sock_bufsize": 0,
        "sndbuf_actual":    16384,
        "rcvbuf_actual":    87380,
        "sock_bufsize": 0,
        "sndbuf_actual":    16384,
        "rcvbuf_actual":    87380,
        "test_start":   {
            "protocol": "TCP",
            "num_streams":  2,
            "blksize":  131072,
            "omit": 2,
            "duration": 5,
            "bytes":    0,
            "blocks":   0,
            "reverse":  1,
            "tos":  545460846592
        }
    },
    "intervals":    [{
            "streams":  [{
                    "socket":   5,
                    "start":    0,
                    "end":  1.0000720024108887,
                    "seconds":  1.0000720024108887,
                    "bytes":    263536,
                    "bits_per_second":  2108136.2091104626,
                    "omitted":  true
                }, {
                    "socket":   7,
                    "start":    0,
                    "end":  1.0000808238983154,
                    "seconds":  1.0000808238983154,
                    "bytes":    244712,
                    "bits_per_second":  1957537.784165184,
                    "omitted":  true
                }],
            "sum":  {
                "start":    0,
                "end":  1.0000720024108887,
                "seconds":  1.0000720024108887,
                "bytes":    508248,
                "bits_per_second":  4065691.2604273204,
                "omitted":  true
            }
        }, {
            "streams":  [{
                    "socket":   5,
                    "start":    1.0000720024108887,
                    "end":  2.0000720024108887,
                    "seconds":  1,
                    "bytes":    254848,
                    "bits_per_second":  2038784,
                    "omitted":  true
                }, {
                    "socket":   7,
                    "start":    1.0000808238983154,
                    "end":  2.0000829696655273,
                    "seconds":  1.0000021457672119,
                    "bytes":    192584,
                    "bits_per_second":  1540668.6940836317,
                    "omitted":  true
                }],
            "sum":  {
                "start":    1.0000720024108887,
                "end":  2.0000720024108887,
                "seconds":  1,
                "bytes":    447432,
                "bits_per_second":  3579456,
                "omitted":  true
            }
        }, {
            "streams":  [{
                    "socket":   5,
                    "start":    9.3936920166015625e-05,
                    "end":  0.99996590614318848,
                    "seconds":  1.0000598430633545,
                    "bytes":    205616,
                    "bits_per_second":  1644829.5683599333,
                    "omitted":  false
                }, {
                    "socket":   7,
                    "start":    8.296966552734375e-05,
                    "end":  0.99997401237487793,
                    "seconds":  1.0000569820404053,
                    "bytes":    241816,
                    "bits_per_second":  1934417.7729283024,
                    "omitted":  false
                }],
            "sum":  {
                "start":    9.3936920166015625e-05,
                "end":  0.99996590614318848,
                "seconds":  1.0000598430633545,
                "bytes":    447432,
                "bits_per_second":  3579241.80720577,
                "omitted":  false
            }
        }, {
            "streams":  [{
                    "socket":   5,
                    "start":    0.99996590614318848,
                    "end":  1.9999659061431885,
                    "seconds":  1,
                    "bytes":    231680,
                    "bits_per_second":  1853440,
                    "omitted":  false
                }, {
                    "socket":   7,
                    "start":    0.99997401237487793,
                    "end":  1.9999749660491943,
                    "seconds":  1.0000009536743164,
                    "bytes":    215752,
                    "bits_per_second":  1726014.3539444408,
                    "omitted":  false
                }],
            "sum":  {
                "start":    0.99996590614318848,
                "end":  1.9999659061431885,
                "seconds":  1,
                "bytes":    447432,
                "bits_per_second":  3579456,
                "omitted":  false
            }
        }, {
            "streams":  [{
                    "socket":   5,
                    "start":    1.9999659061431885,
                    "end":  2.9999370574951172,
                    "seconds":  0.99997115135192871,
                    "bytes":    237472,
                    "bits_per_second":  1899830.8075503621,
                    "omitted":  false
                }, {
                    "socket":   7,
                    "start":    1.9999749660491943,
                    "end":  2.9999480247497559,
                    "seconds":  0.99997305870056152,
                    "bytes":    209960,
                    "bits_per_second":  1679725.253981042,
                    "omitted":  false
                }],
            "sum":  {
                "start":    1.9999659061431885,
                "end":  2.9999370574951172,
                "seconds":  0.99997115135192871,
                "bytes":    447432,
                "bits_per_second":  3579559.2654454992,
                "omitted":  false
            }
        }, {
            "streams":  [{
                    "socket":   5,
                    "start":    2.9999370574951172,
                    "end":  3.9999649524688721,
                    "seconds":  1.0000278949737549,
                    "bytes":    275120,
                    "bits_per_second":  2200898.6059911489,
                    "omitted":  false
                }, {
                    "socket":   7,
                    "start":    2.9999480247497559,
                    "end":  3.9999740123748779,
                    "seconds":  1.0000259876251221,
                    "bytes":    170864,
                    "bits_per_second":  1366876.4781264982,
                    "omitted":  false
                }],
            "sum":  {
                "start":    2.9999370574951172,
                "end":  3.9999649524688721,
                "seconds":  1.0000278949737549,
                "bytes":    445984,
                "bits_per_second":  3567772.4770803885,
                "omitted":  false
            }
        }, {
            "streams":  [{
                    "socket":   5,
                    "start":    3.9999649524688721,
                    "end":  4.9999239444732666,
                    "seconds":  0.99995899200439453,
                    "bytes":    176656,
                    "bits_per_second":  1413305.9568444674,
                    "omitted":  false
                }, {
                    "socket":   7,
                    "start":    3.9999740123748779,
                    "end":  4.9999361038208008,
                    "seconds":  0.99996209144592285,
                    "bytes":    270776,
                    "bits_per_second":  2166290.1209261958,
                    "omitted":  false
                }],
            "sum":  {
                "start":    3.9999649524688721,
                "end":  4.9999239444732666,
                "seconds":  0.99995899200439453,
                "bytes":    447432,
                "bits_per_second":  3579602.7923355773,
                "omitted":  false
            }
        }],
    "end":  {
        "streams":  [{
                "sender":   {
                    "socket":   5,
                    "start":    0,
                    "end":  5.0177791118621826,
                    "seconds":  5.0177791118621826,
                    "bytes":    1662304,
                    "bits_per_second":  2650262.5371774738,
                    "retransmits":  0,
                    "max_snd_cwnd": 0,
                    "max_rtt":  0,
                    "min_rtt":  0,
                    "mean_rtt": 0
                },
                "receiver": {
                    "socket":   5,
                    "start":    0,
                    "end":  4.9999239444732666,
                    "seconds":  4.9999239444732666,
                    "bytes":    1388688,
                    "bits_per_second":  2221934.5980812446
                }
            }, {
                "sender":   {
                    "socket":   7,
                    "start":    0,
                    "end":  5.0177791118621826,
                    "seconds":  5.0177791118621826,
                    "bytes":    1601488,
                    "bits_per_second":  2553301.7126465905,
                    "retransmits":  0,
                    "max_snd_cwnd": 0,
                    "max_rtt":  0,
                    "min_rtt":  0,
                    "mean_rtt": 0
                },
                "receiver": {
                    "socket":   7,
                    "start":    0,
                    "end":  4.9999239444732666,
                    "seconds":  4.9999239444732666,
                    "bytes":    1240240,
                    "bits_per_second":  1984414.1851332216
                }
            }],
        "sum_sent": {
            "start":    0,
            "end":  5.0177791118621826,
            "seconds":  5.0177791118621826,
            "bytes":    3263792,
            "bits_per_second":  5203564.2498240648,
            "retransmits":  0
        },
        "sum_received": {
            "start":    0,
            "end":  4.9999239444732666,
            "seconds":  4.9999239444732666,
            "bytes":    2628928,
            "bits_per_second":  4206348.7832144666
        },
        "cpu_utilization_percent":  {
            "host_total":   1.4895097996990692,
            "host_user":    0.27786769885254531,
            "host_system":  1.2504046448364539,
            "remote_total": 0.077469205119125223,
            "remote_user":  0.033212949675937929,
            "remote_system":    0.044283932901250572
        },
        "sender_tcp_congestion":    "cubic",
        "receiver_tcp_congestion":  "cubic"
    }
}

Intvl (non-omitted) start time: 0.000094
Intvl (non-omitted) end time: 4.999924
Intvl (non-omitted) total bytes: 2235712
Intvl (non-omitted) data rate (bits/s): 3577260.821464
Sum total bytes: 2628928
Sum data rate (bits/s): 4206348.783214
Diff (Sum total bytes - Intvl (non-omitted) total bytes): 393216

Wenn wir nur die nicht ausgelassenen Intervalle berechnen, können wir sehen, dass die Datenrate mehr mit dem übereinstimmt, was wir pro Intervall bei 3,58 Mbit / s sehen, und dass die Gesamtbytezahl und die Intervallbytezahl eine Byte-Disparität von fast 400 KB aufweisen

Vielen Dank für den beschreibenden Fehlerbericht und die Analyse. Ich entschuldige mich dafür, dass ich dieses Problem nicht früher erkannt habe. Offensichtlich passiert etwas Seltsames mit unserer Buchhaltung. Ich frage mich, ob wir die ausgelassenen Bytes irgendwie in die Gesamtsumme einbeziehen oder etwas anderes, um die Summe aufzublähen.

Wir glauben, dass iperf3 immer noch die in den Puffern verbleibenden Bytes zählt, selbst nachdem iperf3 die Messintervalle beendet hat.

Ich bin nicht davon überzeugt, dass das Zählen dieser Bytes am Ende ein Fehler ist (sie wurden vom Absender während der Testdauer gültig gesendet, und denken Sie daran, dass die Stoppbedingungen des Tests auf der Absenderseite und nicht auf dem Empfänger gelten). Wenn wir sie jedoch zählen, müssen wir auch die Zeit berücksichtigen, über die diese Bytes empfangen wurden, damit die Ratenberechnung korrekt ist.

Genau. Es ist vorteilhaft, alle empfangenen Bytes zu berücksichtigen, und ich sehe das nicht als Fehler, sondern iperf3 berücksichtigt nicht die Zeit, zu der diese letzten Bytes eingehen. Kann dem JSON, das Konten berücksichtigt, ein weiteres Intervall hinzugefügt werden? für diese Zeit und haben es als zusätzliches Intervall markiert?

Kann dem JSON ein weiteres Intervall hinzugefügt werden, das diese Zeit berücksichtigt und als zusätzliches Intervall markiert wird?

Ich dachte, das haben wir getan, deshalb bin ich ein bisschen verwirrt. Ich muss versuchen, diesen Fehler lokal zu reproduzieren und dann in den Quellcode einzutauchen. Passiert das konsequent? Kommt es auch nur bei mehreren parallelen Streams vor oder sehen Sie es auch bei Single-Streams?

Es passiert konsistent, wenn der kubische Algorithmus verwendet wird, und es spielt keine Rolle, ob es sich um einen Einzelstrom oder mehr handelt.

Nur weil wir niedrigere Geschwindigkeiten testen, konnten wir dieses Problem feststellen. Die zusätzlichen Bytes sind bei höheren Geschwindigkeiten auf der Gesamtsumme nicht so auffällig.

OK. Gute (?!?) Nachrichten: Ich konnte dieses Problem mit einigen VMs auf meinem Laptop reproduzieren, wobei die Verbindung durch tc (8) künstlich auf 256 Kbit / s beschränkt wurde. Bisher habe ich dies jedoch nur bei mehreren parallelen TCP-Streams gesehen. Ich weiß zum jetzigen Zeitpunkt nicht, wie wichtig das ist, nur eine Beobachtung.

Server ist CentOS 7, Client ist CentOS 6, beide führen iperf3 aus, kompiliert aus dem Tipp von master code:

bmah-centos6:iperf% src/iperf3 --client 192.168.56.104 --parallel 2 --reverse -O2 -t 5 -C cubic -fk
Connecting to host 192.168.56.104, port 5201
Reverse mode, remote host 192.168.56.104 is sending
[  5] local 192.168.56.101 port 52906 connected to 192.168.56.104 port 5201
[  7] local 192.168.56.101 port 52908 connected to 192.168.56.104 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  21.2 KBytes   173 Kbits/sec                  (omitted)
[  7]   0.00-1.00   sec  14.1 KBytes   116 Kbits/sec                  (omitted)
[SUM]   0.00-1.00   sec  35.4 KBytes   289 Kbits/sec                  (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec  17.0 KBytes   139 Kbits/sec                  (omitted)
[  7]   1.00-2.00   sec  9.90 KBytes  81.1 Kbits/sec                  (omitted)
[SUM]   1.00-2.00   sec  26.9 KBytes   220 Kbits/sec                  (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   0.00-1.00   sec  14.1 KBytes   116 Kbits/sec                  
[  7]   0.00-1.00   sec  14.1 KBytes   116 Kbits/sec                  
[SUM]   0.00-1.00   sec  28.3 KBytes   232 Kbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec  14.1 KBytes   116 Kbits/sec                  
[  7]   1.00-2.00   sec  17.0 KBytes   139 Kbits/sec                  
[SUM]   1.00-2.00   sec  31.1 KBytes   255 Kbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   2.00-3.00   sec  14.1 KBytes   116 Kbits/sec                  
[  7]   2.00-3.00   sec  14.1 KBytes   116 Kbits/sec                  
[SUM]   2.00-3.00   sec  28.3 KBytes   232 Kbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   3.00-4.00   sec  15.6 KBytes   127 Kbits/sec                  
[  7]   3.00-4.00   sec  15.6 KBytes   127 Kbits/sec                  
[SUM]   3.00-4.00   sec  31.1 KBytes   255 Kbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   4.00-5.00   sec  14.1 KBytes   116 Kbits/sec                  
[  7]   4.00-5.00   sec  14.1 KBytes   116 Kbits/sec                  
[SUM]   4.00-5.00   sec  28.3 KBytes   232 Kbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-5.02   sec  79.2 KBytes   129 Kbits/sec    0             sender
[  5]   0.00-5.00   sec  72.1 KBytes   118 Kbits/sec                  receiver
[  7]   0.00-5.02   sec   110 KBytes   180 Kbits/sec    0             sender
[  7]   0.00-5.00   sec  74.9 KBytes   123 Kbits/sec                  receiver
[SUM]   0.00-5.02   sec   189 KBytes   309 Kbits/sec    0             sender
[SUM]   0.00-5.00   sec   147 KBytes   241 Kbits/sec                  receiver

iperf Done.

Es sollte dem Absender nicht möglich sein, 309 Kbit / s auszugeben. Also muss ich herausfinden, was damit los ist.

OK, nachdem ich eine Weile damit herumgespielt hatte, kam ich auf ein paar Dinge. TL; DR: iperf3 funktioniert ordnungsgemäß, aber es gibt einige Feinheiten bei der Interpretation der Ausgabe, die irreführend sein können.

  • Die Messungen in jedem Intervall werden auf der Anwendungsschicht (dh innerhalb von iperf3 selbst) durchgeführt. Dies ist eine wichtige Tatsache, die Menschen (einschließlich mir) manchmal vergessen. Zwischen der Anwendung und der Leitung befinden sich die Socket-Puffer des Kernels, der gesamte TCP / IP-Protokollstapel (einschließlich Flusskontrolle und Überlastungskontrolle) und Schnittstellenpuffer.

  • Die anomalen Messwerte (mit der ungewöhnlich hohen Bitrate) wurden von der Sendeseite genommen, insbesondere vor den geschwindigkeitsbestimmenden Effekten der Flusskontrolle und Überlastungskontrolle von TCP.

  • Die Tests, die durchgeführt wurden, um dies zu untersuchen (einschließlich der von mir durchgeführten), waren alle ziemlich kurz, nur wenige Sekunden.

Was meiner Meinung nach hier passiert, ist, dass der Sendeprozess einen großen Datenburst senden kann (bis zu den Grenzen der Socket-Puffer und ohne Rücksicht auf den TCP-Algorithmus zur Überlastungskontrolle). Irgendwann zwingen die Überlastungssteuerungsalgorithmen und / oder der Paketverlust das Anhalten. Beachten Sie, dass der letzte Teil jedes Bursts für iperf3 bereits gesendet wurde (daher wird er in der Intervallstatistik als "gesendet" gezählt), sich jedoch in den Socket-Puffern auf der Anwendungsseite befindet und auf eine erneute Übertragung wartet. Es ist also möglich, dass in einem Intervall eine gesendete Datenmenge aufgezeichnet wird, die tatsächlich höher ist als die, die über das Kabel gesendet werden kann, da die Daten den sendenden Host noch nicht verlassen haben.

Dieser Effekt ist besonders sichtbar, da die kurze Testdauer (5 Sekunden) es ermöglicht, über einen kurzen Zeitraum Intervallraten zu beobachten, die nicht auf die längerfristige Rate hinweisen. Sie sehen dies nicht wirklich auf der Client- (Empfänger-) Seite, aber die Server- (Absender-) Protokolle zeigen es. Hier ist ein Absenderprotokoll für einen kürzlich von mir durchgeführten Test. Beachten Sie die Burst-Art des vom Absender kommenden Datenverkehrs. Dies ist auch in der serverseitigen Ausgabe in Ihrem ursprünglichen Fehlerbericht sichtbar, obwohl es etwas weniger sichtbar ist (möglicherweise, weil Sie eine größere Engpassbandbreite hatten?). Es zeigt jedoch Schwankungen in der Datenmenge, die in jedem Intervall gesendet wird, sowohl oberhalb als auch unterhalb der Engpassbandbreite.

-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.56.101, port 53362
[  5] local 192.168.56.104 port 5201 connected to 192.168.56.101 port 53364
[  8] local 192.168.56.104 port 5201 connected to 192.168.56.101 port 53366
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   130 KBytes  1.06 Mbits/sec    0   28.3 KBytes       (omitted)
[  8]   0.00-1.00   sec  77.8 KBytes   636 Kbits/sec    0   14.1 KBytes       (omitted)
[SUM]   0.00-1.00   sec   208 KBytes  1.70 Mbits/sec    0             (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec  60.8 KBytes   498 Kbits/sec    0   28.3 KBytes       (omitted)
[  8]   1.00-2.00   sec  49.5 KBytes   405 Kbits/sec    0   19.8 KBytes       (omitted)
[SUM]   1.00-2.00   sec   110 KBytes   903 Kbits/sec    0             (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   0.00-1.00   sec  0.00 Bytes  0.00 bits/sec    0   28.3 KBytes       
[  8]   0.00-1.00   sec  0.00 Bytes  0.00 bits/sec    0   19.8 KBytes       
[SUM]   0.00-1.00   sec  0.00 Bytes  0.00 bits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   1.00-2.00   sec  0.00 Bytes  0.00 bits/sec    0   28.3 KBytes       
[  8]   1.00-2.00   sec  0.00 Bytes  0.00 bits/sec    0   19.8 KBytes       
[SUM]   1.00-2.00   sec  0.00 Bytes  0.00 bits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   2.00-3.00   sec  0.00 Bytes  0.00 bits/sec    0   28.3 KBytes       
[  8]   2.00-3.00   sec  48.1 KBytes   394 Kbits/sec    0   19.8 KBytes       
[SUM]   2.00-3.00   sec  48.1 KBytes   394 Kbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   3.00-4.00   sec  79.2 KBytes   649 Kbits/sec    0   28.3 KBytes       
[  8]   3.00-4.00   sec  0.00 Bytes  0.00 bits/sec    0   22.6 KBytes       
[SUM]   3.00-4.00   sec  79.2 KBytes   649 Kbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[  5]   4.00-5.00   sec  0.00 Bytes  0.00 bits/sec    0   28.3 KBytes       
[  8]   4.00-5.00   sec  62.2 KBytes   509 Kbits/sec    0   22.6 KBytes       
[SUM]   4.00-5.00   sec  62.2 KBytes   509 Kbits/sec    0             
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-5.02   sec  79.2 KBytes   129 Kbits/sec    0             sender
[  8]   0.00-5.02   sec   110 KBytes   180 Kbits/sec    0             sender
[SUM]   0.00-5.02   sec   189 KBytes   309 Kbits/sec    0             sender

Beachten Sie, dass bei ähnlichen Tests, die jedoch länger dauern (z. B. 10 bis 30 Sekunden), immer noch die Schwankungen der auf der Anwendungsschicht gesendeten Daten pro Intervall angezeigt werden, der langfristige Durchschnitt sich jedoch (korrekt) der Engpassbandbreite nähert. Hier ist das Ende eines 30-Sekunden-Tests, der zeigt, dass die Sende- und Empfangs-Bitraten ungefähr gleich sind und ungefähr das, was wir von einem Link mit einer begrenzten Rate von 256 Kbit / s erwarten würden:

- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-30.02  sec   410 KBytes   112 Kbits/sec    0             sender
[  5]   0.00-30.00  sec   450 KBytes   123 Kbits/sec                  receiver
[  7]   0.00-30.02  sec   484 KBytes   132 Kbits/sec    0             sender
[  7]   0.00-30.00  sec   448 KBytes   122 Kbits/sec                  receiver
[SUM]   0.00-30.02  sec   894 KBytes   244 Kbits/sec    0             sender
[SUM]   0.00-30.00  sec   898 KBytes   245 Kbits/sec                  receiver

iperf Done.

Nach allem, was ich sagen kann, funktioniert iperf3 korrekt, aber möglicherweise sind längere Tests erforderlich, um aussagekräftigere Ergebnisse zu erzielen. (Andere Möglichkeiten, diesen Effekt zu beseitigen, könnten darin bestehen, kleinere Sendegrößen zu verwenden, die Socket-Puffergrößen zu reduzieren oder eine faire Warteschlange pro Socket zu verwenden, obwohl ich keine davon getestet habe.)

Wenn der Absender eine Bitrate über dem Ratenlimit hat, ist es sinnvoll, dass eine Überlastung vorliegt, aber ich bin mehr besorgt darüber, dass dies auf der Empfängerseite geschieht. Wenn Sie sich meine erste Client-Ausgabe ansehen, hat die Empfänger-SUMME eine Bitrate über dem Ratenlimit

[SUM]   0.00-5.00   sec  2.51 MBytes  4.20 Mbits/sec                  receiver

Warum sollte der Empfänger behaupten, eine höhere Rate als möglich erhalten zu haben (im obigen Fall ist sie auf 3,75 Mbit / s begrenzt)?

Ich möchte darauf hinweisen, dass ich bei der Durchführung meiner Tests eine Verzögerung der Summenergebnisse im letzten Intervall feststellen würde. Normalerweise sehe ich keine Verzögerung in den Summenergebnissen, daher frage ich mich, ob der Empfänger auch nach der letzten Intervallmessung noch die im Puffer verbleibenden Bytes zählt.

Anerkannt. Lassen Sie mich noch etwas näher darauf eingehen. Das Problem auf der Empfängerseite ist nicht eines, das ich sehe (vielleicht habe ich den falschen Teil des Problems betrachtet, aber wer auch immer ...). Möglicherweise muss ich etwas anderes herausfinden, um zu versuchen, diese Seite zu reproduzieren.

Ich habe letzte Woche fast einen Tag damit verbracht, diesen Fehler zu reproduzieren, da die Messgenauigkeit (im Gegensatz zu einigen optionalen Funktionen) für uns sehr wichtig ist. Aber ich konnte es nicht neu erstellen. Wenn mir jemand (irgendjemand) helfen kann, dieses Problem aus erster Hand zu erkennen und es zu untersuchen, vorzugsweise mit ein paar VMs und einem Begrenzungsmechanismus wie tc, wäre das sehr dankbar.

@ bmah888 Ich habe dir eine E-Mail geschickt, die hilfreich sein kann

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen