Loading... 1. 清除tc策略 `tc qdisc del dev eth0 root` 2. 添加HTB队列管理器 `tc qdisc add dev eth0 root handle 1: htb default 1 r2q 150` * r2q默认值是10,根据需要进行调整,建议首次设置的时候删除 `r2q 150`参数,具体原因看下一行代码 3. 添加HTB类 `tc class add dev eth0 parent 1: classid 1:1 htb rate 30mbit ceil 30mbit` * rate是保证速度,ceil是最大限速,要求ceil大于等于rate,上方代码设置的最低和最高限速是30mbps * 如果遇到类似报错 `Warning: sch_htb: quantum of class 10001 is big. Consider r2q change.`请先执行第1步代码清空策略,然后调整第2步代码的r2q的值,往更大的值调整,直到执行第3步代码不再有报错 * 关于r2q值的调整,末尾有解释 4. 添加TBF队列 `tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 30mbit burst 1560b latency 50ms` 5. 添加过滤器 `tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dst 0.0.0.0/0 flowid 1:1` 6. 执行检查 `tc class ls dev eth0` * 输出类似 `class htb 1:1 root leaf 10: prio 0 rate 30Mbit ceil 30Mbit burst 1593b cburst 1593b` * `class tbf 10:1 parent 10:`则无误,这里的限速以30mbps为例,输出的限速速度根据第3步的设置速度参考即可 7. 执行检查 `tc qdisc ls dev eth0` * 输出类似 `qdisc htb 1: root refcnt 2 r2q 150 default 0x1 direct_packets_stat 347 direct_qlen 1000` * `qdisc tbf 10: parent 1:1 rate 30Mbit burst 1556b lat 50ms`则无误,这里的限速以30mbps为例,输出的限速速度根据第3步的设置速度参考即可 ## r2q值解释 以下是来自Grok的解释: ====== 在 Linux 网络流量控制中,`r2q`(rate to quantum)是一个用于调节 HTB(Hierarchical Token Bucket)队列管理器中每个类(class)处理数据包的参数。以下是对 `r2q` 值调整的解释: ### `r2q` 是什么? - **`r2q` 是 "rate to quantum" 的缩写**:它决定了每个类(class)在轮流处理数据包时可以处理的最大数据量(以字节为单位),称为 `quantum`。 - **计算公式**:`quantum = rate / r2q`,其中 `rate` 是类设置的带宽速率。 ### 调整 `r2q` 的影响: 1. **减小 `quantum`**: - **增大 `r2q` 值**:如果您增加 `r2q` 值,`quantum` 会变小。这意味着每个类在轮流处理数据包时能够处理的数据量减少。 - **优点**: - 更公平地分配带宽,特别是在有大量小数据包的场景下。 - 可以减少大数据包在低带宽类中的积压,提高网络响应性。 - **缺点**: - 可能增加处理开销,因为每个类每次处理的数据量减少,导致更频繁的上下文切换。 - 对于大量传输大数据包的流量,过小的 `quantum` 可能降低传输效率。 2. **增大 `quantum`**: - **减小 `r2q` 值**:如果您减少 `r2q` 值,`quantum` 会变大。 - **优点**: - 对于大数据包流量,可以提高传输效率,因为每个类可以处理更多的数据。 - 减少处理开销,因为每个类处理的数据量增加。 - **缺点**: - 可能导致带宽分配不公平,特别是当有小数据包流量需要快速响应时。 ### 实际应用: - **默认值**:默认的 `r2q` 值通常为10。这意味着如果您设置一个类的带宽为30Mbps,那么 `quantum` 会是30Mbps / 10 = 3Mbps(即375KB)。 - **调整策略**: - **网络环境**:根据您的网络流量特性调整 `r2q` 值。对于有大量小数据包的网络环境,增加 `r2q` 可能更合适;对于大文件传输或流量较为平稳的场景,降低 `r2q` 可能更好。 - **设备性能**:考虑到设备的处理能力,过小的 `quantum` 可能增加设备的负担。 - **公平性和效率**:在确保流量处理公平性的同时,也要考虑到整体网络效率。 ### 总结: 调整 `r2q` 值是网络流量控制中的一种策略,旨在通过改变每个类处理数据包的量来平衡带宽分配的公平性和网络传输的效率。根据您的网络需求和设备性能,适当地调整 `r2q` 值可以优化网络的表现。 ====== 对于示例中的代码,30mbps接口速率下r2q调整为150的解释 ====== @@@@@@ **在30Mbps的带宽限制下,将 `r2q` 调整到150会对网络流量处理产生以下影响:** ### 计算 `quantum`: - **公式**: `quantum = rate / r2q` - **使用您的参数**: `quantum = 30Mbps / 150` - **结果**: `quantum ≈ 0.2Mbps` 或约25.6KB ### 影响解释: 1. **更公平的带宽分配**: - **小 `quantum` 值**:`quantum` 值非常小(约25.6KB),这意味着每个类在轮流处理数据包时处理的数据量很小。这有助于在多个流量流之间实现更公平的带宽分配,特别是当有大量小数据包需要处理时。 2. **可能的性能影响**: - **增加处理开销**:由于每个类每次只能处理很小量的数据,可能会增加处理开销,因为需要更频繁地切换到其他类来处理数据包。这种情况下,处理小数据包(如 VoIP 流量)可能会表现得更好,但对于大量传输大文件的场景,可能会降低效率。 3. **网络特性**: - **适合小数据包流量**:这种设置对小数据包流量(如网络游戏、实时通信)非常有利,因为它们可以快速获得处理时间,减少延迟。 - **可能不利于大文件传输**:对于大文件传输,由于每个类处理的数据量很小,可能会导致传输速度降低。 4. **设备性能**: - **考虑设备限制**:确保您的网络设备能够有效地处理这种设置。过小或过大的 `quantum` 值可能会影响到设备的性能。 ### 实际应用: - **网络环境**:如果您的网络环境中包含大量的小数据包流量(如 VoIP、视频会议、在线游戏),这种设置可能非常合适。 - **带宽管理**:这种设置有助于确保即使在带宽受限的情况下,关键应用或服务(如 VoIP)也能获得所需的带宽。 ### 总结: 将 `r2q` 调整到150 在30Mbps的带宽限制下确实会使每个类处理的数据量变得非常小,这有利于小数据包的公平处理和快速响应。但对于大数据包或大文件传输,可能需要考虑更高的 `r2q` 值,以平衡公平性和效率。根据您的网络流量特性和应用需求,适当地调整 `r2q` 值可以优化网络的表现。 ====== 以上,根据需求调整r2q的值,当然也可以忽略 `Warning: sch_htb: quantum of class 10001 is big. Consider r2q change.`报错,全凭喜好 最后修改:2024 年 12 月 27 日 © 允许规范转载 打赏 赞赏作者 赞 如果觉得我的文章对你有用,请随意赞赏