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


Foto Jonas Sterr.jpg

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

Failed to fetch enterprise.proxmox.com 401 Unauthorized
Proxmox GUI alte Ceph Health Warnings entfernen
X12DPi-NT6 Proxmox VE 8 poweroff statt reboot