pipes und queues

eMpTy<

Member
hi
ich habe ein kleines verständnisproblem

per google habe ich nach ipfw und dummynet gesucht, weil mich das mit den pipes und queues interresiert ...

einmal habe ich was gefunden da wird mir erklärt das man die queues für dynamische regeln benötigt, also wenn man auf einer pipe 100k hat, das man dann den einzelnen queues (je nachdem wieviele momentan benutzt werden) prioritäten und somit bandbreite zuweißt

und einmal wird mir das mit den queues in zusammenhang mit MTU und networktrafic erklärt ... also das standard 50 queues sind und 50*1500MTU = 600Kbit/s sind und man da probleme bekommen könnte wenn man hier zb 56Kbit/s hätte, da es dann 10.7 sekunden dauern würde bis die queue voll ist und somit extrem große delays die folge sind

kann mir eventuell jemand helfen für was sind jetzt die queues und pipes ???
oder nen hinweis geben wo das auch für newbies wie mich erklärt wird ^^

ich dachte pipes von wo nach wo fest
und queues um die pipes dynamisch zu machen

und dann kommt da wer und erzählt was über MTU usw.
im prinzip muss ich ja dann jetzt meine bandbreite immer voll ausnutzen, da ich sonst delay bekomme ??? kann ja nicht sein ...
 
Mit den MTUs hat das ganze erstmal recht wenig zu tun. Eine Pipe definiert einen Link mit bestimmten Eigenschaften (bandwidth, delay, packet loss) und die kannst du entweder direkt fuettern, oder du laesst diese Pipe von Queues bedienen.

Die Queues stopfen dann soviel in die Pipe wie geht (da gibts 918271 Parameter zum rumspielen), allerdings haben manche Queues eine hoehere Prioritaet und koennen mehr Pakete in die Pipe bringen.

Man kann das ganze allerdings auch ganz anders auffassen (nicht queue/pipe wie bei ipfw sondern altq bei pf). Da hat man dann halt nicht mehr mit FIFO-Queues zu tun, aber das aendert auch an der MTU nix. Wo haste denn das mit den MTUs her?
 
aus nem FreeBSD HOWTO

This is important to understand because the default queue for
pipes is 50 slots and it may especially be too large on network devices
with a large MTU and a very low bandwidth limitation. 50 was chosen as the
default because it is the typical queue size for ethernet devices. Under
normal circumstances it is imperceptible, however, when small bandwidth
limitations are imposed it'd take a long time to fill the queue and this
would create horrible network delays. For instance, if we set the
following pipe on an ethernet LAN to simulate a 56K modem:

pipe 10 config bw 56Kbit/s

... and we do not set a smaller MTU for the device with
ifconfig(8) or set a smaller queue (preferred approach), the queue into
which packets would be pumped for the pipe to enforce its bandwidth
limitation would be 1500 bytes (12000 bits) x 50 = 600Kbits. For a pipe
which is capping the bandwidth to 56Kbit/s it would take roughly 10.7
seconds (600Kbits / 56Kbit/s) to fill a 600Kbit queue. Such delays would
be a severe monkey wrench in the experiment. To avoid such complications,
it is strongly advisable to manually set the queue sizes that each pipe
uses. As we have noted earlier, the default queue size is set using slots
- 50 of them.

und ich verstehe das so ... wenn ich meine queues nicht selbst definiere, dann sind als stabdard 50 drin ... und 1500 MTU is auch standard ... und dann komme ich bei einer konfiguration wie oben zum selben problem ??? -> delay ???

aber ich glaube so langsam verstehe ich das ... anscheinend gehts da nur um die gefahren und nicht um die anwendung und das andere ist dann die anwendung ??? ... wobei mich dann wundert, weshalb bei einer beschreibung der anwendung nicht auf die gefahren hingewiesen wird ???
 
Hummm, wenn Layer2 erst Frames verschickt, wenn er 1500B voll hat, dann wird das mit der Queue natuerlich nichts. Ich bin mir aber nicht sicher, wer hier wieviel aggregiert. Und selbst wenn man dann eine kleine Queue nimmt, warum sollte gerade dann das Ethernet Frame schon frueher verschickt werden? Wird beim Ueberlauf der Queue das Frame "geflusht".

Aber mir ist die Interaktion mit den niederen Schichten nicht bekannt, kann also nix weiter dazu sagen.
 
jo danke für deine mühen :D

ich glaub einfach mal das was da stehet ... aber so wirklich glauben tu ich nicht dran :P ... ich werde einfach mal schaun das ich was zusammenbekomme wo ich das ausprobieren kann ^^

und momentan geh ich einfach nach wie vor davon aus das man mit queues dynamische regeln für pipes festlegen kann ^^ .. und das mit den mtus behalte ich mal im hinterkopf
 
*push*

es tut mir sehr leid das ich jetzt doch nochmal etwas fragen muss aber ich glaube ich habe da in dem englischen howto etwas falsch verstanden gehabt ...

also so wie ich das jetzt verstehe ...

ich kann pipes und queues definieren ... queues kann ich dann prioritäten geben und sie pipes zuweisen ... sie teilen sich dann die bandbreite der pipe je nach priorität

dann gibt es noch eine möglichkeit queue in einer pipe zu setzen ...

zb.: ipfw pipe 1 config queue 20

damit weiße ich dieser pipe 20 queues bzw. 20 slots zu die dann von der jeweiligen MTU abhängig sind ... oder ich gebe das ganze direkt in byte an

zb.: ipfw pipe 1 config queue 5kByte

damit hat die queue dieser pipe keine slots mehr sondern einen festen kByte wert ... ist somit unabhängig von der MTU ...

so da habe ich dann jetzt mein erstes problem ... es ist mir zwar inzwischen klar das queue nicht gleich queue ist, was aber ist eine queue in einer pipe ... also was macht der befehl oben genau ... für was sind diese queues in der pipe ( die ich in slots angeben kann) ist das so ne art zwischenspeicher ???

mein zweites problem ist, dass ich die selbst definierten queues ...

zB.: ipfw add queue 20 ip from "a" to "b"
mit diesem befehl mache ich mir eine queue 20 (nicht 20 slots) ... diese queue kann ich dann mit einer prio einer pipe zuweisen

zb.: ipfw queue 20 config pipe 1 weight 30

soweit so gut ... wenn ich mir mit "ipfw pipe list" jetzt alle pipes und queues anzeigen lasse, dann sehe ich ungefähr folgendes

00001: unlimited 0ms 20 sl. 0 queues (1buckets) droptail
mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
q0020: weight 30 pipe 1 50 sl. 0 queues (1buckets) droptail
mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000

die queue 20 ist also der pipe 1 zugewiesen, aber pipe 1 sagt mir das sie 0 queues besitzt ??? ... oder werden mir die erst angezeigt wenn die queue 20 aktiv genutzt wird ??? ... ich bekomme irgendwie nix hin das mir da eine andere zahl als 0 angezeigt wird
 
Zurück
Oben