Řešení 1:
Upřímně řečeno, Ubuntu bych k tomu nepoužíval... ale existují možnosti, které lze použít na jakoukoli variantu Linuxu.
Budete chtít zvýšit vyrovnávací paměti zásobníku sítě:
net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
Pokud aplikace zapisuje na disk, možná bude nutná změna plánovače/výtahu (např. deadline
výtah).
Na úrovni serveru můžete upravit regulátor CPU a správu napájení a frekvence CPU (P-States, C-States).
Na úrovni operačního systému můžete změnit prioritu aplikace v reálném čase (chrt
), optimalizace pro snížení počtu přerušení, připojení k CPU nebo skupině CPU (taskset
) a zastavení všech nepotřebných služeb nebo démonů.
Můžete také vidět několik návrhů na:Jak řešit problémy s latencí mezi 2 linuxovými hostiteli
Je obtížné být konkrétnější, aniž bychom znali příslušný hardware nebo síťové vybavení.
Řešení 2:
Pokud se vydáte cestou vysokého výkonu, obvykle budete chtít spouštět co nejméně dalších (plánovaných) procesů, protože budou narušovat vaši aplikaci.
Linux, stejně jako klasické operační systémy UNIX, je navržen tak, aby spouštěl více aplikací současně spravedlivým způsobem a snaží se zabránit vyčerpání zdrojů a vy budete mířit na opak, vyhladovět vše ostatní kromě vaší aplikace. Jednoduchými kroky na úrovni operačního systému je změna příjemné úrovně a priority vaší aplikace v reálném čase, změna plánovače nebo přechod na jádro v reálném čase.
Protokol TCP/IP je obvykle vyladěn tak, aby zabránil výpadkům připojení a efektivně využíval dostupnou šířku pásma. Chcete-li získat co nejnižší latenci z velmi rychlého spojení, spíše než získat nejvyšší možnou šířku pásma ze spojení, kde jsou některé mezilehlé linky více omezeny, upravíte vyladění síťového zásobníku.
sysctl -a
vám ukáže řadu nastavení jader, která můžete vyladit. Nastavení závisí na tom, zda používáte IPv4 nebo IPv6 a co přesně ve své aplikaci děláte, ale může vás zajímat:
net.ipv4.tcp_window_scaling=1
RFC 1323 – podpora pro IPV4 TCPwindow velikosti větší než 64 kB – obecně potřeba v sítích s velkou šířkou pásmanet.ipv4.tcp_reordering=3
Maximální doba, po kterou lze paket IPV4 přeuspořádat v streamu paketů TCP, aniž by TCP předpokládal ztrátu paketu a pomalý start.net.ipv4.tcp_low_latency=1
zamýšleno upřednostňovat nízkou latenci před vyšší propustností; nastavení =1zakáže zpracování předběžné fronty protokolu TCP/IPnet.ipv4.tcp_sack=0
nastavení na 1 povoluje selektivní potvrzování pro IPV4, což vyžaduje enabletcp_timestamps a přidává určitou režii paketů, kterou nepotřebujete, pokud nemáte ztrátu paketůnet.ipv4.tcp_timestamps=0
Doporučuje se pouze v případech, kdy je potřeba pytlík.net.ipv4.tcp_fastopen=1
Povolit odesílání dat v úvodním paketu SYN.
Většina, pokud ne všechny, jsou lépe zdokumentovány ve zdrojovém kódu jádra.
Můžete samozřejmě kódovat nezpracované TCP sokety a do značné míry obejít zásobník TCP/IP jádra.
Vysoce vyladěné systémy často běží v důvěryhodné síti a jejich lokální (iptables) firewally budou deaktivovány.