Broadcom P2100G schlechte Netzwerk Performance innerhalb Docker

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

Im Testing eines Docker-Containers ist aufgefallen, dass die Netzwerkperformance innerhalb des Docker-Containers sehr langsam ist.

Es handelt sich hierbei um eine Anleitung zur Steigerung der Performance einer P2100G Broadcom Netzwerkkarte unter Linux - in unserem Fall Proxmox VE 8.2 mit Linux Kernel 6.8.

Netzwerk Performance (Default Settings)

root@js-docker-01:/home/ansible# docker run -ti --rm curlimages/curl http://10.230.2.231:32768/test.file --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  5 1024M    5 55.1M    0     0  1447k      0  0:12:04  0:00:39  0:11:25 1791k

Es wird eine Bandbreite von 1.8 MB/s erreicht, obwohl es sich hierbei um eine 100 Gbit/s Netzwerkkarte handelt. Bei anderen Broadcom Netzwerkkarten (10 Gbit/s oder 4x 25 Gbit/s) tritt dieses Problem nicht auf.

Konfigurations-Anpassung

Es kann eine Anpassung am Hypervisor vorgenommen werden, welche dieses Problem behebt und die Performance auf ein normales Level erhöht.

root@hypervisor01:/# ethtool --offload enp1s0f0np0 generic-receive-offload off
root@hypervisor01:/# ethtool --offload enp1s0f0np0 generic-receive-offload off

Deaktiviert man die beiden offloading-Features der Netzwerkkarte, erhöht sich die Performance innerhalb des Containers.

Netzwerk Performance (Fixed)

root@js-docker-01:/home/ansible# docker run -ti --rm curlimages/curl http://10.230.2.231:32768/test.file --output /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 41  9.7G   41 4199M    0     0   640M      0  0:00:15  0:00:06  0:00:09  660M

Persistente ethtool-Settings

Da ethtool-Anpassungen nicht persistent sind (also nicht reboot-fest), muss man eine Anpassung an der /etc/network/interface - Datei vornehmen. Hier ein Beispiel eines Bonds, bei dem die beiden betroffenen Ports mittels eine pre-ups' angepasst werden.

auto bond0
iface bond0 inet manual
        bond-slaves enp1s0f0np0 enp1s0f1np1
        bond-miimon 100
        bond-mode 802.3ad
        bond-xmit-hash-policy layer2+3
        mtu 9000
        pre-up /sbin/ethtool --offload enp1s0f0np0 generic-receive-offload off
        pre-up /sbin/ethtool --offload enp1s0f1np1 generic-receive-offload off
#CEPH-05


Autor: Jonas Sterr

Ich beschäftige mich mit den Themen Software Defined Storage, Proxmox Virtualisierung auf Basis von KVM, QEMU & Ceph im Produktmanagement der Thomas-Krenn.AG in Freyung. Proxmox ist meine absolute Leidenschaft und ich freue mich gerne über Kontaktanfragen und einen Austausch auf LinkedIn.


Das könnte Sie auch interessieren

No zvol device link - Proxmox VE Error bei Backup oder Snapshot
Proxmox Clock Skrew detected
X12DPi-NT6 Proxmox VE 8 poweroff statt reboot