# uname -r
4.7.5-200.fc24.x86_64+debug
# tc -s -d qdisc show dev ens3
qdisc mq 8001: root
Sent 44589 bytes 340 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0
qdisc fq_codel 0: parent 8001:1
limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms ecn Sent 90 bytes 1 pkt (dropped 0, overlimits 0 requeues 0)
[...]
qdisc fq_codel 0: parent 8001:2
limit 10240p flows 1024 quantum 1514 target 5.0ms interval
100.0ms ecn Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) [...]
-> 当尝试替换...
# tc qdisc replace dev ens3 parent 8001 handle :1 sfq
Error: argument ":5" is wrong: invalid qdisc ID
# tc qdisc replace dev ens3 handle 8001:1 sfq
RTNETLINK answers: Invalid argument
# tc qdisc replace dev ens3 parent 8001 handle 1 sfq
RTNETLINK answers: No such file or directory
# tc qdisc replace dev ens3 parent 8001:1 sfq
RTNETLINK answers: No such file or directory
具体的 qdisc 超出了本文的范围。不过,这很有意义,尤其是对于较旧的内核,其中默认的 qdisc 是 FIFO!
根据代码应该是可能的:
http://lxr.free-electrons.com/source/net/sched/sch_api.c#L1214
饶过你简单的 tc 代码路径。它只是从 cli 输入构建一个到内核的 netlink 消息。
我还没有追踪过,它可能很简单。:)
有人曾经在多任务实例中交换过叶子吗?我在构建 cli 调用时是否出错了?
答案1
嗯,从整体上来说,可以通过更改默认 qdisc 来解决这个问题,因为 mq 确实初始化了它,并将其保留为默认 qdisc。所以...
sysctl -w net.core.default_qdisc=<your_qdisc>
tc qdisc replace dev <your iface> root mq
可以验证一下...
tc -s qdisc show <your iface> ens3
不过,个人可设置性有其魅力。我可能会在需要的时候实现它。:)