Sven Ubik, CESNET Přenosy velkých objemů dat v rozlehlých vysokorychlostních sítích
End-to-end performance End-to-end performance je výsledkem interakce všech komponentů v komunikační cestě: - aplikace, operační systém, komunikační protokoly, síťový adaptér, síť Suboptimální konfigurace vs. principiální omezení komponentů Vybrané oblasti problémů: - Konfigurace paměti pro TCP okénka - Interakce operační systém / síťový adaptér - Interakce SSH / TCP
Flow control & congestion control Flow control (rwin) - přizpůsobení k rychlosti přijímače Congestion control (cwnd) - přizpůsobení k volné kapacitě sítě
TCP okénko a dosažitelná propustnost TCP okénko => objem dat přenesený za RTT Default: 64 kB + 50 ms RTT (Evropa) => 10.5 Mb/s 64 kB ms RTT (USA) => 3 Mb/s Odstranění limitace TCP okénkem: 1 Gb/s + 50 ms RTT => TCP okénko 6 MB 1 Gb/s ms RTT => TCP okénko 21 MB
Konfigurace paměti pro TCP okénka Ručně pro všechna spojení (2 MB, Linux 2.4): sysctl -w net/ipv4/tcp_rmem=„ “ sysctl -w net/ipv4/tcp_wmem=„ “ sysctl -w net/ipv4/tcp_mem=„ “ Ručně pro jedno spojení: int size= ; setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, (char *)&size, sizeof(int)); setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (char *)&size, sizeof(int)); (Polo-) automaticky: - DRS (Dynamic Right Sizing) - WAD (Work Around Daemon) - web100
Skutečná velikost paměti a okének Linux 2.4: Zadaná vs. indikovaná vs. skutečná velikost bufferů a okének
CESNET UNINETT (Norsko), 45 ms RTT TCP okénko a dosažená propustnost
Velké TCP okénko => aplikace může předat velkou dávku dat Plná txqueue => send_stall() a přepnutí kontextu OS Není problém, pokud txqueuelen stačí do získání kontextu Interakce OS / síťový adaptér Pro Gigabit Ethernet a standardní systémový časovač Linuxu: txqueuelen > 1 Gb/s * 10 ms / 8 bits / 1500 bytes = 833 packets ifconfig eth0 txqueuelen 1000
Interakce OS / síťový adaptér (2)
“wire pipe” vs. “buffered pipe” TCP je self-clocking, ACK rate => SEQ rate Aktuální okénko vysílače roste i za cenu plnění front směrovačů Naplněné fronty + cross-traffic => citlivost na přeplnění Detekce „wire pipe“ podle nárůstu BW nebo RTT rwnd<=pipe capacity bw=rwnd/rtt rwnd>pipe capacity bw~(mss/rtt)*1/sqrt(p) Flat lower bound RTT=45ms Fluctuations up to RTT=110ms Bottleneck installed BW=1 Gb/s Buffer content ~8 MB
TCP cache malé počáteční ssthresh blokuje okénko na ~ 1.45 MB sysctl -w /proc/sys/net/ipv4/route/flush=1 vývoj owin vývoj cwnd
Měření a odhad volné kapacity iperf TCP - náročná konfigurace UDP - stresuje stávající provoz (TCP unfriendly) pathrate instalovaná kapacita trasy vykazuje mnoho fluktuací pathload volná kapacita trasy po vyladění časových konstant pracuje na většině vysokorychlostních tras do cca 800 Mb/s 2/3 měření realistické výsledky, rozsah až 150 Mb/s
Měření a odhad volné kapacity uninett.no cesnet.cz
SSH performance Cesnet Uninett 10.4 Mb/s 9% load CPU vývoj sekvenčních čísel - rwin (okénko přijímače) není využito
SSH performance (2)
SSH performance (3) Bw=1 Gb/s, RTT=45 ms, TCP window=8 MB, Xeon 2.4 GHz
CHAN_SES_WINDOW_DEFAULT =40 * 32 kB blocks, 85% CPU load vývoj sekvenčních čísel - rwin (okénko přijímače) je využito SSH performance (4)
Závěr Rozlehlé vysokorychlostní sítě vyžadují => velká TCP okénka => další konfiguraci (txqueuelen, TCP cache,...) Optimální TCP okénko = „wire pipe“, obtížně dosažitelné Úprava SSH nutná pro dobrou propustnost Konfigurace a interakce komponentů komunikační trasy má na zásadní vliv na výslednou propustnost