Skip to contentSkip to conversation

can't add tc multiq

DISCUSSION Applied Badalian Vyacheslav 4 participants 13 messages Feb 9, 2009 – Feb 10, 2009

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

Hello all!
kernel 2.6.28.4
iproute2 - last git
Can't use multiq qdisc. How to fix this?
Thanks!

slavon ~ # tc qdisc add dev eth0 root handle 1: multiq RTNETLINK answers: Invalid argument
slavon ~ # tc qdisc add dev eth1 root handle 1: multiq RTNETLINK answers: Invalid argument

# lsmod
Module                  Size  Used by
sch_multiq              9472  0
8021q                  23200  0
xt_tcpudp               7040  0
iptable_filter          6784  0
ip_tables              15120  1 iptable_filter
x_tables               17028  2 xt_tcpudp,ip_tables
usbmouse                8064  0
usbhid                 37728  2
ehci_hcd               38284  0
snd_hda_intel         409776  6
uhci_hcd               26380  0
snd_pcm                72196  2 snd_hda_intel
usbcore               133136  7 usbmouse,usbhid,ehci_hcd,uhci_hcd
snd_timer              23304  2 snd_pcm
snd_page_alloc         12296  2 snd_hda_intel,snd_pcm
thermal                19356  0
snd_hwdep              11140  1 snd_hda_intel
processor              37024  1 thermal
i2c_i801               12944  0
snd                    52516  14 snd_hda_intel,snd_pcm,snd_timer,snd_hwdep
r8169                  36100  0
i2c_core               24724  1 i2c_i801
fglrx                1905884  3
e1000                 123076  0
rng_core                8196  0
mii                     8704  1 r8169
thermal_sys            15144  2 thermal,processor
button                 10128  0
#1 lore raw
Quoted 34 lines · On Mon, 09 Feb 2009 11:43:26 +0300 Badalian Vyacheslav <[email protected]>…

Hello all!
kernel 2.6.28.4
iproute2 - last git
Can't use multiq qdisc. How to fix this?
Thanks!

slavon ~ # tc qdisc add dev eth0 root handle 1: multiq RTNETLINK answers: Invalid argument
slavon ~ # tc qdisc add dev eth1 root handle 1: multiq RTNETLINK answers: Invalid argument

# lsmod
Module                  Size  Used by
sch_multiq              9472  0
8021q                  23200  0
xt_tcpudp               7040  0
iptable_filter          6784  0
ip_tables              15120  1 iptable_filter
x_tables               17028  2 xt_tcpudp,ip_tables
usbmouse                8064  0
usbhid                 37728  2
ehci_hcd               38284  0
snd_hda_intel         409776  6
uhci_hcd               26380  0
snd_pcm                72196  2 snd_hda_intel
usbcore               133136  7 usbmouse,usbhid,ehci_hcd,uhci_hcd
snd_timer              23304  2 snd_pcm
snd_page_alloc         12296  2 snd_hda_intel,snd_pcm
thermal                19356  0
snd_hwdep              11140  1 snd_hda_intel
processor              37024  1 thermal
i2c_i801               12944  0
snd                    52516  14 snd_hda_intel,snd_pcm,snd_timer,snd_hwdep
Quoted 8 lines
r8169                  36100  0
i2c_core               24724  1 i2c_i801
fglrx                1905884  3
e1000                 123076  0
rng_core                8196  0
mii                     8704  1 r8169
thermal_sys            15144  2 thermal,processor
button                 10128  0

You need hardware with multiple transmit queues. Neither e1000 or r8169 has this.

#2 lore raw

Stephen Hemminger wrote, On 02/09/2009 05:15 PM:

Quoted 11 lines
Quoted 8 lines · On Mon, 09 Feb 2009 11:43:26 +0300 Badalian Vyacheslav <[email protected]>…

Hello all!
kernel 2.6.28.4
iproute2 - last git
Can't use multiq qdisc. How to fix this?
Thanks!

slavon ~ # tc qdisc add dev eth0 root handle 1: multiq RTNETLINK answers: Invalid argument

...

Quoted 2 lines

You need hardware with multiple transmit queues. Neither e1000 or r8169 has this.

------------------->
pkt_sched: sch_multiq: Warn on non-multiqueue devices.

Current "RTNETLINK answers: Invalid argument" warning, while trying to add multiq qdisc to non-multiqueue device, isn't very helpful and some of these devs can be changed btw., so let's add a small printk.

With feedback from Stephen Hemminger <[email protected]>

---

 net/sched/sch_multiq.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
