Interface Geschwindigkeit für mehrere Netzwerkkarten mit ethtool ermitteln
Wer unter Linux an einem Server die maximale Geschwindigkeit zwischen dem Netzwerkanschluss des Servers (engl. NIC – Network Interface Card) und dem Switch bestimmen möchte, der nutzt dafür in der Regel das Linux Programm ethtool.
Das ist für einen Host mit genau einem Netzwerk-Interface, der vielleicht sogar noch eth0 heißt, recht einfach:
root@ myhost01:~# ethtool eth0 Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: Symmetric Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: Symmetric Advertised auto-negotiation: Yes Speed: 1000Mb/s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: on MDI-X: on (auto) Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000007 (7) drv probe link
Hier im Beispiel ist der Netzwerkanschluss eth0 mit 1.000 Mbit/s angeschlossen.
Wer nun aber mehrere, vielleicht sogar sehr viele Netzwerk-Interfaces am Rechner hat, muss nun aufwändig zuerst mit ifconfig die verfügbaren Interfaces abfragen und anschließend mit den ermittelten Interface-Name das Programm ethtool aufrufen und jeweils den Interfacenamen als Argument für ethtool verwenden. Das geht dann so:
root@myhost01:~# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether a0:36:9f:96:57:28 txqueuelen 1000 (Ethernet) RX packets 1475347405 bytes 1520661780885 (1.3 TiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1165040539 bytes 990260588161 (922.2 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
… und anschließend wieder
root@ myhost01:~# ethtool eth0
Wir wollen nun aber auf einen Schlag alle Netzwerk-Interface-Namen abfragen und von allen dann genau einen Parameter mit ethtool ermitteln: Die Interface-Geschwindigkeit. Das machen wir mit folgendem Quick-Hack: Mit netstat –i ermitteln wir in einer tabellarischen Ansicht alle Netzwerk-Interfaces.
Wer netstat noch nicht auf dem Rechner hat, der installiert es sich
yum –y install net-tools # bzw. apt-get install net-tools
Anschließend rufen wir „netstat -i“ auf:
root@myhost01:~# netstat -i Kernel Interface table Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eno1 1500 205773311 0 9362 0 148576841 0 0 0 BMRU eno2 1500 36240434 0 9361 0 67162274 0 0 0 BMRU ens1f0 1500 1736700782 0 428 0 2851571184 0 0 0 BMRU ens1f1 1500 1208878992 0 198134 0 292946595 0 0 0 BMRU (…)
Hier im Beispiel haben wir also 4 Karten, namens eno1, eno2, ens1f0 und ens1f1. Wir brauchen für unsere Ausgabe aber nur die erste Spalte. Daher reicht uns:
root@myhost01:~# netstat -i | cut -f1 -d" " | tail -n+3 eno1 eno2 ens1f0 ens1f1
Diese Interface-Namen wollen wir nun in einem Ein-Zeiler an das Programm ethtool übergeben und anschließend nur die Zeile für die Geschwindigkeit angeben:
for i in $(netstat -i | cut -f1 -d" " | tail -n+3);do echo "$i: $(ethtool "$i" | grep Speed | sed 's/Speed://g')" ; done
Im Beispiel:
root@ myhost01:~# for i in $(netstat -i | cut -f1 -d" " | tail -n+3);do echo "$i: $(ethtool "$i" | grep Speed | sed 's/Speed://g')" ; done eno1: 1000Mb/s eno2: 1000Mb/s ens1f0: 40000Mb/s ens1f1: 40000Mb/s
Das bedeutet: Die beiden Interfaces eno1 und eno2 sind mit 1Gbit/s an einen Switch angeschlossen. Das dritte und vierte Interface ens1f0 und ens1f1 sind mit 40Gbit/s verkabelt.
- Über den Autor
- Aktuelle Beiträge
Matthias Böhmichen ist der Gründer der Website howto-do.it . Linux nutzt er seit 1991 um kurz danach Windows zu entdecken. Er entdeckt gerne neue Technologien und verbringt seine Zeit damit, sie für Kunden nutzbar zu machen. Im Hauptberuf ist er CEO der Biteno GmbH