我研究了 tc-HTB 的行为。
我做了如下的 tc 设置。
看完之后tbf 中的 bucket,我预计它的突发大小将是 rate / HZ。
sudo /sbin/tc qdisc del dev s1-eth1 root
sudo /sbin/tc qdisc add dev s1-eth1 root handle 1:0 htb
sudo /sbin/tc class add dev s1-eth1 parent 1:0 classid 1:1 htb rate 200mbit
sudo /sbin/tc filter add dev s1-eth1 protocol ip parent 1:0 prio 1 u32 \
match ip tos 0x0 0x0 flowid 1:1
但事实并非如此。结果如下。突发值为 1600。我认为与 200Mbps 的速率相比,这个值太小了。
sudo tc -s -s -d -r c ls dev s1-eth1
class htb 1:1 root prio 0 quantum 200000 rate 200000Kbit ceil 200000Kbit
linklayer ethernet burst 1600b/1 mpu 0b overhead 0b cburst 1600b/1 mpu 0b
overhead 0b level 0 buffer [000003e8] cbuffer [000003e8]
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 1000 ctokens: 1000
我还找到了tc-htb
源代码。iproute2/tc/q_htb.c
还说
//Buffer value is given from burst argument.
if (!buffer)
buffer = rate64 / get_hz() + mtu;
if (!cbuffer)
cbuffer = ceil64 / get_hz() + mtu;
尽管有源代码,
为什么突发值相对于其速率来说很小?
当然,我可以burst
根据需要添加选项。
但我想知道突发值自动这么小的原因。
你能给我一点提示吗?
谢谢!