V nedávném článku „Multimédia v síti - nedejte na pověry“ jsem nastínil takové řešení školní sítě, které umožní sdílet výukové tituly z jediného disku na serveru. To je však jen součástí obecnějšího problému optimalizace TCP/IP přenosu. Jak je nejlepší nastavit každou stanici i servery pracující na architektuře Windows NT (2000, XP, 2003)?
Celou sadou experimentů, které jsme realizovali v síti kombinovaný Fast Ethernet / Gigabit Ethernet přibližně v celkové délce 12 000 metrů na VOŠ a SPŠ ve Žďáře nad Sázavou, jsme se dopracovali po čtrnácti dnech k finálním výsledkům.
Testovací bumbrlíček, 12 kilometrů drátu a desítky aktivních prvků SMC a 3COM
Najít správnou odpověď nebylo vůbec snadné. Složitost a struktura TCP/IP protokolu a k tomu doslova stovky skrytých parametrů Windows vedly často do slepých uliček. V některých případech jsme již jásali, že je vše super, ale bohužel se objevil problém například na protokolu ftp. Ten je například ovlivňován hned dvěma větvemi v registru Windows a jedním v nastavení vlastního ftp serveru. Jak tedy vypadá výsledná optimalizace, kterou je vhodné nahrát na každou stanici i servery pracující na architektuře Windows NT (2000, XP, 2003)?
Troška teorie
Na serveru www.repair2000.cz je publikována poměrně rozsáhlá teorie optimalizace TCP/IP přenosu. I samotný internet je nedozírnou studnou všech možných nastavení. My jsme ovšem nakonec vyšli z teorie a tu experimentálně upravili pro naše potřeby.
MTU (Maximum Transmission Unit) je základem
Standard RFC1191 z roku 1990 určil maximální velikost paketu v sítích standardu Ethernet II na 1500 bytů. Tato hodnota v sobě zahrnuje standardní TCP a IP hlavičku (40 bytů).
Nejvyššího výkonu přenosu lze dosáhnout velikostí přijímaného okna jako sudého násobku maximální velikosti segmentu (MSS - Maximum Segment Size) protokolu TCP. Právě o hodnotu 40 bytů musíme zmenšit velikost MTU 1500 bytů, abychom získali výchozí hodnotu pro určení MSS. To znamená:
MSS = 1500 – 40 = 1460 bytů
Kritické hodnoty velikosti „TcpWindowSize“ a „GlobalMaxTcpWindowSize“, které určují maximální velikost přijímaného okna protokolu TCP/IP poskytovanou systémem (přijímané okno určuje, kolik bajtů může odesílatel přenést bez přijetí potvrzení), je určena jako sudý násobek MSS. Po našich testech v síti Fast Ethernet / Gigabit Ethernet:
TcpWindowSize = GlobalMaxTcpWindowSize = 6 x 1460 = 8760 bytů (2238 hex)
Často publikované pravidlo, že větší přijímaná okna zvyšují výkon v rychlých sítích, není zase tolik pravdou. Při vyšších hodnotách se vyskytují problémy s nízkou odezvou koncových systémů, případně extrémní zahlcení sítě s heterogenním hardwarem (různé typy síťových adaptérů, aktivních prvků, apod.).
Úprava registru pro Windows NT platformu
Výsledná úprava registru je poměrně prostá, asi si řeknete, tohle že vyřeší problémy v naší síti, když to řeší zástup odborníků třeba i výměnou síťových prvků. Ano – je to tak, vyřeší a budete mile překvapeni. Z těch přibližně 200 nedokumentovaných voleb registru stačí opravdu málo k úspěchu:
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"EnablePMTUBHDetect"=dword:00000000
"EnablePMTUDiscovery"=dword:00000001
"SackOpts"=dword:00000001
"Tcp1323Opts"=dword:00000003
"TcpWindowSize"=dword:00002238
"GlobalMaxTcpWindowSize"=dword:00002238
"DefaultTTL"=dword:00000040
"MTU" =dword:000005dc
"TcpRecvSegmentSize"=dword:000005b4
"TcpSendSegmentSize"=dword:000005b4
Výsledky jsou naprosto bez komentáře: milisekundové odezvy serveru, sekundové starty aplikací ze serveru vzdáleného stovky metrů (například start síťového MS Office 2000 za 2 sekundy, Borland Builder 5 za 6 sekund, síťově přehrávatelná DVD na desítkách stanic, apod.).
FTP a WWW jsou opravdový oříšek
No a aby toho nebylo ještě dost, to, co jsme napsali výše, ještě nestačí k tomu, abyste oživili svižné přenosy FTP a WWW. Zkuste si ze svého FTP serveru v lokální síti stáhnout nějaký soubor. Jak rychle k vám přiteče po těch neskutečně rychlých drátech? Naše zkušenost je taková, že v 20 % případů se jedná o hodnoty na 1/5 možné přenosové rychlosti, v 60 % případů o hodnoty kolem 3/5 a v dalších 10 % případů o hodnoty kolem 4/5. No a těch 10 % je více či méně náhoda. Proč je to tak složité? Důvod je jednoduchý: ftp a http přenosy ve Windows jsou závislé na standardních parametrech ve větvi:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
ale také na parametrech:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters]
"DefaultReceiveWindow"=dword:00002000
"DefaultSendWindow"=dword:00001000
"LargeBufferSize"=dword:00002000
"MediumBufferSize"=dword:00001000
"SmallBufferSize"=dword:00000400
No a nakonec ještě na nastavení vlastních hodnot ReceiveWindow a SendWindow na ftp serveru. Sladit to celé je prostě alchymie. Jak tedy postupovat?
- Vymažte v registru tyto hodnoty:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters]
"DefaultReceiveWindow"=dword:00002000
"DefaultSendWindow"=dword:00001000
"LargeBufferSize"=dword:00002000
"MediumBufferSize"=dword:00001000
"SmallBufferSize"=dword:00000400
Prostě pryč s nimi, nechte určovat charakteristiku přenosu pouze ftp nebo http server.
- Akcelerujte TCP/IP
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"EnablePMTUBHDetect"=dword:00000000
"EnablePMTUDiscovery"=dword:00000001
"SackOpts"=dword:00000001
"Tcp1323Opts"=dword:00000003
"TcpWindowSize"=dword:00002238
"GlobalMaxTcpWindowSize"=dword:00002238
"DefaultTTL"=dword:00000040
"MTU" =dword:000005dc
"TcpRecvSegmentSize"=dword:000005b4
"TcpSendSegmentSize"=dword:000005b4
- Nastavte hodnoty ReceiveWindow a SendWindow přímo na serveru. Uvádíme několik příkladů.
Carbeus FTP
GuildFTP
A výsledky?
Pomocí Windows Commandera jsme zkusili upload a download souboru. Naměřené hodnoty pro jednotlivé FTP servery se v podstatě neliší.
Upload souboru pomocí FTP v síti Fast Ethernet
Download souboru pomocí FTP v síti Fast Ethernet
Mnohdy stačí velmi, velmi málo k tomu, abyste byly se svou sítí mnohem spokojenější. Nemusíte utrácet tisíce korun na povyšování hardware. Stačí jen optimalizovat přenos. Musíte ovšem zapomenout na nějaké default hodnoty, ať se jedná o Linux nebo Windows.
Více informací na www.repair2000.cz.
Petr Fořt
0 komentářů:
Okomentovat