Jen mensi preklep, k pred-predposlednim radku v "shaping-builtree" je chyba. Radek
->
tc filter add dev ${IFACE} parent 1${grp}:0 protocol ip handle {$grp}${band} fw flowid 1${grp}:${band}
<-
je nutne nahradit
->
tc filter add dev ${IFACE} parent 1${grp}:0 protocol ip handle ${grp}${band} fw flowid 1${grp}:${band}
piggybacking je naprosto normalni vlastnost ip stacku, ktera se bezne pouziva, a jestli nekdo chce uprednostnit ack pred ne ack pakety, pripadne jeste hur, kdy uprednostni pouze ack pakety pred piggybacknutymi ack packety, tak at si to hodne rychle rozmysli.
acky a prehozena sekvencini cisla neni zrovna rozumna vlastnost tohoto pristupu ke QOS a kdo vi co se rozhodne udelat druha strana spojeni... zmensi okno? preposle ty same pakety, ktere uz cekaji ve fronte,...
Zdravim,
pojal jsem shaping trochu jinym zpusobem a asi by bylo zajimave to konfrontovat.
Moje cile a jejich dosazeni
-aby clovek co ma pusteny p2p neobtezoval ostatni
-aby se dal parit CS, bezohledu na to kdo co taha
-aby jelo Radio1 pres internet bez cukani (btw:ukazalo se tez jako dobry diag. nastroj,
protoze se da krasne rychle pustit : 'mplayer http://live.atlas.cz/radio1/radio1-20.asx' - nejlepe hodit do skriptu.)
-aby www brouzdani melo "prioritu" a jel "rozumne" rychle
-kdyz dojde na nejhorsi situaci, tzn nekdo taha neco velkyho z www, tak aby mi to jelo aspon polovicni rychlosti
Realizace :
Downloadu delim na 3 classy, podle priority. Prvni - rekneme interaktivni, druha - puvodne mineno "prostredni",nyni pouze na web, treti -nizkoprioritni- na vsechno ostatni.
Konfiguraci jsem okoukal z wondershaperu na lartc.org, ale skript si stavim vlastni.(Kromtoho wondershaper neni pripraveny na nasi konfiguraci 2 sitovkama)
Bohuzel je to dost komplexni situace a neobejde se bez zjednodusujicich predpokladu :
1) na routeru nebezi zadny proces generujici traffic [ zejmena Squid a take Apache-kdyz nemame dost bandwithu pro sebe, nebudeme ho jeste davat cizim(navic nahodny charakter pristupu by ztezoval diagnostiku) ]
2) aby jsem se nazamotal z klasifikace bandwithu, predpokladam apriori vsecheno ma nizkou prioritu
3) do prioritni tridy nasypu : CS(podle src port), Radio1 (podle src IP ), DNS resolvy, ACK-y [tim
si popravde receno nejsem jisty, v uploadu urcite, ale v downloadu ? ]
4) prostredni tridu delim na poloviny podle dst ip, abych mel zarucenou pulku pasma kdyz si nekdo pusti download [delim linku mezi 2 rodiny,predpokladam ze v ramci 1 rodiny se lidi sami dohodou "kdo to prave brzdi"]
5) zatim shapuji pouze download, uzivatelum jsem zakazal blokovat upload(ke cti jim slouzi ze to vesmes dodrzuji). Situaci jsem tak podstatne zjednodusil a vyhnul se fwmarku(casem asi bude).
Upload zatim to resim tak, ze je tam 1 sfq-cko -je na 1 radek a udela to spoustu prace
Rad bych sem napsal ze vsechno chodilo na 100%, ale menil jsem skripty do toho navic UPC rozdrbalo rychlost a kvalitu linky, takze aspon to co (nekdy) uspesne fungovalo :
-prioritizace CS - pri plnym zatizeni linky ukazovalo CS ping temer jako na prazdno
-prioritizace Radia 1 - at se delo cokoliv, buffer byl dost plny takze ani necuklo
-web se delil fifty fifty , takze vzdy se dalo pozitelne brouzdat, i kdyz to bylo trochu pomale.
-kdyz nikdo nic nedelal, p2p traffic si zabral celou linku a plnou rychlosti stahoval
-web stanky se zacinaji nacitat rychleji a celkova doba natazeni je kratsi, i kdyz nekdo jiny mam p2p na plny kotel. (to je ovsem jeste necim jinym, a to perturbem)
PERTURB:
-zajimave, ze tomuhle parametru se nikdo moc nevenuje, i kdyz jeho vliv je znacny - obvykle je perturb 10sec. domnivam se ze v dusledku to znamena, ze kdyz je 100% zatizena linka a odklepnu v browseru URL, tak browser bude muset 1-10 sec "zivorit" s jakousi zbytkovou kapacitou, nez HTB prepocita "kolik a kam tece" a prideli mu jeho urcenou cast pasma. Receno jeste vulgarneji, perturb="cas, kdy shaping nefunguje". Pri perturbu 10 vychazi prumerny cas cekani 5 sec, a to uz je na brouzdani dost poznat.
Proto mam vsude perturb nejmensi(tzn 1sec). Byla tu obava, ze to pak bude zrat moc CPU, tak jsem nainstaloval HOTSANIC a obcas to kontroluji(shaping mam tak jednoduchy,jak to jde a router(dual 133MHz pentium 1) ma trvale zatizeni 5-10% obou CPU, takze v pohode)
POZOR - cely odstavec o perturbu je "hypoteza ve stadiu overovani",takze ruku do ohne za nej nedam !
Porovnani s shapingem popsanym v clanku
-co se mi libi, ze kombinace HTB+PRIO krasne resi tento problem - pomery trid "prioritizovana/normalni/nedulezita" mam nastaveny fixne a tise predpokladam, ze v prioritizovane tride je traffic do 5kb, takze na web se vzdycky dostane. Pokud by ovsem nekdo tuto tridu nedejboze zaplacl(map transfer v CS,vetsi stream radia1, tunelovani X pres SSH) tak na web nezustane nic - coz je jednoznacne chyba.
-na druhou stranu, toto deleni primarne podle IP adresy ma jednu fundamentalni nevyhodu : kdyz si 2 ze 3 vasich uzivatelu pusti trvale p2p na "co to da", udelaji z vasi krasne 256kbit linky 80kbit socku, coz uz pri brouzdani sakra poznate.
Zaver : Tim ze delim primarne podle druhu mi umoznuje webem "vytlouct" p2p z linky, kdyz je treba.
Dale vyzyvam zde pritomne ctene ctenare, aby popsali jakym zpusobem shapuji a jak dobre to funguje...
Tyhle moznosti (tvoje a moje) jsou v celku ekvivalentni. Kazda ma svoje vyhody a nevyhody, ktery jsi shrnul, takze neni co dodat. Snad jen to, ze ja se ridil heslem, ze kazdej uzivatel ma pravo na svuj dil at se deje co se deje...
Pokud najdu cas, zkusim vymyslet nejakou hybridni kombinaci...
No, koukam ze jsem to asi moc prechvalil, me se to zas tak dokonaly nezda :) Skripty nemam ve forme vhodne k publikovani, ale do vikendu to zkusim napravit a postnu to sem. I kdyz popravde receno si myslim, ze ten slovni popis zbehlemu clovekovi k (re)konstrukci staci, a zacatecnikovi nepomuzou ani skripty...
Toz, pro ty,kterym to chybelo : skript je na :
http://www.sweb.cz/dvorak.vaclav/htb-vdv.zip
Nicmene - jak jsem to ted editoval a korigoval, uvedomil jsem si ze uzivatele+jejich chovani+poskytovatel+shaping tvori dohromady skoro organicky system, takze kdyz to fungovalo bezchybne 3 mesice, zitra uz to fungovat nemusi, natozpak v jine siti, s jinymi uzivateli. Je to zpusobeno volnejsim pristupem a povicero predpoklady pri jeho budovani-to je cena za rychlost. Tudiz kdyz se vyrazne zmeni chovani uzivatelu, bude ho treba opravit.
Zaver : Pokud vyzadujete spolehlivejsi system,nebo nemate takove zkusenosti s shapovanim a nevadi vam pripadna pomalost linky, je system pana Podgorneho pro vas lepsim resenim.
perturb je čas v sekundách mezi změnami hashovací funkce v sfq - tato změna pomáhá čelit případům, kdy se vám do jednoho slotu v hashovací funkci dostane jedna nebo více velmi aktivních např. "stahovacích" sessions společně se jinou např. "interaktivní" session, která je tímto bržděna a smysl sfq je tímto potlačen - díky perturb tento stav vydrží maximálně "perturb" sekund :)
Ma otazka je trochu z jineho soudku. Jak udelam, aby mi jel UPLOAD + DOWNLOAD dohromady 128? Chci rict, jak ukrojit z napr. 2 Mbit linky spoustu malich linek po 128 kbps, ale ne 128 UPLOAD a 128 DOWNLOAD, jak to funguje ted, protoze na eth1 a a eth0 je uplne jiny filter, tudiz kazdy pusti 128. Ale ja chci, aby to jelo proste celkem dohromady max 128. Jednoduche rovnice:
Takhle to chci:
MAX UPLOAD + MAX DOWNLOAD = 128
MAX DOWNLOAD = 128
MAX UPLOAD = 128
Takhle to je bohuzel ted:
MAX UPLOAD + MAX DOWNLOAD = 256
MAX DOWNLOAD = 128
MAX UPLOAD = 128
Proste aby max. propustnost linky byla 128. Lamu se s tim hodne dlouho, tak kdo poradi, udela mi velkou radost a bude to muj nejlepsi darecek k vanocum :))))
Dejme tomu že mám do inetu linku cca 6Mbit. Uživatelů je poměrně dost že by bylo neúnosně vytvářet pro každého třídu.Je možné proto všechny pro všechny použít jednu class a pak pro některé privilegované uživatele samostatné class? Např.:
<CODE>
#classes
tc qdisc add dev wlan0 root handle 1:0 htb
tc class add dev wlan0 parent 1:0 classid 1:1 htb rate 5mbit ceil 6mbit burst 8k
#sem budou spadat všechny packety omarkované na 11
tc class add dev wlan0 parent 1:1 classid 1:11 htb rate 1mbit ceil 5mbit burst 8k prio 0
#sem budou spadat všechny packety omarkované na 10
tc class add dev wlan0 parent 1:1 classid 1:10 htb rate 128kbit ceil 5mbit burst 8k prio 1
#markování
iptables -A POSTROUTING -t mangle -d 10.26.2.0/24 -j MARK --set-mark 10
iptables -A POSTROUTING -t mangle -s 10.26.2.0/24 -j MARK --set-mark 10
iptables -A POSTROUTING -t mangle -d 10.26.2.1 -j MARK --set-mark 11
iptables -A POSTROUTING -t mangle -s 10.26.2.1 -j MARK --set-mark 11
</CODE>
Bude to takhle fungovat správně?
Mám Slackware 9.0
zkompilované jádro 2.4.25
iptables v1.2.7a
iproute2-2.4.7 ss020116
veškeré důležité části QoS mám v jádře (aspoň myslím)až na modul cls_u32 (který "modprobuju").
CBQ funguje, HTB nefunguje... :-/ modul htb je zakompilovaný do jádra (alespoň podle nastavení menuconfigu před kompilaci jádra to tak vypadá)
Hlášky:
> /sbin/tc qdisc del dev eth0 root
RTNETLINK answers: No such file or directory
> /sbin/tc qdisc add dev eth0 root handle 1 htb default 30
Unknown qdisc "htb", hence option "default" is unparsable
Následující nevypisuji, neb jsou analogické
U mazání (první řádek) je pravděpodobně standartní hláška (CBQ funguje, tak to bude asi OK), nicméně další chybová hláška, kde se pokouším zavést htb normální asi nebude :-D :-/.
Jestli ještě někdo selduje diskuzi, mohl by pls. poradit (nebo alespoň vnuknout nápad) co s tím ?? Nemůžou se v jádře "mlátit" části CBQ a HTB ?
Chtěl jsem nainstalovat iptables 1.2.9, jestli by to čistě náhodou nepomohlo, ale zarazilo mě upozornění: "This package requires a 2.4.4 kernel, or above." v souboru INSTALL v instalaci, takže jsem nezkoušel.
Opravdu nevím, co s tím a budu velice vděče za každou radu.
Děkuji.
je mozne cez u32 filtre filtrovat pakety ktore nejdu z lokalnej siete?
Priklad: server; 3 sietovky:eth0,eth1,wlan0; eth0 a wlan0 maju tu istu siet a maksku 192.168.2.0/24 - lokalna siet; eth1 smer internet.
Pomocou filtra
tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip src 192.168.2.0/24
je mozne vyfiltrovat packety, ktore su z danej siete, ale ja by som potreboval vyfiltrovat pakety ktore NIESU z danej siete, teda nieco ako
tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip src ! 192.168.2.0/24
akurat ze to takymto sposobom nefunguje a neviem najst k tomu help. Je nieco podbne vobec mozne pomocou u32?
Tak myslím, že tady pomůže jen markovat pomocí iptables:
iptables -A PREROUTING -t mangle -i eth0 -s ! 192.168.2.0/24 -j MARK --set-mark 6
+ tc fwmark match:
tc filter add dev eth0 protocol ip parent 1:0 prio 10 handle 6 fw flowid 1:1
Místo čísla 6 může být zvoleno libovolné jiné.
Převzato z http://www.lartc.org
Pri cteni vsech techto clanku, jsem dostal chut si HBT taky vyzkouset. Ale nez neco delam, tak planuju jak na to.
Jestli jsem to dobre pochopil, tak pokud by slo jen o pristup na internet funguje deleni pasma v pohode. Pokud by nekdo pristupoval k tomutop serveru jako na File server, a chtel vyuzit maximalky sitovky, coz je 100Mbit tak ma smulu a dostane jen pridelenych napr. 80kB. Mam pravdu?
Jestli ano, nesel by tento problem resit virtualnim rozhranim? A povesit IMAP, SAMBU ... treba jen na tento virtualni interface? Prave ze nevim, jestli dojde k shapovani i na virtualnim interface kdyz byl vytvoren z fyzickeho?
Muze mi nekdo potvrdit nebo vyvratit tuto ideu?
Diky