Wenn Sie sich auf dem Weg zu hoher Leistung befinden, sollten Sie in der Regel so wenige andere (geplante) Prozesse wie möglich ausführen, da diese Ihre Anwendung beeinträchtigen.
Linux ist wie die klassischen UNIX-Betriebssysteme so konzipiert, dass mehrere Anwendungen auf faire Weise gleichzeitig ausgeführt werden. Es versucht, Ressourcenmangel zu vermeiden, und Sie streben das Gegenteil an. Verhungern Sie alles andere außer Ihrer Anwendung. Einfache Schritte auf Betriebssystemebene sind das Ändern der netten Ebene und der Echtzeitpriorität Ihrer Anwendung, das Ändern des Schedulers oder die Verwendung eines Echtzeitkerns .
TCP / IP wird normalerweise optimiert, um Verbindungsabbrüche zu vermeiden und die verfügbare Bandbreite effizient zu nutzen. Um die geringstmögliche Latenz einer sehr schnellen Verbindung zu erzielen, anstatt die höchstmögliche Bandbreite einer Verbindung zu erzielen, bei der einige Zwischenverbindungen eingeschränkter sind, müssen Sie die Optimierung des Netzwerkstapels anpassen.
sysctl -a
zeigt Ihnen eine Vielzahl von Kernel-Einstellungen, die Sie optimieren können. Die Einstellungen hängen davon ab, ob Sie IPv4 oder IPv6 verwenden oder nicht und was genau Sie bereits in Ihrer Anwendung tun, aber von Interesse sein können:
net.ipv4.tcp_window_scaling=1
RFC 1323 - Unterstützung für IPV4-TCP-Fenstergrößen größer als 64 KB - wird im Allgemeinen in Netzwerken mit hoher Bandbreite benötigt
net.ipv4.tcp_reordering=3
Die maximale Häufigkeit, mit der ein IPV4-Paket in einem TCP-Paketstrom neu angeordnet werden kann, ohne dass TCP einen Paketverlust annimmt und langsam startet.
net.ipv4.tcp_low_latency=1
beabsichtigt, eine niedrige Latenz gegenüber einem höheren Durchsatz zu bevorzugen; Einstellung = 1 deaktiviert die IPV4-TCP-Prequeue-Verarbeitung
net.ipv4.tcp_sack=0
Die Einstellung 1 aktiviert die selektive Bestätigung für IPV4, wodurch tcp_timestamps aktiviert und ein gewisser Paket-Overhead hinzugefügt werden muss, den Sie nicht benötigen, wenn kein Paketverlust auftritt
net.ipv4.tcp_timestamps=0
Nur empfohlen, wenn ein Sack benötigt wird.
net.ipv4.tcp_fastopen=1
Aktivieren Sie diese Option, um Daten im öffnenden SYN-Paket zu senden.
Die meisten, wenn nicht alle, sind in der Kernelquelle besser dokumentiert .
Sie können natürlich rohe TCP-Sockets codieren und den Kernel-TCP / IP-Stack weitgehend umgehen.
Oft laufen hochgradig abgestimmte Systeme in einem vertrauenswürdigen Netzwerk und haben ihre lokalen (iptables) Firewalls deaktiviert.