Hlavní navigace

Trickle: rozdělte své připojení

Petr Krčmář 29. 7. 2008

Určitě se vám stalo, že jste potřebovali spustit nějakou aplikaci, která ale příliš vytěžovala vaše internetové připojení. Vy jste ale ještě potřebovali dělat s internetem něco jiného a program neměl správnou volbu, která by jej zpomalila. Trickle vám pomůže rozdělit připojení mezi jednotlivé aplikace.

Co je Trickle?

Jistě se vám to někdy stalo: potřebovali jste spustit nějakou aplikaci, která komunikuje po internetu, ale zároveň jste nechtěli, aby „zkonzumovala“ veškerou šířku pásma vašeho připojení.

U některých programů je možno nastavit, jak moc mohou linku využívat, existuje ale i mnoho takových, které tuto volbu nemají a běžně tak neexistuje způsob, jak je omezit.

Program s jednoduchým názvem Trickle. Ten dokáže téměř jakékoliv konkrétní aplikaci omezit rychlost komunikace se zbytkem světa. Původně byla aplikace vyvinuta pro OpenBSD, běží ale i na dalších unixových systémech: Solaris, NetBSD, FreeBSD a Linux.

Typicky se takový postup může hodit ve chvíli, kdy chcete stahovat větší množství dat skrze BitTorrent, ale nechcete omezovat zbytek sítě či svou vlastní linku, kterou potřebujete používat pro další práci. Pokud neexistuje jiná možnost, můžete použít výhod Trickle.

Jak to funguje?

Trickle využívá výhod dynamického linkování knihoven a především „preloadingu“ funkcí. Pomocí této techniky je aplikace schopná vnutit se mezi aplikaci a systémové knihovny a implementovat vlastní funkce pro komunikační API.

Pokud se to stane, prochází veškerý následující datový tok právě přes Trickle, který dokáže tekoucí data sledovat a především ovlivňovat. Dokáže plynule „zaškrcovat“ TCP komunikaci s aplikací a tím ovlivňovat maximální rychlost, jakou program komunikuje a zatěžuje linku.

Výhody a nevýhody

Z výše zmíněného plynou zároveň výhody i nevýhoda programu Trickle.

Výhody:

  • je naprosto univerzální,
  • nevyžaduje práva administrátora,
  • velmi jednoduché použití.

Nevýhoda:

  • nefunguje u staticky linkovaných aplikací.

Jdeme se omezit

Program pravděpodobně naleznete ve své distribuci, pokud ne, budete jej muset přeložit. Zdrojové kódy jsou ke stažení na domovské stránce.

Použití je poměrně jednoduché. Trickle umí běžet samostatně nebo pod dohledem společného démona (trickled). Zatím si popíšeme první, jednodušší variantu. Zajímat nás bude především parametr -d jako download, za který přidáme ještě číslo udávající maximální rychlost downloadu (v KiB/s), kterou může aplikace využít. Dále uvedeme samotný program (i s parametry), který má Trickle obhospodařit. Příklad:

$ trickle -d 50 ftp stroj.sit.cz

Program se normálně spustí a začne pracovat, pokud začne komunikovat s okolím, bude jeho rychlost shora omezena 50 KiB/s. Bohužel tuto hodnotu už nemůžeme během používání aplikace nijak měnit.

Pokud si chcete Trickle jen tak vyzkoušet, můžete použít například wget, který, ačkoliv má sám parametr pro omezení rychlosti, se nechá zpomalit a navíc vám v reálném čase ukáže, jak rychle stahuje.

Kromě této nejjednodušší možnosti můžeme stejně omezit také upload (parametr -u) a nastavit některé další detaily jako intervaly sledování přenosu (pro plynulost běhu) a další.

Démon trickled

Už jsem zmínil možnost centrální správy jednotlivých trickle sezení pomocí centrálního démona. Ten může běžet na stejném stroji jako klienti, kteří jej využívají, může být ale také provozován po vnitřní síti a obsluhovat tak software na mnoha počítačích naráz.

Další příklad: budeme chtít spustit několik různých aplikací pro stahování najednou, ale celkově chceme akci přidělit maximálně 70 KiB/s. Nechceme ale sledovat, kdy které aplikace končí a přerozdělovat složitě zbývající pásmo ostatním. Pustíme tak démona:

$ trickled -d 70

a následně pustíme stahování

$ trickle wget jeden_soubor
$ trickle wget druhy_soubor
$ trickle wget treti_soubor
...

Vše bude fungovat dle očekávání: klienti se dotáží démona, kolik pásma jim přidělí a podle toho se omezí. Dotazování probíhá dynamicky, takže můžeme libovolně jednotlivé úlohy přidávat či odebírat a démon bude stále hlídat celkový strop, který nebude překročen.

Složitější dělení

Výše uvedený příklad ale předpokládá, že všem omezovaným procesům přidělíme stejnou část pásma. Můžeme ale chtít některým aplikacím dát více a některým méně. Proto existuje konfigurační soubor trickled.conf, který je poměrně jednoduchý a dělí procesy podle aplikací. Může vypadat například takto:

[ssh]
 Priority = 1
 Time-Smoothing = 0.1
 Length-Smoothing = 2
[ftp]
 Priority = 8
 Time-Smoothing = 5
 Length-Smoothing = 20

Cestu k tomuto souboru předáváme démonovi pomocí parametru -c. Vidíte, že ssh dostává vyšší prioritu a kratší čas sledování toku, což je nastavení vhodnější pro interaktivní aplikace. Naopak u ftp je plynulost a rychlost přenosu méně podstatná, takže dostává méně pozornosti a nižší prioritu.

Závěrem

Trickle nabízí velmi jednoduchou cestu omezování rychlostí jednotlivých aplikací, i celých skupin programů, které by neměly využívat vaše připojení k internetu naplno. Velkou výhodou je, že jej může obsluhovat i běžný uživatel bez práv roota a jeho použití je navíc velmi snadné.

Našli jste v článku chybu?

4. 8. 2008 20:30

Ještě jsem chtěl navrhnout, jak by se daná věc dala vyřešit ideálně. Vyžaduje to ovšem roota.

Myšlenka je v podstatě taková, že počítač se chová jako omezjící NAT pro virtuální síťová rozhraní na tomtéž stroji, přičemž každé aplikaci je přiřazeno vlastní rozhraní.

Implementaci bych si představoval tak, že běží démon s právy měnit konfiguraci sítě. Ve chvíli, kdy se spustí zaškrcená aplikace, nějaký wrapper tomuto démonu předá příslušný PID. Démon vytvoří nové rozhraní, nastaví mu požadované pa…



4. 8. 2008 20:09

Hlavní problém je, že se to děje na příliš vysoké úrovni. :|

Je sice pravda, že průměrnou přenosovou rychlost lze takhle omezit, ale fakticky se např. při stahování stane tohle:

  1. klient naváže spojení a pošle požadavek (to asi zpomalené nebude, protože je málo)
  2. server začne posílat data
  3. klient začne plnit TCP buffery; protože každý přijatý paket v tuto chvíli potvrzuje, velikost TCP okna se poměrně rychle zvětšuje; v tuto chvíli je stahující proces schopen zcela zahltit linku
Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Root.cz: Telegram spustil anonymní blog Telegraph

Telegram spustil anonymní blog Telegraph

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Vitalia.cz: I církev dnes vyrábí potraviny

I církev dnes vyrábí potraviny

Měšec.cz: Golfové pojištění: kde si jej můžete sjednat?

Golfové pojištění: kde si jej můžete sjednat?

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR