Portál AbcLinuxu, 1. listopadu 2025 17:08
- ja jsem spise slysel narky, jak HTB neni dost presne pri vyssich (nad 512kbps) rychlostech... nevim, nejak jsem zamrzl v ere CBQ a nikdo si nikdy na moji implementaci nestezoval...
. Také nevím, jak by jsi efektivněji shapoval např. na více výstupních zařízeních. Myslím, že asi docela ztuha. Jsou hold případy, kdy se použití imq nevyhneme. Nelze říci, že je imq zcela zbytečné a k shapování není třeba. Jsou případy, kdy třeba je a případy, kdy třeba není. To jsem se snažil vysvětlit v článu. Tvoje rekce je celkem zavádějící a nepřesná.
).
$ uptime 14:11:45 up 66 days, 21:26, 1 user, load average: 0.46, 0.45, 0.32pouzivam IMQ pro shapovani provozu pres 4 rozhrani.
--- imq.c.orig 2006-11-18 00:08:42.000000000 +0100
+++ imq.c 2006-12-17 23:34:03.000000000 +0100
@@ -201,13 +201,14 @@
ret = 0;
}
}
- if (spin_is_locked(&dev->xmit_lock))
- netif_schedule(dev);
- else
-
- while (!netif_queue_stopped(dev) &&
- qdisc_restart(dev)<0)
- /* NOTHING */;
+
+
+if (spin_trylock(&dev->xmit_lock)) {
+ qdisc_run(dev);
+ spin_unlock(&dev->xmit_lock);
+}else{
+ netif_schedule(dev);
+}
spin_unlock_bh(&dev->queue_lock);
Asi tak 4 roky zpet jsem potreboval IMQ pro spojeni dvou sitovek v routeru, na ktery jsem potreboval udelat shaping. Brzy to nejspis budu potrebovat znovu, proto jsem se koukal, jestli uz neni nejaka nahrada, protoze patchovat jadro bych jeste prezil, ale jeste dalsi 2 baliky (iproute2 a iptables), to uz je trochu moc.
Prvni vec kterou jsem nasel, byla naprogramovana tusim clovekem s jmenem Jamal Hadi Salim, se zajimavym napadem: Doprogramoval funknost IMQ jako rozsireni vlastnosti dummy zarizeni. Bohuzel jsem uz nenasel zadnou zpravu, zda se to do kernelu dostalo ci nikoliv. Diskuze dummy
Druou vec, kterou jsem nasel je nove zarizeni IFB (Intermediate Functional Block). O tom vim, ze uz se do kernelu dostalo.
Nemate s IFB zkusenot? Mozna by to bylo dobre tema pro dalsi clanek. Diskuze o IFB
iptables -t mangle -A FORWARD -i eth0 -j IMQ --todev 0 iptables -t mangle -A FORWARD -i eth1 -j IMQ --todev 1 ip link set imq0 up ip link set imq1 upZdar Max

iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0 iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 0Nebo použít dvě imq zařízení :
iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0 iptables -t mangle -A PREROUTING -i eth1 -j IMQ --todev 0 iptables -t mangle -A PREROUTING -i eth2 -j IMQ --todev 0 iptables -t mangle -A PREROUTING -i eth3 -j IMQ --todev 0Tvůj první případ by ti omezil (kdyby to fungovalo) jen jeden směr. Říká, že příchozí traffic z eth0 bude posílat do imq0 a odchozí traffic do ostatních interfaceůbude posílán také do imq0. Je to prostě jeden směr. Asi jsi myslel něco, jako je můj druhý příklad. Prostě nasypat vše do PREROUTINGů
iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0 iptables -t mangle -A PREROUTING -i eth1 -j IMQ --todev 1 iptables -t mangle -A PREROUTING -i eth2 -j IMQ --todev 1 iptables -t mangle -A PREROUTING -i eth3 -j IMQ --todev 1Zdar Max
Mluvim o koncepcni zmene s tim, ze CBQ, HTB spolu s IMQ (RedHat asi vi, proc ho nedodadava ve svem enterprise kernelu, ackoli ma spoustu jinych vychytavek, vcetne treba ipt_recent - relativne nova vec v teto oblasti) a podobnymi ostruvky bez ladu a skladu neni jiz nejaky patek treba... jenze to radsi budeme debatovat nad vecmi leta starymi s dobrou dokumentaci, tutorialy atd. (uvadene demostrace jsou stejne spise teoreticka "zakladni" cviceni... a takovych cookbooku na slusny dotaz Googleho najdeme hafo) misto toho abychom psali opravdu o novych, uzitecnych a zajimavych vecech (u kterych je dokumentace poskrovnu a o cookboocich nemuze byt vubec rec) a to nejen z pohledu "kernel trafficu", ale predevsim z pohledu praktickeho vyuziti neceho, co uz je v produkcni fazi od jadra 2.6.11 (?)... Psat takto o IMQ melo smysl pred 2 lety, kdy se v LinuxCz konfere kazdou chvili vyskytoval dotaz na reseni shappingu, ktery inklinoval na vyuziti IMQ (pak by ten clanek mel smysl, protoze zdroju na IMQ bylo malo a mnoha lidem by to pomohlo, dnes se ten smysl znacne vytraci - krome nutnosti vydat denne aspon jeden clanek a odmeny autora), dnes, kdyz mame moderni a ve std. jadre obsazenou alternativu je to mysim trochu zastarale... - je mi lito, ze jsem Vam to musel takto po lopate nasazet a nejste schopen se dovtipit z kratkeho a presne vystizneho sdeleni... A pokud Vam to stale nesecvaklo nevadi, bud mate opravdovy zajem a najdete si podrobnosti, o kterych hovorim, a nebo to stejne nema smysl...
( Robert ví, o čem mluvím ) ..
Dalsi tema k debate na tema charita a co kdo dela/dokazal?
PS: A s tou charitou, docela jste mi nabeh na smec, kupodivu mezi nase reference lze zaradit dve charitativni organizace... (se specialnimi smluvnimi podminkami) - tak zas tak nevyskakujte...

