Jeśli wybierasz się na drogę wysokiej wydajności, zazwyczaj będziesz chciał uruchomić jak najmniej innych (zaplanowanych) procesów, ponieważ mogą one zakłócać działanie Twojej aplikacji.
Linux, podobnie jak klasyczne systemy operacyjne UNIX, jest zaprojektowany do równoczesnego uruchamiania wielu aplikacji w sposób równomierny i stara się zapobiegać głodowaniu zasobów, a ty dążysz do czegoś przeciwnego, głodzisz wszystko inne oprócz aplikacji. Proste kroki na poziomie systemu operacyjnego to zmiana ładnego poziomu i priorytetu aplikacji w czasie rzeczywistym, zmiana harmonogramu lub wybranie jądra w czasie rzeczywistym .
Protokół TCP / IP jest zazwyczaj dostrojony, aby zapobiegać zrywaniu połączeń i efektywnie wykorzystywać dostępną przepustowość. Aby uzyskać jak najkrótsze opóźnienie z bardzo szybkiego łącza, zamiast uzyskać najwyższą możliwą przepustowość z połączenia, w którym niektóre łącza pośrednie są bardziej ograniczone, dostosujesz dostrojenie stosu sieciowego.
sysctl -a
pokaże ci wiele ustawień jądra, które możesz dostroić. Ustawienia zależą od tego, czy korzystasz z IPv4 czy IPv6, i od tego, co dokładnie robisz w aplikacji, ale może Cię zainteresować:
net.ipv4.tcp_window_scaling=1
RFC 1323 - obsługa rozmiarów okien IPV4 TCP większych niż 64 KB - generalnie potrzebne w sieciach o dużej przepustowości
net.ipv4.tcp_reordering=3
Maksymalny czas, w którym pakiet IPV4 może zostać ponownie uporządkowany w strumieniu pakietów TCP, bez zakładania utraty pakietów i powolnego startu.
net.ipv4.tcp_low_latency=1
przeznaczony do preferowania niskiego opóźnienia w stosunku do wyższej przepustowości; ustawienie = 1 wyłącza przetwarzanie wstępnej kolejki IPV4 tcp
net.ipv4.tcp_sack=0
ustawienie na 1 włącza selektywne potwierdzanie dla IPV4, co wymaga włączenia tcp_timestamps i dodaje pewien narzut pakietów, który nie jest potrzebny, jeśli nie występuje utrata pakietów
net.ipv4.tcp_timestamps=0
Zalecane tylko w przypadkach, gdy potrzebny jest worek.
net.ipv4.tcp_fastopen=1
Włącz wysyłanie danych w otwierającym pakiecie SYN.
Większość, jeśli nie wszystkie, są lepiej udokumentowane w źródle jądra .
Możesz oczywiście kodować nieprzetworzone gniazda TCP i w dużej mierze omijać stos TCP / IP jądra.
Często dobrze dostrojone systemy działają w zaufanej sieci i mają wyłączone lokalne zapory ogniowe (iptables).