Rootserver Netzwerkauslastung

Niggo

New Member
Hallo,

ich habe folgendes Problem.

Ich verwende aktuell für ein Minecraft Projekt einen Minecraft Bungeecord Proxy auf Desktop Hardware mir folgenden Spezifikationen:

I7-3770k
32 GB
Intel Pro Nic

Seit dem letzten Update dieser Proxys wurde die CPU Performance enorm verbessert sodass wir nun mehrere Proxys auf einen Server bekommen, jetzt setzt uns aber meiner Meinung nach die Desktop Hardware Grenzen.

Aktuell sieht es im durchschnitt so aus:
eth1: 164.38 Mb/s In 183.21 Mb/s Out - 175036.0 p/s In 183699.0 p/s Out

Sobald wir aber über 450 Mbits kommen brechen die Systeme ein, jedoch nicht aufgrund zu hoher CPU Last. Festplatten kann ebenfalls ausgeschlossen werden.
Es scheint als würde der Kernel aufgrund der vielen Pakete versagen.

SFTP ist dann kaum bis gar nicht möglich und das System fängt zu laggen an.

Verschiedene Vorschläge waren jetzt:

1. Serverhardware, Xenon, Supermicro Intel Onboard, soll wohl weitaus performanter sein
2. Intel Netzwerkarte mit Hardwarebeschleunigung (wurde mir empfohlen)

Kann jemand mit Erfahrungen und hohen Bandbreiten hier weiterhelfen?
Über jeden Tipp bin ich dankbar,

Grüße
Niggo
 
Verschiedene Vorschläge waren jetzt:

1. Serverhardware, Xenon, Supermicro Intel Onboard, soll wohl weitaus performanter sein
2. Intel Netzwerkarte mit Hardwarebeschleunigung (wurde mir empfohlen)

Kann jemand mit Erfahrungen und hohen Bandbreiten hier weiterhelfen?
Über jeden Tipp bin ich dankbar,

1. Wie verhält sich das System seitens der Interrupts?

2. Ist nf_conntrack aktiv? Wenn ja, ausmachen, das ist ein enormer Performancekiller, gerade bei viel Inbound Traffic -> rmmod nf_conntrack bzw. entsprechende iptables regeln rauswerfen.

3. Bei der Menge an Paketen macht durchaus eine etwas professionellere Intel NIC Sinn. Wir haben einen Kunden welcher bei uns Ähnliches betreibt - Minecraft Server mit rund 900Mbit Peak, verteilt auf aktuell 8 Systeme - dort haben die Bungeecord Nodes jeweils 10G Solarflare Karten mit 10G Port rate limited auf 1G, um im Extremfall mehrere 100kpps zu erreichen. Selbst mit einer guten Intel NIC ist irgendwann Schluss und die Verarbeitung geht zwangsweise mehr und mehr auf die CPU.

4. Muss dein System hauptsächlich kleine oder große Pakete verarbeiten? Bei kleinen Paketen würde ich jedenfalls zu Solarflare greifen, Intel ist für hohe Bandbreiten in Kombination mit vielen kleinen Paketen jedenfalls totaler crap.
 
1. Wie verhält sich das System seitens der Interrupts?

System fängt zu laggen an und SFTP ist teilweise nicht mehr erreichbar.
Habe es heute mit 2 Netzwerkkarten getestet, leider auch keine Abhilfe.
Dachte ich teile die Last auf 2 Karten auf, hier scheint mir aber wieder die Software grenzen zu setzen.

2. Ist nf_conntrack aktiv? Wenn ja, ausmachen, das ist ein enormer Performancekiller, gerade bei viel Inbound Traffic -> rmmod nf_conntrack bzw. entsprechende iptables regeln rauswerfen.

Denke ja das es aktiv ist, wie genau lässt sich das herausfinden und deaktivieren? Google gibt mir da keine genaue Antwort.


