Portál AbcLinuxu, 25. dubna 2024 22:43

tc čili simulujeme latenci

4.12.2008 18:31 | Přečteno: 1961× | pro temnou strunu | Výběrový blog

Jen krátká noticka o programu tc pro jednoduchou, leč účinnou simulaci síťové latence. Zároveň obrovské poděkování autorovi článku How to simulate a slow network, z něhož tady hodlám vytáhnout jen dva příkazy. Aneb: k čemu NetLimiter?

Vyvíjíte webové aplikace, které intenzivně využívají AJAX? Máte mou upřímnou soustrast, a dvojnásobnou v případě, že jste teprve nedávno zjistili, že taková aplikace se může v provozu chovat úplně jinak, než při vývoji. Při vývoji aplikaci obvykle zkoušíte na tomtéž stroji, kde běží, případně na lokální síti. Čímž ovšem efektivně odstraníte zpoždění sítě, které Vaši uživatelé mohou dost výrazně pocítit. Co všechno zajímavého se může stát, to nechám na zvrhlosti fantazie laskavého čtenáře, a bez zbytečných průtahů ukážu hloupě jednoduchý postup, jak se v tomto ohledu uživateli přiblížit (a zkomplikovat si práci).

# tc qdisc add dev lo root handle 1:0 netem delay 150ms

A rázem máte zpoždění o 150 ms vyšší. Pokud nechcete zpoždění konstantní, můžete třeba:

# tc qdisc add dev lo root handle 1:0 netem delay 150ms 20ms

a je to 150 ± 20 ms. To vše na lokálním síťovém rozhraní (lo). Ještě pro zrušení:

# tc qdisc del dev lo root

Zvláštní pocit pak zakusíte, když si uvědomíte, že na tomtéž rozhraní komunikuje i vyvíjená aplikace s databází :-) Ale což, funguje to. Nebo si v síti pustíte počítač s Windows (stejně si to potřebujete zkusit v IEčku…) a namísto lo použijete eth0. Paráda.

A pokud jsem někomu neřekl nic nového, smůla. V dohledné době se chystám napsat takový malý zápisek o New Weirdu, tam si zase přijdou na své příznivci Ladickova literárního spamu :-)

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Jan Drábek avatar 4.12.2008 21:00 Jan Drábek | skóre: 41 | blog: Tartar | Brno
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci
Odpovědět | Sbalit | Link | Blokovat | Admin

Jo, některé JS skripty se chovají dost divně...

01010010 01000101 01010000 01101100 01001001 00110010 01000100 01100101 01010110
srigi avatar 8.12.2008 10:16 srigi | skóre: 10 | blog: sricont
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci

Osobne som robil nejaké pokusy s Ajaxom pod windooze a latencie som si simuloval v PHPcku (usleep() ), 404-ku nasmerovanim na nespravnu URL.

Be kind to newbies.
4.12.2008 23:51 Xóža Hňabaj | skóre: 15 | blog: popcorp | Brno
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci
Odpovědět | Sbalit | Link | Blokovat | Admin
On ten tc umi jeste vic zajimavych veci - napriklad poskozovat pakety, ztracet je apod. To se zase hodi pro testovani odolnosti vlastnich protokolu. Tuhle se na to nekdo ptal v poradne, daval jsem tam par prikazu ktere pouzivam. Hodi se, pokud clovek nema chut procitat rozsahlou dokumentaci shaperu.

edit: tady je ten dotaz
Jednaokový biu
5.12.2008 09:24 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci
Díky za doplnění, já jsem jenom v rychlosti prolítnul manuálovou stránku, zjistil jsem, že rozumím asi tak každému pátému slovu, a spokojil se s používáním podle kuchařky :-)
Ještě na tom nejsem tak špatně, abych četl Viewegha.
5.12.2008 13:26 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci
On to nedělá ani tak příkaz tc, ale spíš příslušná qdisc, kterou používáte. Tvrzení, že příkaz tc umí simulovat nekvalitní spojení, je asi tak přesné, jako kdybyste prohlásil, že příkaz iptables umí omezit frekvenci příchozích spojení na webový server.
5.12.2008 08:33 Martin Beránek | skóre: 33 | blog: mousehouse | Brno
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci
Odpovědět | Sbalit | Link | Blokovat | Admin

zajímavé +1, jenom se mi to nějak nedaří rozchodit...

$ tc qdisc add dev lo root handle 1:0 netem delay 150ms
RTNETLINK answers: Operation not supported 

někde jsem našel, že je potřeba povolit CONFIG_NETLINK v jádře, ale to němůžu najít...

never use rm after eight
9.12.2008 18:07 Non_E | skóre: 24 | blog: hic_sunt_leones | Pardubice
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci

Taky mi to enchce zaboha fungovat :-( 

Only Sith deals in absolutes.
9.12.2008 18:54 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci
A máte v jádře podporu pro tu qdisc netem? Nejsem si jistý, jestli je standardní součástí, spíš bych řekl že ne.
9.12.2008 19:04 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci
V Debianu jo :-)
Ještě na tom nejsem tak špatně, abych četl Viewegha.
9.12.2008 19:54 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci
Výrazem "standardní" myslím to, jestli je ve vanilla jádře, a tedy všude. Jinak to bude jen záležitost specifických distribučních jader nebo rukodělného patchování. Na to by měl samozřejmě dobře napsaný blogpost upozornit, ale to se v tomto případě (kdy se autor domnívá, že tu simulaci dělá příkaz tc) dalo těžko čekat.
9.12.2008 20:00 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci
Autor o tc ještě před pár týdny netušil vůbec nic a domnívá se, že jeho existence je neznáma i řadě dalších lidí, proto tenhle blogpost napsal. Autor dále není tak naivní, aby si myslel, že příkaz tc dělá něco jiného, než že komunikuje s jádrem, ačkoliv pro perverzní síťařské šťouraly určitě měl zdůraznit, že se jedná o kuchařku beze špetky vysvětlení. Autor se za toto politováníhodné nedopatření co nejsrdečněji omlouvá. P.S.: autor nepoužívá ifconfig :-D
Ještě na tom nejsem tak špatně, abych četl Viewegha.
10.12.2008 03:04 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci

Snahu šířit osvětu samozřejmě chválím. Ale musím trvat na tom, že tvrzení o "programu tc pro jednoduchou, leč účinnou simulaci síťové latence" je už hodně za hranicí přijatelného zjednodušení. Prostě si myslím, že kdybyste před napsáním toho návodu trochu hledal a zjistil, k čemu slouží příkaz tc a co vlastně znamená "qdisc" a "netem", mohl být ten návod mnohem užitečnější.

Dobrá zpráva: vypadá to, že ten driver je ve vanilla jádrech už docela dlouho, takže by s tím neměl být problém v žádné aktuální distribuci.

10.12.2008 09:30 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci
Asi jo. Ale já fakt nejsem síťař a manuálová stránka tc mi byla asi tak srozumitelná, jako shakespearovská angličtina :-) Každopádně díky, že jste na to aspoň v diskusi upozornil.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
10.12.2008 10:23 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci
Manuálová stránka se hodí spíš jen jako reference, když už víte, jak to funguje, a potřebujete si osvěžit syntaxi. Něco se dá najít v LARTC HowTo (kapitoly 9-12) nebo v Differentiated Service HowTo (kapitola 2).
5.12.2008 09:34 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: tc čili simulujeme latenci
Odpovědět | Sbalit | Link | Blokovat | Admin

Zajímalo by mě, jak se takové situace řeší, když vývojář pracuje pouze na windows. Zda také existují takové vychytávky.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.