jenže asi jinak než myslíš :) Jakožto člověka s rakovinou mě nemůže nějaký Pavel Janousek rozhodit
Zatím jsem se nedal zubaté, tak proč bych měl nějakému prudiči
To víš, někteří lidé neocení ani snahu ani čas vynaložený pro ty, co nemrskají anglinu jak bozi, potřebují to polopatě ale rádi by tomu přišli na kloub. Já ti děkuju za smysluplné, pěkně ilustrované a hlavně ČESKÉ články, kterých je opravdu málo.
"$TC qdisc add dev eth1 root handle 1:0 prio"hlavní třídu (jestli jsem to napsal správně). Problém je pouze ten že já QoS nechci používat na hlavní bráně. QoS chci použít na router kde každé rozhraní bude komunikovat s každým rozhraním a to ještě o různých rychlostech, tam se toto použít bohužel nedá.
Patch je zde:
--- imq.c.orig 2006-11-18 00:08:42.000000000 +0100
+++ imq.c 2006-12-17 23:34:03.000000000 +0100
@@ -201,13 +201,14 @@
ret = 0;
}
}
- if (spin_is_locked(&dev->xmit_lock))
- netif_schedule(dev);
- else
-
- while (!netif_queue_stopped(dev) &&
- qdisc_restart(dev)<0)
- /* NOTHING */;
+
+
+if (spin_trylock(&dev->xmit_lock)) {
+ qdisc_run(dev);
+ spin_unlock(&dev->xmit_lock);
+}else{
+ netif_schedule(dev);
+}
spin_unlock_bh(&dev->queue_lock);
--- imq.c.orig 2006-11-18 00:08:42.000000000 +0100
+++ imq.c 2006-12-17 23:34:03.000000000 +0100
@@ -201,13 +201,14 @@
ret = 0;
}
}
- if (spin_is_locked(&dev->xmit_lock))
- netif_schedule(dev);
- else
-
- while (!netif_queue_stopped(dev) &&
- qdisc_restart(dev)<0)
- /* NOTHING */;
+
+
+if (spin_trylock(&dev->xmit_lock)) {
+ qdisc_run(dev);
+ spin_unlock(&dev->xmit_lock);
+}else{
+ netif_schedule(dev);
+}
spin_unlock_bh(&dev->queue_lock);
(mezery si budete muset asi bohužel dosadit sami)
Toto neni pravda, pokud mate linux jako router (a o tom tenhle serial je, ne?) a udelate si na nem bridge z nekolika (ne vsech) fyzickych rozhrani, br0 bude mit ip adresu a je to stejne zarizeni jako napr. ethernet a muzete na nej tedy pouzivat i iptables a QoS (ja to takto provozuji bez problemu s HTB). Vase pripominka plati pouze v pripade, ze z linuxu delate switch a ne router, tedy neprochazi "skrz" nej zadna data a ani nemusi mit IP adresu (i kdyz kvuli vzdalene sprave si ji tam zrejme date).
Jinak hezky clanek, uz o pouziti IMQ uvazuji dost dlouho, ale stale cekam, az se to vic usadi a pripadne dostane do distribucniho jadra.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.