GNU/Linux >> Znalost Linux >  >> Linux

Nastavení TCP s nízkou latencí na Ubuntu

Ř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ásma
  • net.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/IP
  • net.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.


Linux
  1. Nemohu otevřít nastavení systému v Ubuntu 17.10?

  2. Nastavení se neotevře na Ubuntu 19.10?

  3. Nastavení ASP.NET na Plesk (Windows)

  1. Sériová komunikace s nízkou latencí na Linuxu

  2. Spuštění samostatné aplikace ASP.NET Core na Ubuntu

  3. Vysoce výkonné programování TCP Socket v .NET C#

  1. Jak nainstalovat .NET 5 na Ubuntu 20.04

  2. Jak odstraním kód VS a nastavení z Ubuntu?

  3. Trvale změňte nastavení DNS na serveru Ubuntu