Iperf ist ein Tool zur Messung und Optimierung der Netzwerkleistung.
Die iperf-Anwendung ist ein plattformübergreifendes Programm, das Standard-Netzwerkleistungsmetriken bereitstellen kann. Iperf besteht aus einem Client und einem Server, die einen Datenstrom generieren können, um den Durchsatz zwischen zwei Endpunkten in eine oder beide Richtungen zu bewerten.
Eine typische iperf-Ausgabe enthält einen gestempelten Zeitbericht über die Menge der transportierten Daten und den gemessenen Durchsatz.
Iperf2
Iperf2 ist ein Tool für Netzwerkdurchsatz und reaktionsschnelle Messung, das TCP und UDP unterstützt. Eines seiner Ziele ist es, die iperf-Codebasis auf verschiedenen Plattformen und Betriebssystemen funktionsfähig zu halten.
Es handelt sich um eine Multithread-Architektur, die proportional zur Anzahl der CPUs oder Kerne in einem System wächst, mit denen die Netzwerkleistung mithilfe von Strategien mit hoher und geringer Auswirkung erzielt und gemeldet werden kann.
Weitere interessante Artikel
Eigenschaften von Iperf2
- Unterstützt kleinere Berichtsintervalle (100 us oder mehr, konfigurieren Sie –enable-fast Sampling für hochpräzise Intervallzeitausgabe)
- Unterstützt SO_RCVTIMEOUT für Berichtsserver, unabhängig davon, ob kein Paket vorhanden ist
- Unterstützen Sie SO_SNDTIMEO beim Senden, damit Socket-Schreibvorgänge nicht über -t oder -i hinaus blockiert werden
- Unterstützt SO_TIMESTAMP für Paketzeitstempel auf Kernel-Ebene
- Unterstützt End-/End-Latenz im UDP-Format (mean/min/max/stdev) (-e erforderlich) (vorausgesetzt, Client- und Server-Uhren sind synchronisiert, z. B. mit Precision Time Protocol zu OCXO pro Spectracom-Oszillator)
- Unterstützt begrenzte Flüsse auf TCP-Ebene (über -b) unter Verwendung eines vereinfachten Token-Buckets
- Unterstützt Pakete pro Sekunde (UDP) über pps als Einheiten (z. B. -b 1000pps)
- PPS in Client- und Serverberichten (UDP) anzeigen (-e erforderlich)
- Unterstützt Echtzeit-Scheduler als Befehlszeilenoptionen (–real-time oder -z, vorausgesetzt, die richtigen Benutzerrechte vorausgesetzt)
- Anzeige der Zielschleifenzeit im Initial Client Header (UDP)
- Fügen Sie lokale Unterstützung von IPv6-Links hinzu (z. B. IPERF -C Fe80::D03A:D127:75D2:4112%ENO1)
- UDP ipv6-Nutzlast ist standardmäßig 1450 Byte pro Ethernet-Frame pro Nutzlast
- Unterstützt isochronen Datenverkehr (über –isochron) und Frame-Burst mit variabler Bitrate (vbr) und Frame-ID
- SSM-Multicast-Unterstützung für v4 und v6 verwendet -H oder -ssm-host, dh. iperf -s -B ff1e::1 -u -V -H fc00::4
- Latenzhistogramme für Pakete und Frames (z.B. –udp-histogram=10u.200000, 0.03, 99.97)
- Die Unterstützung für die zeitgesteuerte Zustellung beginnt per –txstart-time <unix.epoch time>
- Unterstützung für Clients, die die Ziel-IP mit -P über –incr-dstip erhöhen
- Unterstützung für die Variation der Last wird unter Verwendung der Normalverteilung der Protokolle um den Mittelwert und die Standardabweichung (pro -b <Mittelwert>,<stdev>) angeboten.
- Ehre -T (ttl) für Unicast und Multicast
- UDP verwendet eine 64-Bit-Sequenznummer (obwohl es immer noch mit 2.0.5 arbeitet, das eine Sequenznummer von 32b verwendet).
Von Iperf2 unterstützte Betriebssysteme
- Linux, Windows 10, Windows 7, Windows XP, macOS, Android und einige OS-Set-Top-Boxen.
Iperf2 herunterladen
Iperf3
Die Iperf3-Anwendung ist eine Neuschreibung von iperf von Grund auf, um eine kleinere und einfachere Codebasis zu erstellen.
iPerf3 ist ein Tool zur Messung der maximal möglichen Bandbreite in einem IP-Netzwerk in Echtzeit. Es ermöglicht die Feinabstimmung verschiedener Timings, Puffer und Protokolle (TCP, UDP, SCTP mit IPv4 und IPv6). Und es wird auch Berichte über Bandbreite, Verluste und andere Metriken für jeden Test liefern.
Eigenschaften von Iperf3
- TCP und SCTP (Bandbreite messen, MSS/MTU-Größe und beobachtete Lesegröße melden, Unterstützung für TCP-Fenstergröße über Socket-Puffer).
- UDP (Client kann UDP-Fluss aus der angegebenen Bandbreite erstellen, Paketverlust messen, Verzögerungsjitter messen, Multicast fähig)
- Sowohl der Client als auch der Server können mehrere gleichzeitige Verbindungen haben (Option -P).
- Der Server verarbeitet mehrere Verbindungen, anstatt nach einem einzigen Test zu stoppen.
- Kann für eine bestimmte Zeit ausgeführt werden (Option -t) und nicht für eine beliebige Datenmenge (Option -n oder -k).
- Regelmäßiges Drucken, mittlere Bandbreite, Jitter und Verlustberichte in bestimmten Intervallen (Option-i).
- Ausführen des Servers als Daemon (Option -D)
- Verwenden Sie repräsentative Flows, um zu testen, wie sich die Komprimierung der Verbindungsschicht auf die erreichbare Bandbreite auswirkt (Option -F).
- Ein Server empfängt einen Client gleichzeitig (iPerf3) und mehrere Clients gleichzeitig (iPerf2)
- Ignorieren Sie TCP slow-start (Option -O).
- Legen Sie die Zielbandbreite für UDP und (neu) TCP fest (Option -b).
- IPv6-Flussbezeichnung festlegen (Option -L)
- Festlegen des Engpasskontrollalgorithmus (-option -C)
- Verwenden Sie SCTP anstelle von TCP (Option –sctp )
- Die Ausgabe erfolgt im JSON-Format (Option -J).
- Datenträgerlesetest (Server: iperf3 -s / Client: iperf3 -c testhost -i1 -F Dateiname)
- Schreibtest auf der Festplatte (Server: iperf3 -s -F Dateiname / Client: iperf3 -c testhost -i1)
Von Iperf3 unterstützte Betriebssysteme
- Windows, Linux, Android, macOS X, FreeBSD, OpenBSD, NetBSD, VxWorks, Solaris
Iperf3 herunterladen
Iperf2 gegen Iperf3
Befähigt | Iperf 2 | Iperf 3 |
Traffic-Typen | ||
TCP-Datenverkehr | Y | Y |
UDP-Datenverkehr | Y | Y |
SCTP-Datenverkehr | N | Y |
IPv4 | Y | Y |
IPv6 | Y | Y |
Multicast-Datenverkehr (einschließlich SSM) | Y | N |
Nur TCP-Verbindung | Y | N |
Layer-2-Prüfungen | Y | N |
Ausgabeoptionen | ||
Menschliches Format | Y | Y |
JSON-Ausgabe | N | Y |
CSV (nur Basis) | Y | N |
IP-Adressen in der Ausgabe ausblenden (nur v4) | Y | N |
Clientseitige Serverberichte | N | Y |
Verkehrsprofile | ||
Faire Begrenzung der Warteschlangenrate | Y | Y |
Begrenzung der Schreibrate | Y | Y |
Begrenzung der Leserate (TCP) | Y | N |
Platzt | Y | Y |
Isochron (Video) TCP/UDP | Y | N |
Die Rollen vertauschen | Y | Y |
Bidirektionaler Verkehr | Y | Y |
Vollduplex gleicher Sockel | Y | N |
TCP-Bounceback mit optionaler Arbeitslast(en) | Y | N |
Datenverkehr mit geringer Auslastung und serverseitigen Statistiken | Y | N |
TCP_NOTSENT_LOWAT mit select() (mit der Option –tcp-write-prefetch) | Y | N |
TCP-nahe Überlastung (experimentell) | Y | N |
Metrik | ||
Durchsatz | Y | Y |
Reaktionsfähigkeit pro Sekunde (RPS) | Y | N |
UDP-Pakete (gesamt/verloren) | Y | Y |
UDP-Jitter | Y | Y |
Paketlatenzen UDP | Y | N |
TCP/UDP-Frame- /Burst-Latenzen | Y | N |
Write-to-Read-Latenzen TCP | Y | N |
Netzwerkleistung (Latenz/Durchsatz) | Y | N |
InP – Bytes in Warteschlangen (Littlesches Gesetz) | Y | N |
TCP CWND | Y | N |
TCP-Wiederholungsversuche | Y | Y |
TCP RTT | Y | Y |
Histogramme der Schreibverzögerung senden | Y | N |
UDP-Pakete pro Sekunde | Y | N |
Latenz-Histogramme | Y | N |
TCP-Verbindungszeiten | Y | N |
TCP-Antwort pro Intervall | Y | N |
Ausgabe nur summieren | Y | N |
Andere | ||
Multi-Threaded-Design | Y | N |
Parallel-P-Technik | Fäden | Abläufe |
Echtzeit-Planung | Y | N |
-t-Unterstützung für Server | Y | N |
Unterstützung virtueller TAP-Schnittstellen (nur empfangen) über –tap-dev | Y | N |
CPU-Affinität | N | Y |
Null Kopie | N | Y |
IPv6-Flussetiketten | N | Y |
–omit Option (überspringen Sie die ersten Samples pro Mal in Sekunden) | N | Y |
Incr dst ip-Option mit -P | Y | N |
Incr dst ip-Option mit -P | Y | N |
Incr dst-Port-Option mit -P | Y | N |
Incr src-Port-Option mit -P | Y | N |
Geräte- oder Schnittstellenbindung | Y | Y |
Quellportbindung | Y | N |
Geplante tx-Startzeit | Y | N |
Verzögern Sie die Startzeit von tx | Y | N |
Benutzerkennwort | N | Y |
Schlüssel zulassen | Y (nur TCP) | N |
Zustandsloses UDP | Y | N |
Python-Framework (asyncio) | Y (Ströme) | N |
Testen von WLAN über 100G | Y | N/a |
Skalierung auf 1000+ Threads | Y | N/a |