net/sched/sch_multiq.c +4 -1
index 7e15186..a38f0c1 100644
@@ -201,8 +201,11 @@ static int multiq_tune(struct Qdisc *sch, struct nlattr *opt)
 	struct tc_multiq_qopt *qopt;
 	int i;
 
-	if (!netif_is_multiqueue(qdisc_dev(sch)))
+	if (!netif_is_multiqueue(qdisc_dev(sch))) {
+		printk(KERN_WARNING "multiq: dev %s isn't multiqueue.\n",
+		       qdisc_dev(sch)->name);
 		return -EINVAL;
+	}
 	if (nla_len(opt) < sizeof(*qopt))
 		return -EINVAL;
 
#3 lore raw
Quoted 37 lines · On Mon, 9 Feb 2009 22:44:47 +0100 Jarek Poplawski <[email protected]> wrote:

Stephen Hemminger wrote, On 02/09/2009 05:15 PM:

Quoted 11 lines
Quoted 8 lines · On Mon, 09 Feb 2009 11:43:26 +0300 Badalian Vyacheslav <[email protected]>…

Hello all!
kernel 2.6.28.4
iproute2 - last git
Can't use multiq qdisc. How to fix this?
Thanks!

slavon ~ # tc qdisc add dev eth0 root handle 1: multiq RTNETLINK answers: Invalid argument

...

Quoted 2 lines

You need hardware with multiple transmit queues. Neither e1000 or r8169 has this.

------------------->
pkt_sched: sch_multiq: Warn on non-multiqueue devices.

Current "RTNETLINK answers: Invalid argument" warning, while trying to add multiq qdisc to non-multiqueue device, isn't very helpful and some of these devs can be changed btw., so let's add a small printk.

With feedback from Stephen Hemminger <[email protected]>

---

 net/sched/sch_multiq.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
net/sched/sch_multiq.c +0 -0
index 7e15186..a38f0c1 100644

net/sched/sch_multiq.c static int multiq_tune(struct Qdisc *sch, struct nlattr *opt) · line 207

Quoted 8 lines
net/sched/sch_multiq.c +3 -1
@@ -201,8 +201,11 @@ static int multiq_tune(struct Qdisc *sch, struct nlattr *opt)
 	struct tc_multiq_qopt *qopt;
 	int i;
 
