Zum Inhalt

Wie die Messungen entstehen

Übersetzung der Seite How the measurements are taken. Bei Abweichungen gilt der englische Text.

Jede Messseite sagt, wie ihre Zahlen entstanden sind und was sie nicht bedeuten. Diese Seite sammelt, was allen gemeinsam ist: den Prüfstand, wo eine Zahl abgelesen wird, die Werkzeuge, die Rechnung hinter jeder Art von Zahl und die Regeln, die jede Seite einhält - jeweils mit dem Grund, warum es so gemacht wird. Denn eine Zahl ohne ihre Methode beweist nichts, und die, die am besten aussehen, messen meist etwas anderes als das, was sie behaupten.

Der Prüfstand

Zwei XGS 3300 und eine XGS 136, zueinander geroutet, und ein PC an der mittleren mit 10 Gbit/s - wie auf der Seite des Prüfstands (Englisch), wo das Fenster jedes Laufs fotografiert ist:

Verbindung von nach Medium
der PC die 10GBASE-T-Netzwerkkarte des PCs F1 der zweiten XGS 3300 Kupfer, 10 Gbit/s
die Glasfaser Modulport A1 der zweiten XGS 3300 F1 der ersten XGS 3300 Glasfaser, 10 Gbit/s
die Gigabit-Verbindung Port8 der zweiten XGS 3300 Port8 der XGS 136 Kupfer, 1 Gbit/s
was warum
Eine Hardware-Gegenstelle an beiden Enden jedes Tunnels. Bis zum 17.10.2026 war das ferne Ende eines gemessenen Tunnels eine Firewall, die ESP in Software rechnete; eine Zahl konnte also die jener Firewall sein statt die des Geräts.
Jede Verbindung ein eigenes /30, außerhalb der LAN-Bridge, mit einer Pass-Regel und einer statischen Route. Der Verkehr wird durch das Gerät geroutet, nicht an ihm vorbei geswitcht, und nichts anderes im Netz teilt den Weg.
Nie ein öffentlicher Testserver als fernes Ende. Das sind Server anderer Leute, und sie lehnen ab, was wie eine Flut aussieht; eine abgelehnte Zeile hinterließ einmal drei „Downloads“ in einer Tabelle, die nie gelaufen waren. Alles Parallele oder Wiederholte geht an ein fernes Ende auf dem Prüfstand.

Wo eine Zahl abgelesen wird

Beim Empfänger, am fernen Ende - nie an den eigenen Zählern des Geräts. Eine Verbindung in Hardware geht innerhalb des Koprozessors von Port zu Port und erreicht den Host nie: der Zustand in pf, die Schnittstellenzähler und jeder darauf gebaute Graph hören auf zu wachsen. Eine Anzeige, die null zeigt, wenn alles funktioniert, ist keine Anzeige - ein Lauf wurde einmal von einer Regel gestoppt, die eine solche Null als Zusammenbruch las, den es nie gab.

Die Zahl des Empfängers, nicht die des Senders. iperf3 gibt beide aus: der Sender zählt, was er in seinen Socket schrieb, der Empfänger, was ankam. Nur das Zweite ist Durchsatz.

Eine Zeile wird erst gelesen, wenn feststeht, dass sie gelaufen ist - empfangene Bytes, nicht nur bewegte Zähler.

Die Werkzeuge

Werkzeug was es hier misst warum dieses
iperf3 - 3.20 unter WSL auf dem PC zum Senden, iperf3 für Windows zum Empfangen, 3.22 (das Paket von OPNsense) als Server auf dem Host eines Geräts Durchsatz, ein TCP-Strom oder vier, zehn Sekunden pro Lauf dasselbe Werkzeug an beiden Enden jedes Laufs, seine Version genannt. Zwei Clients auf dem PC, weil das gespiegelte Netzwerk von WSL einen Frame über 1500 Bytes hinaus-, aber nicht hereinlässt: jeder Lauf, in dem der PC über 1500 empfing, maß 0,00 Bit/s, bis er mit der Windows-Version neu gemessen wurde
curl über HTTPS und SHA-256 die Integritäts-Dauerläufe: eine 1-GiB-Datei aus Zufallsbytes, stundenlang in Schleifen geholt TLS verwirft jeden Record, der sich nicht authentifiziert, und der Hash der Datei gegen den des Servers fängt alles, was ganz durchkam; Durchsatz allein sagt nichts darüber, ob die Bytes stimmten
ping mit gesetztem Don't-Fragment-Bit, in festen Größen ob ein Frame einer bestimmten Größe einen Weg passiert, und Umlaufzeiten der einfachste Test der MTU eines Wegs und eines Ports, der überhaupt empfängt
sysctl die CPUs (kern.cp_time), die eigenen Zähler der Treiber (dev.octep.0.*, dev.npuep.0.*) und der geleerte TCP-Host-Cache (net.inet.tcp.hostcache.purgenow) die eigenen Zahlen des Kernels, bei jedem Lauf gleich gelesen
pfctl die Zustände von pf und ihre Paket- und Bytezahlen was die Firewall des Hosts sah, neben das zu stellen, was die Hardware sah
die eigenen Statistiken des Koprozessors, über den Treiber gelesen was die Hardware weiterleitete: Frames von der Leitung, Frames, die sie selbst zurück auf die Leitung schickte, ihre Zählung jeder Verbindung der einzige Zeuge des Verkehrs, den der Host nicht mehr sieht
mvsw die Register des Switch-Chips: das Frame-Limit eines Ports, seine Fehlerzähler Fehler und Grenzen, die nur der Switch sieht, aus seinen eigenen Registern gelesen
shot-run.ps1 startet jeden Messbefehl in einem eigenen Konsolenfenster und fotografiert dieses Fenster, wenn er endet, mit den eigenen Pixeln des Fensters der Beleg ist der Bildschirm, wie er war, nicht eine nachträglich abgetippte Wiedergabe, und nichts anderes vom Desktop gerät ins Bild
tools/mark-images.py setzt den Inhaber und die Lizenz (CC BY 4.0) in einen Streifen unter jedes Foto; das unmarkierte Original wird getrennt aufbewahrt ein Bild, das die Seite verlässt, sagt noch, wem es gehört
tools/readme-art.py berechnet den Fertigstellungsgrad jedes Geräts aus der Tabelle seiner Familienseite siehe die Rechnung unten; die Prüfungen schlagen fehl, wenn eine Seite etwas anderes angibt

