"low latency" Server - optimales Setting?

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

"low latency" Server - optimales Setting?

Beitrag von mistersixt » 08.07.2009 12:45:26

Moin moin,

ich habe eine Software auf einem Linux-Server laufen, die auf einer Netzwerkkarte ankommende Multicast-Datagramme einliest, diese analysiert und bei bestimmtem Inhalt auf einer bestehenenden TCP-Verbindung eine Aktion ausführt. Die Software besteht aus 3 Komponenten (3 Prozesse), die untereinander per Unix-Domainsocket kommuniziert. Die ankommenden Datagramme und die Aktion per TCP-Verbindung haben ein geringes Volumen, es geht hierbei also um die "low latency", nicht um "high volume". Der Server hat 16 CPUs (4 x Xeon Nehalems QuadCores) und die Netzwerkkarten sind 10 Gigabit Karten von Chelsio. Es ist Debian Lenny mit 2.6.26 installiert.

Nun habe ich mir bereits ff. Kernel-Parameter angeschaut, mit denen man "herumexperimentieren" kann:

tcp_sack - BOOLEAN
tcp_low_latency - BOOLEAN
tcp_timestamps - BOOLEAN
ipv4.tcp_rmem
ipv4.tcp_wmem

Ferner könnte die Interrupt-Vergabe eine Rolle spielen, aktuell laufen alle Interrupts über CPU 0. "irqbalance" scheint hier Abhilfe zu schaffen, aber Chelsio selbst rät davon ab, weil:

Code: Alles auswählen

On a system with multiple CPUs, the interrupt (IRQ) for the network
      controller may be bound to more than one CPU. This will cause TCP
      retransmits if the packet data were to be split across different CPUs
      and re-assembled in a different order than expected.
Sollte man evtl. versuchen, per Hand die Interrupts auf die CPUs zu verteilen?

Die nächsten interessanten Baustellen sind anscheinend die "Coalesce Parameters" der Netzwerkkarte bzw. des Treibers, hat Jemand Erfahrungswerte beim "rx-usecs" (ethtool -c <device>) ?

Bleibt evtl. noch die Frage, ob die 3 Prozesse (s.o.) an einzelnen CPUs "gebunden" werden sollten, so dass sie beim Wechsel vom State "S" zum "R" (Running) nicht jedes Mal auf einer anderen CPU landen (siehe dazu auch diesen Thread).

Für Ideen und Vorschläge wäre ich sehr dankbar,

Gruss, mistersixt.
--
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE

Benutzeravatar
Saxman
Beiträge: 4233
Registriert: 02.05.2005 21:53:52
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: localhost

Re: "low latency" Server - optimales Setting?

Beitrag von Saxman » 09.07.2009 07:42:07

Wenn es dir um TCP/IP geht finde Ich das hier sehr interessant.
Für einen Low Latency Desktop ist hier eine kleine Übersicht.

Ich weiß das ist nicht ganz dein thema aber vielleicht ist der ein oder andere Hinweis dabei.
Ich hab mit den von dir genannten TCP/IP Werten aus anderen Gründen rumgespielt.
Was auch interessant sein könnte wäre ein Router der Bestimmte Pakete, Ports oder Hosts priorisiert (Also Quasi Quota kann).
Ich nutze für sowas dd-wrt um auch bei großen und vielen up und downloads noch Musikstreams ohne Ruckler hören zu können.
Das war bei mir der Antrieb da rumzuschrauben ;)

Ach und wenn du mit rmem und wmem rumspielst musst du das window scaling abschalten.

Code: Alles auswählen

net.ipv4.tcp_window_scaling=0
"Unix is simple. It just takes a genius to understand its simplicity." - Dennis Ritchie

Debian GNU/Linux Anwenderhandbuch | df.de Verhaltensregeln | Anleitungen zum Review und zum Verfassen von Wiki Artikeln.

Antworten