Linux HTB 级别数

Linux HTB 级别数

重新修改Linux 超线程通过添加单个 printk 消息htb_dequeue功能。

static struct sk_buff *htb_dequeue(struct Qdisc *sch)
{
    ... original code
    ... original code
    for (level = 0; level < TC_HTB_MAXDEPTH; level++) {
        printk("Current level in loop is: %d\n", level);
        ... original code
    }
}

官方文档中说:

每个类都分配有级别。叶子类的级别始终为 0,根类的级别为 TC_HTB_MAXDEPTH-1。内部节点的级别比其父节点低一级。

我运行了以下示例:

tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 40kbps ceil 100kbps

             root
               |
               |
             class rate 100kbps ceil 100kbps
               |
             Leaf  rate 40kbps ceil 100kbps

高度应为 2 或 3,不超过 3

但是,运行此程序后,我检查 dmesg 中的输出,得到以下信息:

Current level in loop is: 0
Current level in loop is: 1
Current level in loop is: 2
Current level in loop is: 3
Current level in loop is: 4
Current level in loop is: 5
Current level in loop is: 6
Current level in loop is: 7

我不知道为什么会出现这样的输出,所以我用下面的图表再次运行了它

             root
               |
               |
             class rate 100kbps ceil 100kbps
               |
             class rate 70kbps ceil 100kbps
               |
             Leaf rate 40kbps ceil 100kbps 

我在 dmesg 中看到了相同的输出......

添加 printk 后,我确保正确编译了内核

make
make modules_install
make install
update-initramfs -c -k 4.17.0+
update-grub

重新启动机器,并且内核已更新,因为我有 printk 的输出。

我的问题是:为什么高度是 7 而不是 2 ?

相关内容