Nächste Seite: Literatur
Aufwärts: Linux Performance Tuning
Vorherige Seite: ulimit
Inhalt
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:
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.
Nächste Seite: Literatur
Aufwärts: Linux Performance Tuning
Vorherige Seite: ulimit
Inhalt
Hans-Peter Oser
2007-10-30