David S. Miller wrote:
From: Patrick McHardy <[EMAIL PROTECTED]>
Date: Wed, 13 Jul 2005 01:38:37 +0200

If its about outgoing traffic, shouldn't a prio-qdisc as root qdisc do
just fine? skb->priority can be used to select a queue. Incoming traffic
with pre-classification by the NIC would require multiple input queues
though ..

I forgot what the real problem was, sorry.

Yes, the issue is on outgoing traffic, and it has to do with
netif_queue_stop().  We need one piece of queue plugging state for
every queue the hardware supports.

So if queue 0 fills up, packets can still be queued for
queue 1, 2, ...  This can't be cleanly done with a single
binary queue-stopped state like we have now.

Thomas and me both came up with this idea:

We have multiple queue states, one for each hardware TX queue.
But instead of multiple qdiscs per device we add a "prio"-argument
to the dequeue-function. The top-level qdisc is dequeued with the
highest active priority and hands out a packet of this priority, or,
if it doesn't support priorities, any packet. The priority of the
dequeued packet is either passed as argument to hard_start_xmit or
stored in skb->priority. This approach has a great advantage over
multiple top-level qdiscs, we can use all the existing classification
stuff, including SO_PRIORITY etc., and non-work-conserving qdiscs
like HTB, HFSC, ... can still be used to enforce bandwidth limits.
It should be possible to implement it in a way that causes only minimal
overhead for devices not supporting multiple TX queues.

If everyone can agree to this approach I'll hack something up.

Regards
Patrick
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to