
Wir haben ein seltsames Problem mit einem Server in unserem Labor. Genauer gesagt zeigt der Server eine hohe CPU-Auslastung durch Prozesse mit niedriger Priorität (blaue Farbe in htop
), wobei 50 % der Kerne scheinbar eine Auslastung von 100 % aufweisen, wie im Screenshot unten zu sehen ist.
In der Liste der laufenden Prozesse gibt es jedoch keinen Prozess, der diese CPU verbraucht:
$ ps aux --sort pcpu | head -n 20
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 10:42 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 10:42 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 10:42 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 10:42 0:00 [kworker/u96:0]
root 8 0.0 0.0 0 0 ? S 10:42 0:00 [rcu_sched]
root 9 0.0 0.0 0 0 ? S 10:42 0:00 [rcu_bh]
root 10 0.0 0.0 0 0 ? S 10:42 0:00 [migration/0]
root 11 0.0 0.0 0 0 ? S 10:42 0:00 [watchdog/0]
root 12 0.0 0.0 0 0 ? S 10:42 0:00 [watchdog/1]
root 13 0.0 0.0 0 0 ? S 10:42 0:00 [migration/1]
root 14 0.0 0.0 0 0 ? S 10:42 0:00 [ksoftirqd/1]
root 16 0.0 0.0 0 0 ? S< 10:42 0:00 [kworker/1:0H]
root 17 0.0 0.0 0 0 ? S 10:42 0:00 [watchdog/2]
root 18 0.0 0.0 0 0 ? S 10:42 0:00 [migration/2]
root 19 0.0 0.0 0 0 ? S 10:42 0:00 [ksoftirqd/2]
root 21 0.0 0.0 0 0 ? S< 10:42 0:00 [kworker/2:0H]
root 22 0.0 0.0 0 0 ? S 10:42 0:00 [watchdog/3]
root 23 0.0 0.0 0 0 ? S 10:42 0:00 [migration/3]
root 24 0.0 0.0 0 0 ? S 10:42 0:00 [ksoftirqd/3]
Ursache des Problems:
Nach einigem Herumprobieren haben wir festgestellt, dass ifdown br0
die CPU-Auslastung nach 5-10 Sekunden auf den Normalwert abfällt, wenn wir die Bridge-Schnittstelle deaktivieren, die wir auf dem Server eingerichtet haben ( ). Wenn wir die Bridge wieder aktivieren, steigt die Auslastung wieder an, ähnlich wie im Bild oben.
Was wir versucht haben:
Wir haben versucht, libvirtd
den Dienst zu deaktivieren, falls dies ein Problem mit den VMs auf dem Server war, aber das hat nichts gebracht. Wir haben auch docker
und deaktiviert containerd
, aber auch das hat sich nichts geändert. Wir haben auch entfernt und auf dem Server neu installiert bridge-utils
und die Schnittstelle in br1 umbenannt, aber das Problem besteht immer noch. Zuletzt haben wir auch mit einer anderen Kernelversion gebootet, aber immer noch nichts.
Hatte jemand schon einmal ein ähnliches Problem?
Serverspezifikationen:
$ uname -a
Linux cheetara 4.4.0-174-generic #204-Ubuntu SMP Wed Jan 29 06:41:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.7 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.7 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
---- Bearbeiten Unser Server hat zwei Netzwerkschnittstellen p4p1
und p4p2
. Wir haben jeder Schnittstelle über den DHCP-Server eine statische IP zugewiesen (der Einfachheit halber sagen wir, sie sind 137.100.1.11
und 137.100.1.12
). Unsere /etc/network/interfaces
Datei sieht folgendermaßen aus:
auto lo
iface lo inet loopback
auto p4p1
iface p4p1 inet manual
auto br0
iface br0 inet static
address 137.100.1.11
broadcast 137.100.1.255
netmask 255.255.255.0
gateway 137.100.1.200
dns-nameservers 137.100.1.210 137.100.1.220 8.8.8.8 8.8.4.4
bridge_ports p4p1
auto ib0
iface ib0 inet static
address 10.1.0.2
netmask 255.255.255.0
auto ib1
iface ib1 inet static
address 10.0.0.2
netmask 255.255.255.0
wobei ib0
und ib1
Infiniband-Schnittstellen nicht mit externen Netzwerken verbunden sind.
Außerdem ist die Streckenführung wie folgt:
$ ip route show
default via 137.100.1.200 dev br0 onlink
10.0.0.0/24 dev ib1 proto kernel scope link src 10.0.0.2 linkdown
10.1.0.0/24 dev ib0 proto kernel scope link src 10.1.0.2 linkdown
147.102.37.0/24 dev br0 proto kernel scope link src 147.102.37.24
Antwort1
Bei höheren Geschwindigkeiten (in meinem Fall waren es 10 Gbit/s) funktioniert die NIC-Offload-Funktion nicht richtig. Daher übernimmt die CPU die ganze schwere Arbeit. Die Pakete werden vom Netzwerkstapel des Kernels verarbeitet.
Durch die Aktivierung von Jumbo-Frames (MAX. MTU-Größe) und die Erhöhung der Ringpuffergröße wurde die CPU-Belastung reduziert.
ip link set dev <interface> mtu <value>
ethtool -G <interface> rx <value> tx <value>
Wenn die NIC-Offload-Funktion verfügbar ist, sollte sie aktiviert werden.
ethtool --offload <interface> tx on rx on
Sie können auch andere hier aufgeführte Methoden zur Leistungsoptimierung verwenden. Quelle:https://sysadmin.miniconf.org/2016/lca2016-jamie_bainbridge-network_performance_tuning.html