-	if (!netif_is_multiqueue(qdisc_dev(sch)))
+	if (!netif_is_multiqueue(qdisc_dev(sch))) {
+		printk(KERN_WARNING "multiq: dev %s isn't multiqueue.\n",
+		       qdisc_dev(sch)->name);
 		return -EINVAL;

Rather than warning which will buried off on some console that user will never see (and can cause DoS overload). A better errno should be chosen.

#4 lore raw

On Mon, Feb 09, 2009 at 02:40:52PM -0800, Stephen Hemminger wrote:
...

Quoted 2 lines

Rather than warning which will buried off on some console that user will never see (and can cause DoS overload). A better errno should be chosen.

I think admins are used to reading console messages, but we can try with a better errno too.

Thanks,
Jarek P.
-------------------> take 2

pkt_sched: sch_multiq: Change errno on non-multiqueue devices use.

Current "RTNETLINK answers: Invalid argument" warning, while trying to add multiq qdisc to non-multiqueue device, isn't very helpful and some of these devs can be changed btw., so let's use a better errno.

With feedback from Stephen Hemminger <[email protected]>

---

 net/sched/sch_multiq.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
net/sched/sch_multiq.c +1 -1
index 7e15186..9127312 100644
@@ -202,7 +202,7 @@ static int multiq_tune(struct Qdisc *sch, struct nlattr *opt)
 	int i;
 
 	if (!netif_is_multiqueue(qdisc_dev(sch)))
-		return -EINVAL;
+		return -EOPNOTSUPP;
 	if (nla_len(opt) < sizeof(*qopt))
 		return -EINVAL;
 
maintainer Applied
#5 lore raw

From: Jarek Poplawski <[email protected]>
Date: Tue, 10 Feb 2009 07:41:54 +0000

Quoted 10 lines

pkt_sched: sch_multiq: Change errno on non-multiqueue devices use.

Current "RTNETLINK answers: Invalid argument" warning, while trying to add multiq qdisc to non-multiqueue device, isn't very helpful and some of these devs can be changed btw., so let's use a better errno.

With feedback from Stephen Hemminger <[email protected]>

Applied, thanks everyone.

#6 lore raw
In reply to Jarek Poplawski

Thanks all! i will go to buy e1000e.

Quoted 44 lines · Stephen Hemminger

...

Quoted 3 lines

Rather than warning which will buried off on some console that user will never see (and can cause DoS overload). A better errno should be chosen.

I think admins are used to reading console messages, but we can try with a better errno too.

Thanks,
Jarek P.
-------------------> take 2

pkt_sched: sch_multiq: Change errno on non-multiqueue devices use.

Current "RTNETLINK answers: Invalid argument" warning, while trying to add multiq qdisc to non-multiqueue device, isn't very helpful and some of these devs can be changed btw., so let's use a better errno.

With feedback from Stephen Hemminger <[email protected]>

---

 net/sched/sch_multiq.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
net/sched/sch_multiq.c +1 -1
index 7e15186..9127312 100644
@@ -202,7 +202,7 @@ static int multiq_tune(struct Qdisc *sch, struct nlattr *opt)
 	int i;
 
 	if (!netif_is_multiqueue(qdisc_dev(sch)))
-		return -EINVAL;
+		return -EOPNOTSUPP;
 	if (nla_len(opt) < sizeof(*qopt))
 		return -EINVAL;
 
#11 lore raw
In reply to Stephen Hemminger

Sorry. I have 2 different e1000e and its also can't apply multiq. How get number of hardware queues of device?

Thanks

Quoted 56 lines
Quoted 34 lines · On Mon, 09 Feb 2009 11:43:26 +0300 Badalian Vyacheslav <[email protected]>…

Hello all!
kernel 2.6.28.4
iproute2 - last git
Can't use multiq qdisc. How to fix this?
Thanks!

slavon ~ # tc qdisc add dev eth0 root handle 1: multiq RTNETLINK answers: Invalid argument
slavon ~ # tc qdisc add dev eth1 root handle 1: multiq RTNETLINK answers: Invalid argument

# lsmod
Module                  Size  Used by
sch_multiq              9472  0
8021q                  23200  0
xt_tcpudp               7040  0
iptable_filter          6784  0
ip_tables              15120  1 iptable_filter
x_tables               17028  2 xt_tcpudp,ip_tables
usbmouse                8064  0
usbhid                 37728  2
ehci_hcd               38284  0
snd_hda_intel         409776  6
uhci_hcd               26380  0
snd_pcm                72196  2 snd_hda_intel
usbcore               133136  7 usbmouse,usbhid,ehci_hcd,uhci_hcd
snd_timer              23304  2 snd_pcm
snd_page_alloc         12296  2 snd_hda_intel,snd_pcm
thermal                19356  0
snd_hwdep              11140  1 snd_hda_intel
processor              37024  1 thermal
i2c_i801               12944  0
snd                    52516  14 snd_hda_intel,snd_pcm,snd_timer,snd_hwdep
Quoted 9 lines
r8169                  36100  0
i2c_core               24724  1 i2c_i801
fglrx                1905884  3
e1000                 123076  0
rng_core                8196  0
mii                     8704  1 r8169
thermal_sys            15144  2 thermal,processor
button                 10128  0

You need hardware with multiple transmit queues. Neither e1000 or r8169 has this.
--
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

#8 lore raw

Ohh... so small. e1000 and e1000e not have hw queues in life or its simple not have implementation in driver?
Thanks again and again!

Quoted 11 lines · Badalian Vyacheslav
Quoted 3 lines

Thanks all! i will go to buy e1000e.

Try to grep in drivers/net for 'alloc_etherdev_mq' to find multiqueue NICs/drivers.

Jarek P.

#9 lore raw
Quoted 1 line · Badalian Vyacheslav

Ohh... so small.

Yes. (I hope you didn't forget -R with grep.)

Quoted 2 lines

e1000 and e1000e not have hw queues in life or its simple not have implementation in driver?

I don't know.

Jarek P.

#10 lore raw

Jarek Poplawski пишет:

Quoted 7 lines · Badalian Vyacheslav
Quoted 3 lines

Ohh... so small.

Yes. (I hope you didn't forget -R with grep.)

yep

Quoted 7 lines
Quoted 4 lines

e1000 and e1000e not have hw queues in life or its simple not have implementation in driver?

I don't know.

Thanks for all!

Quoted 3 lines

Jarek P.

#12 lore raw
In reply to Badalian Vyacheslav
Quoted 3 lines · On Tue, 10 Feb 2009 14:37:18 +0300 Badalian Vyacheslav <[email protected]>…

Sorry. I have 2 different e1000e and its also can't apply multiq. How get number of hardware queues of device?

e1000e is not multiqueue either, the only intel 1G card that does multiqueue is the 82575/82576 gigabit ethernet family which uses the "igb" driver.