qlen 1000 对于 noqueue qdisc 意味着什么

qlen 1000 对于 noqueue qdisc 意味着什么

ip addr show来自 Kubernetes Pod 的输出

root@customer-fd99fb7dc-82hrr:/app# ip -c addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 8e:e3:d2:b5:d2:94 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.171.139/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::8ce3:d2ff:feb5:d294/64 scope link 
       valid_lft forever preferred_lft forever

etho0@1f6是该对的一端veth。这解释了qdisc noqueue

我对 noqueue qdisc 的理解是,它立即发送网络数据包(如果可以的话),否则会丢弃它。所以,我假设 noqueue 不受任何队列支持。但是,qlen 1000与我的理解相矛盾。

这是否意味着noqueue有一个内部队列?我可以将 noqueue qdisc 视为 pfifo_fast 减去 3 个内部类/带吗?

答案1

qlen是用ip link set eth0 txqueuelen 1000ifconfig eth0 txqueuelen 1000(参见 ifconfig(8)

在内核中它被称为dev->tx_queue_len并且默认为DEFAULT_TX_QUEUE_LEN = 1000.这就是所ip link ls显示的。

当排队规则附加到设备时,它会获取设备qlen设置并使用它。当您将 qdisc 替换为另一个 qdisc 时,它仍然使用相同的qlen.或者像noqueueqdisc 那样忽略它。

(免责声明:不是内核专家)

相关内容