Die Skripte, die jeden Lauf steuern, sind auf der Seite dieses Laufs genannt.

Die Rechnung

Zahl wie sie berechnet wird warum
Durchsatz, ein Lauf die Bits pro Sekunde des Empfängers über den Lauf, wie iperf3 sie ausgibt die Zählung des Empfängers ist das, was ankam
Durchsatz, ein Dauerlauf in den erfolgreichen Durchgängen empfangene Bytes × 8, geteilt durch die Sekunden vom Beginn des ersten bis zum Ende des letzten Durchgangs ein Mittel über Stunden, Fehlschläge nicht als geliefert gezählt
CPU-Auslastung kern.cp_time vor und nach dem Lauf gelesen; Auslastung = (gesamt − Leerlauf) ÷ gesamt, aus den Differenzen was der Lauf über seine ganze Dauer kostete, wo ein Blick auf top einen Moment herausgreift
Anteil der Frames in Hardware von den Frames, die der Koprozessor über den Lauf von der Leitung empfing (RX_WIRE), der Anteil, den er selbst zurück auf die Leitung schickte (FROM_WIRE_TO_WIRE): 6.630.528 von 6.657.897 sind 99,6 % gezählt von der Hardware, die sie weiterleitete, nicht aus dem Schweigen des Hosts gefolgert
ein Zähler, dem vertraut wird gegen eine vorher bekannte Menge gestellt: der PC sendet genau 4.000.000.000 Bytes, und die Zählung des Koprozessors und die von pf zusammen müssen ergeben, was über die Leitung ging - sie ergaben es bis auf 14 Pakete von 2,74 Millionen einem Zähler wird erst vertraut, wenn er mit etwas unabhängig Gezähltem übereinstimmte; zwei wurden auf diese Weise als falsch erkannt
das Ergebnis eines Integritäts-Dauerlaufs fehlgeschlagene Durchgänge (Exit-Code von curl), Durchgänge mit abweichender Datei (der Hash) und Bytes ein Dauerlauf besteht nur, wenn beide null sind
der Fertigstellungsgrad eines Geräts jede Zeile der Tabelle seiner Familienseite hat einen Erledigt-Prozentsatz und ein Gewicht; Fertigstellung = Σ(erledigt × Gewicht) ÷ N, wobei die Gewichte N ergeben und ein durchgestrichener Wert nicht zählt ein Prozentsatz, der nicht von dem abweichen kann, was er gewichtet: tools/readme-art.py berechnet ihn, und die Prüfungen schlagen fehl, wenn die Seite oder das README einen anderen nennt

Die Regeln, die jede Seite einhält

Regel warum
Wie gemessen wurde und was es nicht bedeutet, auf jeder Seite die Grenzen einer Zahl gehören zu ihr: ein Strom, der am eigenen Host eines Geräts endet, misst das Kleinste aus PC, Weiterleitung, Verbindung und Empfangspfad dieses Hosts - nicht die Obergrenze der Weiterleitung, die eine Maschine hinter dem fernen Gerät braucht
Der Build wird genannt - der Commit des Treibers oder seine Prüfsumme eine Zahl gehört zu dem Code, der sie erzeugt hat
Jedes Fenster wird fotografiert, wenn sein Lauf endet jeder kann den Lauf sehen, nicht eine Kopie seiner Zahlen; Laboradressen bleiben in den Bildern, Seriennummern und Hardware-Adressen werden unkenntlich gemacht
Was ein Host gelernt hat, wird vor jedem Lauf vergessen - sein TCP-Host-Cache und der Path-MTU-Cache des PCs eine in einem Lauf gelernte Path-MTU wurde in den nächsten mitgenommen: ein ganzer Durchgang lief mit 500-Byte-Segmenten und wurde verworfen
Was beim Messen schiefging, wird aufgeschrieben die Fehler - eine gelernte MTU, die verlorenen Frames von WSL - sind der Grund, warum eine Seite so gemessen hat, wie sie es tat, und die nächste Messung vermeidet sie
Eine zurückgezogene Zahl wird durchgestrichen, nicht gelöscht, die Korrektur daneben ein Leser sieht, was sich geändert hat und warum
Die Herstellerangaben werden als die des Herstellers gekennzeichnet, neben unseren sie stammen von Keysight-Ixia BreakingPoint unter idealen Bedingungen, ohne Angabe von MTU, Ports und ob beide Richtungen zählen: nicht dieselbe Art von Zahl wie eine hier gemessene

Wo die Zahlen stehen

Jede Messung, nach Gerät und nach Tag: die Messungen (Englisch).