4. Muss dein System hauptsächlich kleine oder große Pakete verarbeiten? Bei kleinen Paketen würde ich jedenfalls zu Solarflare greifen, Intel ist für hohe Bandbreiten in Kombination mit vielen kleinen Paketen jedenfalls totaler crap.

Denke die meisten Pakete sind klein.

Danke,

Lg
 
System fängt zu laggen an und SFTP ist teilweise nicht mehr erreichbar.
Habe es heute mit 2 Netzwerkkarten getestet, leider auch keine Abhilfe.
Dachte ich teile die Last auf 2 Karten auf, hier scheint mir aber wieder die Software grenzen zu setzen.

Und, wie viele Interrupts hast du dann?

Denke die meisten Pakete sind klein.

Mit tcpdump sniffen, dann mal nen traffic sample hier posten, Source und Destination IPs kannst du ja maskieren.
 
Unterstützt die NIC mehrere Interrupt-Queues? Du kannst das überprüfen indem du cat /proc/interrupts ausführst und abzählst ob dort mehrere oder nur ein Eintrag ähnlich lautend "PCI-MSI-edge" vorkommt. Falls ja, kannst du jede einzelne Interrupt-Queue auf einen eigenen CPU-Kern aufteilen:

Code:
#!/bin/bash

suffix=
prefix=1
cpumax=$(cat /proc/cpuinfo | grep ^processor | wc -l)
cpunum=0

irqs=$(cat /proc/interrupts | fgrep "PCI-MSI-edge" | sed -r 's/^\s+([0-9]+):.*/\1/')
if [ "x$1" == "ht" ]; then
        irqs=$(echo "$irqs" | awk '{print $1"\n-"}')
fi

for irq in $irqs; do
        cpunum=$(($cpunum+1))
        echo $irq $prefix$suffix
        case $prefix in
                1)
                        prefix=2
                ;;
                2)
                        prefix=4
                ;;
                4)
                        prefix=8
                ;;
                8)
                        prefix=1
                        suffix=${suffix}0
                ;;
        esac
        if [ "$cpumax" == "$cpunum" ]; then
                cpunum=0
                suffix=
                prefix=1
        fi
done
Das Script kannst du irgendwo am Server abspeichern und ruhig aufrufen, da das Script selbst keine Veränderungen vornimmt, sondern nur Infos ausgibt welche Queues auf welchen Kern verschoben wird. Um die Änderungen wirksam zu machen kannst du die Ausgabe des Scripts an | awk '{print "echo "$2" > /proc/irq/"$1"/smp_affinity"}' | bash -x pipen, dann werden alle Queues die "PCI-MSI-edge" im Namen haben auf die verfügbaren CPU-Kerne aufgeteilt. Sollte bei dir Hyper-Threading aktiviert sein, empfehle ich dir das zu deaktivieren oder zumindest "ht" als Parameter an das Script mit anzugeben.

Alternativ kannst du irqbalance benutzen, wovon ich dir llerdings nur abraten kann, da es sehr dazu neigt mal eben einfach alle Queues auf eine CPU zu schmeißen und somit das System komplett in die Knie zwingt oder einfach mal alle paar Sekunden alle Queues abändert und somit eine hohe Migrations-Last auf den CPU-Kernen erzeugt was dir bei Netzwerk-Anwendungen überhaupt nicht gut kommt.

Tipp:
Du kannst htop benutzen und so konfigurieren dass es dir die Auslastung der CPUs Farbweise so anzeigt, dass du Interrupts sehr einfach erkennst.

Das sieht dann in etwa so aus: Siehe Anhang.

Hier kannst du erkennen dass auf den Cores 8+10+11+12 im Moment ein wenig Netzwerk-Last verarbeitet wird und auf den restlichen "nur" andere System-Last verarbeitet wird.



@Mods: Das Anhang System Dingens hat meinen Anhang nicht akzeptiert:

MOD: Korrigiert.
 

Attachments

  • 2015-11-17-06-56-40-Y4cnP2rK.png
    2015-11-17-06-56-40-Y4cnP2rK.png
    18.8 KB · Views: 95
Last edited by a moderator:
Back
Top