




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、LinuxHtb 队列规定指南中文版(转载)http:/ 作者:wingger 发表于:2006-11-0711:41:20【发表评论】【查看原文】【Linux 讨论区】【关闭】英文原版:http: 官方网站:http:/luxik.cdi.cz/devik/qos/htb/LINUXHTB 队列规定是 LINUXQOS 内容的部分,主要是配合 TC 工具进行流量控制的一种算法,和CBQ 比 HTB 有它自身的特点,有关 CBQ 勺资料相对比较多一些.这是 HTB 网站上的一篇用户手册;LINUXHTB 队列规定用户指南HTBLinuxqueuingdisciplinemanual-userg
2、uideMartinDeveraakadevik(devikcdi.cz)Manual:devikandDonCohenLastupdated:5.5.2002译者:龚关 1. Introduction 介绍2. Linksharing 链路共享3. Sharinghierarchy 共享层次4. Rateceiling 速率限度5. Burst 突发6. Priorizingbandwidthshare 带宽分配优先7. Understandingstatistics 查看统计8. Making,debuggingandsendingerrorreports 开发,调试和错误报告1. Int
3、roduction 介绍HTB 意味着是一个更好理解更容易掌握的可以快速替换 LINUXCBQ 队列规定的队列,CBQ和 HTB 都可以帮助你限制你的链路上的出口带宽;他们允许你把一条物理链路模拟成几条更慢的链路或者是把发出的不同类型的流量模拟成不同的连接,在他们的实际应用中,你必须指定怎么分配物理链路给各种不同的带宽应用并且如何判断每种不同的应用的数据包是怎么样被发送的;这篇文章将告诉你怎么使用 HTB.这里有很多的例子和分析图以及一些特殊问题的讨论.这个 HTB 的发布版本已经有更多的升级,详细情况请看 HTB 的主页.请先查阅:TC 工具(不仅仅是 HTB)有关速率的单位换算:kbps=
4、kilobyteskbit=kilobits2. Linksharing 链路共享案例:我们有两不同的用户 A 和 B,都通过网卡 eth0 连接到 internet,我们想分配 60kbps 的带宽给 B 和 40kbps 的带宽给 A,接下来我们想对 A 用户的带宽再做一个分配,给 30kbps的带宽给WWW务,10kbps 的带宽给其他用途;任何没有用的带宽可以分配和其他需要带宽类(在分配的总带宽允许的范围内的部分)HTB 可以保障提供给每个类带宽的数量是它所需求的最小需求或者等于分配给它的数量.当一个类需要的带宽少于分配的带宽时,剩余的带宽被分配给其他需要服务的类.注:这里这种情况被称
5、为“借用”剩余带宽,我们以后将用这个术语,但无论如何,好像很不好因为这个“借用”是没有义务偿还的.上面所提到的不同类型的流量在 HTB 里表现为类,上面是一个简单的分布图我们来看看所用到的命令:tcqdiscadddeveth0roothandle1:htbdefault12这条命令分配了 HTB 队列规定给 eth0 并且指定了一个名称为(handle1:)句柄 1:,这个名称用于标识它下面的子类,default12 的意思是没有被分类的流量被分配到类 1:12注:一般(不仅仅是 HTB 其他所有 TC 的队列和类),句柄都被写成 X:Y 这里 X 是队列规定的整数型的标识符,Y 是这个队列
6、规定的类的整数型标识符,队列规定的句柄标识符的 Y 必须是 0,而句柄的类的标识符的数值必须是一个非零的整数.1:等同于1:0.tcclassadddeveth0parent1:classid1:1htbrate100kbpsceil100kbpstcclassadddeveth0parent1:1classid1:10htbrate30kbpsceil100kbpstcclassadddeveth0parent1:1classid1:11htbrate10kbpsceil100kbpstcclassadddeveth0parent1:1classid1:12htbrate60kbpsceil
7、100kbps第一行在队列 1:下创建了一个根类 1:1,并且定义了 HTB 队列规定作为这个根类的父类,一个根类可以像队列规定下其他类一样允许它的子类相互借用带宽,但是根类之间不能相互借用带宽,我们可以在 HTB 队列下直接创建三个类,但是其中一个类的剩余带宽不能够借用给其他需要的类,在这种情况下我们想允许带宽借用,所以我们为根类创建扩展类并且让这些类在根类的范围内发送数据,我们定义了下面的三行,ceil 参数我们在以后将讲述注:有时候人们会问我为什么他们必须重复 deveth0 描述在他们已经定义并使用了handle 或者 parent,原因是本地接口比如 eth0 和 ethl 他们各自
8、都可能会有类的句柄表示为 1:1.我们还必须描述那些数据包属于那个类,有关详细内容请查看有关 TC 过虑器的相关文档.命令看起来像下面这样:tcfilteradddeveth0protocolipparent1:0prio1u32matchipsrcmatchipdport800 xffffflowid1:10tcfilteradddeveth0protocolipparent1:0prio1u32matchipsrcflowid1:11(WeidentifyAbyitsIPaddresswhichweimagineheretobe.)(我们根据它的
9、IP 地址进行分类识别,这里我们假设为 )注:U32 过虑器有一个非文档化的设计会导致在你使用 U32 分类器tcfiltershow 命令时会显示出不同的 prio 的值.你可能会注意到我们没有为类 1:12 创建过虑,很明显,这个例子中被用作缺省,就是没有被上面两条分类规则定义的任何数据包(任何原地址非 )将被发送到类 1:12现在我们可以很方便的为队列规定分配子类,如果没有指定缺省是 pfifotcqdiscadddeveth0parent1:10handle20:pfifolimit5tcqdiscadddeveth0parent1:11handle30:p
10、fifolimit5tcqdiscadddeveth0parent1:12handle40:sfqperturb1012MMIMWn贴禽 巴6MM4dlm这是我们所需要的全部命令,让我们来看看有什么事情发如果我们给每个类发送90kbps 的数据然后停止发送其中一个类在某一时刻.在图的底部标有0:90k.标签中央水平位置(在 9 附近.同时标有红色 1)现实了数据流量随时间的变化情况.冒号之前是类的标识符;(0 表示类 1:10,1 表示类 1:11,2 表示类 1:12)冒号之后是新的速率在那个时间有标注.比如类 0 在时间 0 的时候速率改变为 90K;在时间 3 为 0K(0=0k),在时
11、间 6 时返回 90K;最初所有的类共同流量为 90kb.以后以被指定更高的速度传输,每一个类都被限制在其被指定的速率,在时间 3 的时候我们停止传送类 0 的数据,分配给类 0 的速率被分配给其他两个类.如图所示 1 至 6 内的类 1 和类 2(很难看出类 1 的增长因为它只有 4kbps.)同样在时间 9 时类 1 流量停止它的带宽被分配到另外两个类(类 0 的增长同样很难看出),在时间 15类 2 被分配给类 0 和类 1,在时间 18 类 1 和类 2 同时停止, 所以类 0 得到它所需要的所有 90kbps.带宽.现在是个接触 quantums 概念的很女?的时机.实际上当一些想借
12、用带宽的类服务于其他竞争的类之前相互给定的一定数量的字节,这个数量被称为 quantums.你应该明白如果一些竞争的类是可以从它的父类那里得到所需的 quantums;精确的指定 quantums 的数量尽可能的小并其大于 MTU 是很重要的.一般你不需要手工指定一个 quantums 因为 HT 必根据计算选择数值.计算类的 quantum 相对于用 r2q参数分配;它的缺省的值是 10因为典型的MTU1500,缺省值很适合速率为 15kBps (120kbit) .当你创建队列最小的速率指定 r2q1,比较适合速率为 12kbit;如果你需要手工指定 quantum 当你添加或者更改类,如
13、果预想计算的值是不适合的你可以清除日志里的警告.当你用命令行指定了 quantum 类的 r2q 将被忽略.如果 A 和 B 是不同的客户这个解决方案看起来很好,但是如果 A 付了 40kbps 他可能更希望他不用的 WW 的带宽可以用在自己的其他服务上而并不想分享个 B.这种需求是可以通过HTB 的类的层次得到解决的.3. Sharinghierarchy 共享层次前面章节的问题在这一节里通过类层次结构来得到解决,用户 A 可以很清楚的表达自己的类;回到前面我们说过提供给每个类带宽的数量是它所需求的最小需求或者等于分配给它的数量.这样可以用在其他非父类的 HT 哮里.我们叫他们为子类,对于
14、HTB 勺父类来说我们称为内部类,规则是使用服务的总量最小而且总量等于他的子类所请求的总和.这里我们分配 40kbps 给用户 A,这就意味着如果 A 的需求少于分配的WWW宽,那么剩下的将被用来服务于 A的其他应用.(如果有需要),至少总和为 40kbps.注:数据包的分类规则可以分配给内部节点,也可以有分配其他的过虑器给内部节点,最终应该到达子类或者是特定的类 class1:0;父类提供的速率应该是它所有子类的总和.现在的命令如下:tcclassadddeveth0parent1:classid1:1htbrate100kbpsceil100kbpstcclassadddeveth0par
15、ent1:1classid1:2htbrate40kbpsceil100kbpstcclassadddeveth0parent1:2classid1:10htbrate30kbpsceil100kbpstcclassadddeveth0parent1:2classid1:11htbrate10kbpsceil100kbpstcclassadddeveth0parent1:1classid1:12htbrate60kbpsceil100kbps我们现在来看看流量图显示的我们用层次结构的解决方案.当 A 的 WWW 量停止,它所分配的带宽被二次分配到它的其他流量上,所以 A 的总带宽仍然为 40k
16、bps.如果 A 的总请求带宽小于 40kbps.那么剩余的流量将被分配给 B.12MM4. Rateceiling 速率限度参数 ceil 指定了一个类可以用的最大带宽,用来限制类可以借用多少带宽.缺省的 ceil 是和速率一样.(也是我们为什么必须在上面的例子里指定它用来显示借用带宽的上限)我们改变前面例子里的类 1:2(A)和 1:11(Asother)ceil100kbps 分别为 ceil60kbps 和ceil20kbps.1200和前面的图显示不同,在时间 3(WWW 流量彳止)因为 A 的其他流量限制在 20kbps.所以用户 A 得到仅仅总带宽 20kbps 没有用的 20k
17、bps 被分配给了 B.第二个不同是在时间 15 时 B 停止,因为没有 ceil,所有它的带宽被给了 A,但是现在 A 仅仅允许使用60kbps,所以剩余的 40kbps 闲置.这个特性对于 ISP 是很有用的,因为他们一般限制被服务的用户的总量即使其他用户没有请求服务.(ISPS 很想用户付更多的钱得到更好的服务),注根类是不允许被借用的,所以没有指定 ceil注:ceil 的数值应该至少和它所在的类的速率一样高,也就是说 ceil 应该至少和它的任何一个子类一样高5. Burst 突发网络硬件只能在一个时间发送一个包这仅仅取决于一个硬件的速率.链路共享软件可以利用这个能力动态产生多个连接
18、运行在不同的速度.所以速率和 ceil 不是一个即时度量只是一个在一个时间里发送包的平均值.实际的情况是怎样使一个流量很小的类在某个时间类以最大的速率提供给其他类.burst 和 cburst 参数控制多少数据可以以硬件最大的速度不费力的发送给需要的其他类.如果 cburst 小于一个理论上的数据包他形成的突发不会超过 ceil 速率,同样的方法 TBF的最高速率也是这样.你可能会问,为什么需要 bursts.因为它可以很容易的提高向应速度在一个很拥挤的链路上.比如 WWWf 量是突发的.你访问主页.突发的获得并阅读.在空闲白时间 burst 将再charge一次.注:burst 和 cbur
19、st 至少要和其子类的值一样大如图,接着前一章的例子,我改变 burst 给红和黄(agencyA)类 20kb 但 cburst 仍然为缺省(cca2kb) .绿色的峰出现在时间 13 由于在 SMT 磅设置了 burst;A 类在限度下自从时间 9并且聚集了 20kb 的突发流量,峰高于 20kbps(被 ceil 参数限制因为它的 cburst 接近包的尺寸),聪明的读者可能会问为什么在时间 7 处没有红色和黄色的峰;因为黄色已经接近 ceil所以没有空间用于突发;有一个不必要的人为的低谷在时间 4,那是因为我忘记添加burst 给根连接到 (1:1) 类; 峰从时间 1 并且当时间 4
20、 蓝色的类想借用黄色的速率被拒绝并且自己补偿;局限性:当你在计算机上用一个小的时间片操作一个高速链路你需要为所有的类设置很小的 burst 和 cburst.在 i386 系统上是 10ms 在 Alphas.系统是 1ms;最小的 burst 可以 max_rate*timer 被估算出来;所以 10Mbit 的速率在 i386 系统上 burst 为 12kb如果你设置太小的 burst 你可能会得到比你设置更小的速率,后来 TC 工具在你没有指定burst.时将估计并且设置一个最小且可能的 burst.6. Priorizingbandwidthshare,首先它影响到子类剩余带宽的分配
21、,到现在我们已经知,我以第三节的配置为例(没有设置 ceiling 和 bursts 的层次结构)除了 SMTP(green)的优先权改带宽分配优先带宽分配的优先级包括两个方面道剩余带宽按照速率比例来分配叫1;42卿i”2:4帕l:4h为 0(更高)其他所以类都改为 1从视图我们可以看到类得到了所有剩余带宽,规则是优先权越高的类越优先得到剩余带宽.,但必须是在 rate 和 ceil 得到保障的前提下.另一个方面的问题,包的延时,在以太网里的延时度量是很困难的,但有一个简单的办法.我们添加一个带宽小于 100kbps 的 HTB 类.第二个类(我们测量的)作为一个子类,然后我们模仿成更慢并且延
22、时比较大的链路.出于简单的原因,我们用两个有关联的类;# qdiscfordelaysimulationtcqdiscadddeveth0roothandle100:htbtcclassadddeveth0parent100:classid100:1htbrate90kbps# realmeasuredqdisctcqdiscadddeveth0parent100:1handle1:htbAC=tcclassadddeveth0parent$AC1:classid1:1htbrate100kbps$AC1:2classid1:10htbrate50kbpsceil100kbpsprio1$AC
23、1:2classid1:11htbrate50kbpsceil100kbpsprio1tcqdiscadddeveth0parent1:10handle20:pfifolimit2tcqdiscadddeveth0parent1:11handle21:pfifolimit2注:另一个 HTB 的子类和同一个 HTB 内的子类是不一样的,因为 HTB 的类发送数据和硬件发送能力一样的,所以在限度以内的数据发送仅仅取决于设备速度而不是上级类;HTB 下的HTB 类输出是模拟一个逻辑硬件;(大的延时)假定速率同为 50kbps 的两个类在时间 3S 时执行命令如下:12M0I14DI080000励皿
24、40(0*tifweCsl2-4,t中U414-16邛200;4kOil?斗河1村岫2:0ilb12制*岫9*ISO1;。出tcclasschangedeveth0parent1:2classid1:10htbrate50kbpsceil100kbpsburst2kprio0tiresJt0:5Okl!SOk你可以看到 WW 虢延时趋近于 0 而 SMTP 勺延时增大.当你的优先级别更高而其他类的延时就更大.稍后在 7s 时,模仿WWW60kbps 和 SMTP 以 40kbps.发送数据.你可以看到另一个有趣的现象.当 WW 翅限之后 HTB 首先是限制带宽.什么样的类需要优先权?一般需要延
25、时低的类;比如视频和音频流;(你必须使用正确的流量速率防止流量相互淹没.)或者是交互性(TELNET.SSH)流量正常突发并且不影响其他的流量.提高 ICMP 的优先权可以得到一个很好的 PING 的延时返回,但这是一个假相,因为从技术角度来说在测试联通性时这种情况并不是你想要的7. Understandingstatistics 查看统计TC 工具允许你对 LINUX 队列规定进行统计;不幸的是统计结果作者没有解释所以你不能经常用到他们;这里我尽力解释来帮助理解 HTB 的状态;首先是 HTB 勺整体状态.下面是第三节里的一个片段;#tc-s-dqdiscshowdeveth0qdiscpf
26、ifo22:limit5pSent0bytes0pkts(dropped0,overlimits0)qdiscpfifo21:limit5pSent2891500bytes5783pkts(dropped820,overlimits0)qdiscpfifo20:limit5pSent1760000bytes3520pkts(dropped3320,overlimits0)qdischtb1:r2q10default1direct_packets_stat0Sent4651500bytes9303pkts(dropped4140,overlimits34251)前三个规定是 HTB 的子队列,我
27、们跳过他们因为 PFIFO 的状态是自我解释的.Overlimit 告诉你有多少小口由gMDIO用QQWQ300002AOKIO10QQQLUUste次队列延时了数据包;direct_packets_stat 告诉你有多少包直接通过队列被送出;其他的解释是自我解释型的,让我们看看类的状态;tc-s-dclassshowdeveth0classhtb1:1rootprio0rate800Kbitceil800Kbitburst2Kb/8mpu0bcburst2Kb/8mpu0bquantum10240level3Sent5914000bytes11828pkts(dropped0,overlim
28、its0)rate70196bps141ppslended:6872borrowed:0giants:0classhtb1:2parent1:1prio0rate320Kbitceil4000Kbitburst2Kb/8mpu0bcburst2Kb/8mpu0bquantum4096level2Sent5914000bytes11828pkts(dropped0,overlimits0)rate70196bps141ppslended:1017borrowed:6872giants:0classhtb1:10parent1:2leaf20:prio1rate224Kbitceil800Kbitbur
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年湖北省八市高三(3月)联考政治答案
- 小学美术水墨游戏
- 幼儿班级管理:如何应对爱告状的孩子
- 防恐知识宣传
- 项目进度管理汇报
- 语文-2021年张掖市民乐县小升初语文考试试卷真题
- 历史-2018年全国考研历史真题
- 面瘫伴中耳炎护理查房
- 个人品德教育
- (高清版)DB12 046.06-2008 还原铁工序能耗计算方法及限额
- 中考语文试题双向细目表
- 新概念动能武器-电磁炮
- 小学三年级数学应用题大全(500题)
- 电梯安全检测招标文件
- GB/T 44131-2024燃料电池电动汽车碰撞后安全要求
- NB-T35016-2013土石筑坝材料碾压试验规程
- 2024年华勤技术股份有限公司校园招聘考试试题及参考答案
- 医疗用品线上线下融合模式探索
- 福建省住宅建筑生活供水工程技术规程
- 中班语言《玩具火车轰隆轰隆》课件
- JT-T 1495-2024 公路水运危险性较大工程专项施工方案编制审查规程
评论
0/150
提交评论