next up previous contents
Nächste Seite: Literatur Aufwärts: Linux Performance Tuning Vorherige Seite: ulimit   Inhalt

Network Tuning

Hier muss zuerst die Netzwerk Anbindung untersucht werden, die meistens durch einen nic (Network Interface Card) gebildet wird. Ein erster Schritt kann darin bestehen die Datendurchsatz Rate mit ftp zu bestimmen. Dazu muss die Datei eine anständige Grösse haben, die aber noch im Cache Platz hat. Man muss dann den Test mehrfach durchführen bis die Daten tatsächlich im Cache sind. In der Regel sollte man auf 90% oder mehr der theoretischen Netzwerkbandbreite kommen. Falls das nicht erreicht wird ist der Fehler zu suchen (nic, Treiber, Switch, Betriebssystem usw).
Bandwidth*Delay Product (BDP) Die Berechnung dieser Grösse ist speziell wichtig bei schnellen Netzwerken. Dabei geht man davon aus, dass die Grenzen einer Verbindung gegeben sind mit der langsamsten Verbindung im Pfads und der Round Trip Time (RTT). Die Round Trip Time kann mit dem Programm ping gemessen werden. Normalerweise hat eine normale TCP Verbindung eine maximale Puffergrösse von 64K Bytes. Falls das BDP einen grösseren Wert ergibt, so muss ein Tuning der Netzwerk Parameter vorgenommen werden. Beispiel für die Berechnung eines BDP: Wir betrachten einen Gigabit link mit einer RTT von 70ms:

$BDP = \frac{1'000'000'000}{1 second} * \frac{1 byte}{8 bits} *
\frac{70 seconds}{1000} = 8.75 MBytes$

In diesem Falle ist der normale maximale Puffer von 64KBytes eindeutig zu klein und würde den Durchsatz durch diese Leitung verkleinern.

High Performance Network Options
Generell gibt es im heutigen TCP Protokoll die nachstehenden Optimierungsmöglichkeiten:

TCP Selective Acknowledgements (SACK, RFC2018):
Mit SACKs ist es möglich dass der Receiver Daten ausserhalb der richtigen Reihenfolge quittieren kann. Das ist speziell bei Verbindungen mit einem grossen BDP wichtig.
Large Windows (RFC1323):
Ohne diese Erweiterung bleibt die nutzbare Puffergrösse auf 64KByte begrenzt.
Maximum Buffer Sizes on Host:
Normalerweise kann ein Host konfiguriert werden damit Puffer im Bereich von 128 KB und 1 MB verwendet werden kann.
Default Buffer Size:
Neben der maximalen Puffergrösse, verwenden die meisten Systeme eine default Puffergrösse. Falls eine Anwendung die Puffergrösse nicht speziell setzt, ist dies die Grösse des verwendeten Puffers.
Application Buffers:
Falls die Default Buffer size nicht gross genug ist so muss die Anwendung einen Puffer zur Verfügung stellen der so gross ist wie das BDP der Verbindung. Viele Programme sind in Versionen verfügbar mit grosser Puffergrösse.
Path MTU:
(MTU= Maximun Transmission Unit) Bei einer Verbindung sollte immer mit der grösstmöglichen MTU gearbeitet werden. Da verschiedene Netzwerkkomponenten bei einer Verbindung verwendet werden bestimmt die Komponente mit der kleinsten MTU die maximal verwendbare MTU. Die maximal mögliche MTU einer Verbindung wird als Path MTU bezeichnet. Dabei ist aber auf sog. MTU blackholes zu achten.

Tuning bei Linux 2.4
Es ist eine gute Praxis die nachstehenden Parameter zu setzen (siehe auch /usr/src/linux/Documentation/networking/ip-sysctl.txt):

/proc/sys/net/ipv4/tcp_timestamps
/proc/sys/net/ipv4/tcp_window_scaling
/proc/sys/net/ipv4/tcp_sack
Diese Werte werden wie folgt gesetzt:
echo 1 >/proc/sys/net/ipv4/tcp_timestamps
echo 1 >/proc/sys/net/ipv4/tcp_window_scaling
echo 1 >/proc/sys/net/ipv4/tcp_sack
Die Path MTU discovery kann gesetzt werden mit:
/proc/sys/net/ip_no_pmtu_disc
Die window Grössen können gesetzt werden mit:
/proc/sys/net/ipv4/rmem_default     # default receive window
/proc/sys/net/ipv4/rmem_max         # maximum receive window
/proc/sys/net/ipv4/wmem_default     # default send window
/proc/sys/net/ipv4/wmem_max         # maximum send window

/proc/sys/net/ipv4/tcp_rmem         # memory reserved for TCP rcv buffers
/proc/sys/net/ipv4/tcp_wmem         # memory reserved for TCP snd buffers
Die folgenden Werte sind vernünftig für eine Verbindung mit grossem BDP:
echo 8388608 >/proc/sys/net/ipv4/wmem_max
echo 8388608 >/proc/sys/net/ipv4/rmem_max       
echo 4096 87380 4194304 >/proc/sys/net/ipv4/tcp_rmem # min default max
echo 4096 87380 4194304 >/proc/sys/net/ipv4/tcp_wmem # min default max
Für das Tuning der Puffergrösse gibt es in Linux das Projekt Web100.


next up previous contents
Nächste Seite: Literatur Aufwärts: Linux Performance Tuning Vorherige Seite: ulimit   Inhalt
Hans-Peter Oser 2007-10-30