Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
— |
flow_control_a_buffery_na_switchich [2019/05/05 23:50] (aktuální) 0.0.0.0 vytvořeno |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ====== Flow_control_a_buffery_na_switchích ====== | ||
+ | https://gettys.wordpress.com/2013/06/20/bufferbloat-in-switchesbridges/ | ||
+ | |||
+ | Problém: | ||
+ | |||
+ | Na páteřních linkách s ubnt klesá propustnost se zvětšujícím se počtem hopů | ||
+ | |||
+ | Příčína: | ||
+ | |||
+ | Příčina je, že moderní UBNT agreguje až 50k dat a je odešle jako burst | ||
+ | na full 1Gbps. 1S10 nemá buffery na to to pobrat a zahodí občas packet. | ||
+ | |||
+ | To se samozřejmě nedělo u UBNT řady XM, protože ta má jen 100 Mbps port, | ||
+ | který zabrání vytvoření burstu o rychlosti 1Gbps. Ale u řad XW, TI a AC | ||
+ | s GbE porty už se to děje. | ||
+ | |||
+ | ----------------------------------------------- | ||
+ | |||
+ | Pro tábor flow-control-je-nutnost: | ||
+ | |||
+ | S zapnutým flow-control místo zahazování packetů prostě 1S10 pošle PAUSE | ||
+ | frame a řekne TP-Linku aby chvíli neposílal. Tím začne 1S10 vypadat pro | ||
+ | TP-Link jako spolehlivý port běžící na 150 Mbps. | ||
+ | |||
+ | Ovšem problém se zahazováním se tím přesouvá na TP-Link. Ten má jen 512k | ||
+ | bufferů a tak dokáže nabufferovat cca 4ms při plné gigabitové rychlosti. | ||
+ | Na burst od UBNT to bohatě stačí, ale mohou nastat i horší situace, kdy | ||
+ | se buffery zaplní. | ||
+ | |||
+ | V takovém případě TP-Link pošle PAUSE na VŠECHNY porty co mají flow | ||
+ | control, protože neví odkud co teče a efektivně zastaví veškeré toky do | ||
+ | něj. To může zpomalit toky nezávislé na tom, který způsobil zaplnění | ||
+ | bufferů. | ||
+ | |||
+ | To ale moc nevadí, protože v tom okamžiku začnou bufferovat připojená | ||
+ | zařízení jako UBNT, i připojený router a ty by ideálně měly mít | ||
+ | nastavený sfq nebo fq_codel qdisc, aby začaly optimálně zahazovat | ||
+ | packety, aby jim buffery (a tedy latence) nerostly do příliš vysokých | ||
+ | čísel. | ||
+ | |||
+ | ----------------------------------------------- | ||
+ | |||
+ | Pro tábor flow-control-is-evil: | ||
+ | |||
+ | Alternativa k použití flow control je inteligentní switch, který umí | ||
+ | shaping, nastavení shapingu pod limit 1S10, a buffery zvlášť pro každý | ||
+ | output port a rozumný qdisc, aspoň red, když už ne sfq, nebo fq_codel. | ||
+ | Ale to jsme v docela jiné cenové kategorii a nebude to dobře chodit | ||
+ | pokud 1S10 sníží modulaci a tudíž propustnost. | ||
+ | |||
+ | ----------------------------------------------- | ||
+ | |||
+ | Pro tábor enterprise-technology: | ||
+ | |||
+ | Pokud je switch opravdu dobrý, tak může flow-control fungovat skvěle, | ||
+ | protože switch zjistí koho přesně má zakázat podle interní statistické | ||
+ | analýzy toků a neovlivňuje tak jiné toky. | ||
+ | |||
+ | ----------------------------------------------- | ||
+ | |||
+ | musím se ještě opravit: TL-SG3216 má sice 512k bufferů, ale rozdělené na | ||
+ | 4 separátní fronty a v základním nastavení se z nich používá jen jedna, | ||
+ | tedy v základním nastavení je na buffery 128k, což odpovídá cca 88 | ||
+ | packetům a časově 1ms na 1GbE, což je zcela adekvátní velikost. | ||
+ | |||
+ | Bohužel je ta fronta čisté FIFO, mezi frontami je možno zapnout buď | ||
+ | prioritizaci nebo weighted round robin. Žádný red ani sfq neumí. | ||
+ | |||
+ | Chtělo by to zapřemýšlet, jestli by vhodné rozvržení front mezi vstupní | ||
+ | porty nevylepšilo některé vlastnosti přenosu v situaci, kdy se buffery | ||
+ | přeplňují. | ||
+ | |||
+ | |||
+ | ----------------------------------------------- | ||
+ | A ještě jedno doplnění: | ||
+ | |||
+ | RTL8736, který nejspíš je v TL-SG3216 umí vybírat fronty i podle ACL a | ||
+ | ACL se dá nastavit dle VLAN. Ověřil jsem, že i přes webové rozhraní to | ||
+ | jde na TL-SG3216 nastavit. | ||
+ | |||
+ | Mezitím jsem studoval datasheety or Realteku a už začínám zhruba rozumět | ||
+ | tomu, kdy použije PAUSE frame pro flow control. Je to o dost lepší, než | ||
+ | u úplně stupidního switche. PAUSE se pošle vždy do JEDNOHO portu a to do | ||
+ | toho, ze kterého přišel packet, který už není možno zařadit do fronty, | ||
+ | protože ta fronta je plná. Packet zůstane v input bufferu do té doby, | ||
+ | než se ve frontě, kam patří, aspoň jedno místo uvolní, pak je port opět | ||
+ | otevřen. Ostatní porty jsou nepostiženy. To znamená, že oddělením front | ||
+ | dle portů a VLANů by mělo jít docílit docela pěkného chování. |