论坛风格切换切换到宽版
  • 1154阅读
  • 7回复

[问题求助][保留] Linux Htb队列规定指南中文版(转载) [复制链接]

上一主题 下一主题
离线超超.
 
发帖
2182
C币
-60297
威望
374
贡献值
1
银元
-7
铜钱
4720
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
英文原版:
http://blog.chinaunix.net/article.php?articleId=18225&blogId=224             汽车
HTB官方网站:
http://luxik.cdi.cz/~devik/qos/htb/域名

LINUX HTB队列规定是LIN.U.X QOS 内容的部分, 主要是配合TC工具进.行流量控制的一种算法, 和CBQ 比HTB有它自身的特点, 有关CBQ的资料相对比较多一些. 这是HTB网站上的一篇用户手册;.

LINUX HTB队列规定用户指南.           鲜花

HTB Linux queuing discipline. manua.l - user guide.
Martin De.vera aka devik (devik@cdi..cz)           建材
Manual: d.evik and. Don Cohen虚拟主机
Last updated: 5.5.2002. 外贸
译者:龚关 gon.gguan008@163.com.
1. Introduction .介绍              汽车
2. Link sharing 链路.共享 .
3. Shar.i.ng hierarchy 共享层次 (        游戏          )
4.. Rate ceiling 速率限度              汽车
5. Burst 突发
6. Priorizing ban.dwidth share 带宽.分配优先 学习
7.. U.nderstanding statistics 查看统计 (        游戏          )
8.. M.aking, debugging and sending error reports 开发,调试和错误报告 投资



1. Introduct.ion 介绍投资

HTB 意味着.是一个更好理解更容易掌握的可以快速替换LINUX CBQ 队列规定的.队列, C.BQ和HTB都可.以帮助你限制你的链路上的出口带宽;他们允许你把一条物理链路模拟成几条更慢的链路或者是把发出的不同类型的流量模拟成不同的连接,在他们的实际应用中, 你必须指定怎么分配物理链.路给各种不同的带宽应用并且如何判断每种不同的应用的数据包是怎么样被发送的;              汽车

这篇文章将告诉你怎么使用 HTB . 这里有很多的例子和.分析图以及.一些特殊问题的讨论.健康
这个HTB的发布版本已.经有更多的升级, 详细情况请看H.TB 的主页..
请先查阅: TC 工具 (不仅仅是HTB ) 有关速率的单位换算: kbp.s = kilo bytes kbit = kilo b.its .


2. Link shar.ing 链路共享投资

案例:. 我们有两不同.的用户A和B, 都通过网卡 eth0 连接到 internet ,我们想分配. 60 kbps的带宽给B 和 40 kbps的带宽给A, 接下.来我们想对A用户的带宽再做一个分配, 给30 kbps的带宽给WWW服务, 10 kbps的带宽给其他用途; 任何没有用的带宽可以分配和其他需要带宽类 (在分配的总带宽允许的范围内的部分) .

HTB 可以保障提供给每个类带宽的数.量是它所需求的最小需求或者等于.分配给它的数量.当.一个类需要的带宽少于分配的带宽时,剩余的带宽被分配给其他需要服务的类..

注: 这里这种情况被称为”借用”剩余带宽, 我.们以.后将用这个术语, 但无论如何,好像很不好因为这个”借用”是没有义务偿还的..

http://upload.bbs.csuboy.com/Mon_1004/126_7098_5b471cbabc92122.gif[/img].

上.面所提到的不.同类型的流量在HTB里表现为类, 上面是一个简单的分布图.    健康

我们来看看所用到的命令:

tc qdisc add dev. eth0 root handl.e 1: htb default 12投资
这条命令分配了HTB队列规定给 eth0 并且指定了一个名称为(handle" 1 句柄 1: , 这个名称用于标识它下面的子类, default 12 的意思是没有被分类的流量被分配到类 1:12http://upload.bbs.csuboy.com/Mon_1004/126_7098_07b5498b08dbc4a.gif[/img].

注: 一般 (不仅仅是HTB其他所有T.C的队列和类),句柄都被写成 X:Y 这里.X是队列规定的整数型的标识符,Y是这个队列规定的类的整数型标识符,队列规定的句柄标识符.的Y必须是.0,而句柄的类的标识符的数值必须是一个非零的整数. "1:" 等同于 "1:0".           鲜花

tc class add dev e.th0 parent 1: .classid 1:1 htb rate 100kbps ceil 100kbps --------------彩票
tc cla.ss add dev eth0 parent 1:1 classid 1:10 htb rate 30kbps ceil 100.kbps电影
tc class add dev eth0 parent 1:1 cl.assid 1.:11 htb rate 10kbps ceil 100kbps外贸
tc cl.ass add dev eth0 parent 1:1 classid 1:12 h.tb rate 60kbps ceil 100kbps域名

第一.行在队列1:下创建了一个根类1:1,并且定义了HT.B队列规定作为这个根类的父类,一个根类可以像队.列规定下其他类一样允许它的子类相互借用带宽,但是根类之.间不能相互借用带宽,我们可以在HTB队列下直接创建三个类,但是其中一个类的剩余带宽不能.够借用给其他需要的类,在这种情况下我们想允许带宽借用,所以我们为根类创建扩展类并且让这些类在根类的范围内发送数据,我们定义了下面的三行, ceil参数我们在以后将讲述.              乙肝

注: 有时候人们会问我为什么他们必.须重复d.ev eth0 描述在他们已经定义并使用了handle 或者parent ,原因是本地接口比如eth0 和eth.1他们各自都可能会有类的句柄表示为1:1.           建材

我们还必须描述那些数据包属于那个类, 有关详细内容请查看有关TC 过虑器的相关文档. .命令看起.来像下面这样:.

tc filter ad.d dev eth0 protocol ip p.arent 1:0 prio 1 u32 match ip src 1.2.3.4 match ip dport 80 0xffff flowid .1:10
tc filter add de.v .eth0 protocol ip parent 1:0 prio 1 u32 match ip src 1.2..3.4 flowid 1:11教育
(We. identify A by its IP address which we. imagine here to be 1.2.3.4.) 投资

(.我.们根据它的IP地址进行分类识别,这里我们假设为1.2.3.4).

注:U32过虑器有一个非文档化的设计会导致在你使用U32分类器”tc filter sho.w”命令时会显.示出不同的prio的值.服务器


你可能会注意到我们没有为类1.:12创建过虑, 很明显,这个例子中被用作缺省, 就是没有被上面两条.分类规则定义的任何数据包 (任何原地址非1.2.3.4)将被.发送到类1:12[成人用品]

现在我们可以很方便的为队列规定分配子.类, 如果没有指定缺省是pf.ifo.

tc qdisc ad.d dev eth0 parent 1:10 handle 20: pf.ifo limit 5           鲜花
tc qdisc add dev eth0 parent 1:11 handle 30: p.fifo limit .5域名
tc qdisc add dev eth0 parent 1.:12 handle 40: sfq. perturb 10[成人用品]

http://upload.bbs.csuboy.com/Mon_1004/126_7098_c36e1ea5d6bc184.gif[/img]            杀毒

这是我们所需要的全部命令, 让我们来看看有什么事情发如果我们给每.个类发送90kbps的数据然后.停止发送其中一个类在某一时刻.在图的.底部标有"0:90k". 标签中.央水平位置 (在9附近.同时标有红色1)现实了数据流量随时间的变化情况.冒号之前.是类的标识符;(0表示类1:10, 1 表示类 1:11, 2 表示类 1:12)冒号之后是新的速率在那个时间有标注. 比如类0在时间0的时候速率改变为90K ;在时间3为0K (0= 0k) ,在时间6时返回.90K;投资

最初所有的类共同流量为90kb. 以后以被指定更高的速度传输, 每一个类都被限制在其被指定的速率, 在时间3的时候我们停止传送类0的数据, 分配给类0的速率.被分配给其他.两个.类.如图.所示1至6内的类1和类2 .(很难看出类1的增长因为它只有4kbps.) .同样在时间9时类1流量停止它的带宽被分配到另外两个类(类0的增长同样很难看出), 在时间15类2被分配给类0和类1, 在时间18 类1和类2 同时停止,所以类0得到它所需要的所有90 kbps.带宽.服务器

现.在是个接触quantums概念的很好的时机.实际上当一些想借用带宽的类服务于其他竞争的类之前相互给定的一定数量的字节, 这个数量被称为quantums . 你应该明白如果一些竞争的类是可以.从它的父类那里得到所需的q.uantums; 精确的指定quantums的数量尽可能的小并其大于MTU是很重.要的.           女人

一般你不需要手工指定..一个quantums因为HTB会根据计算选择数值.计算类的quantum相对于用r2q参数分配; 它的缺省的值是10因.为典型的MTU是1500,缺省值很适合速率为15 kBps (120 kbit).当你创建队列最小的速率指定r2q 1, 比较适合速率为12 kbit;如果你需要手工指定quantum 当你添加或者更改类,如果预想计算的值是不适合的你可以清除日.志里的警告. 当你用命令行指定了qua.ntum 类的r2q将被忽略.服务器

如果A和B是不同的客户这个解决方案看起来很好, 但是如果A 付了40kbps 他可能更希望他不.用的WW.W的带宽可以用在自己的其他服务.上而并不想分享个B. 这种需求是可以通过HTB的类的层次得到解决的.           鲜花


3.. Sharing hierarchy 共享层次.

前面章节的问题在这一节里通过类层次结构来.得到解决, 用.户A 可以很清楚的表达自己的类; 回到前面我们说过提供给每个类带宽的数量是.它所需求的最小需求或者.等于分配给它的数量. 这样可以用在其他非父类的HTB类里. 我们叫他们为子类, 对于HTB的父类来说我们称为内部类, 规则是使用服务的总量最小而且总量等于他的子类所请求的总和.这里我们分配40kbps给用户A ,这就意味着如果A的需求少于分配的WWW带宽, 那么剩下的将被用来服务于A的.其他应用..(如果有需要), 至少总和为40kbps.服务器

http://upload.bbs.csuboy.com/Mon_1004/126_7098_7761f4a412a0168.gif[/img].

注:数据包的分类规则可以分配给内部节点, 也可以有分配其他的过虑器给内部节点,最终应该.到达子类或者.是特定的类cla.ss 1:0 ;父类提供的速率应该是它所有子类的总和.健康

现在的命令如下:
t.c class add dev eth0 parent 1: classid 1:1 htb rate 10.0kbps ceil 100kbps健康
tc class add d.ev eth0 parent 1:1 classid 1:2 htb rate 40kbps ceil 100k.bps    外汇
tc class a.dd dev eth0 parent 1:2 classid 1:10 htb .rate 30kbps ceil 100kbps            杀毒
tc class add dev eth.0 parent 1:2 classid 1.:11 htb rate 10kbps ceil 100kbps    美容
tc class add dev eth0 paren.t 1:1 classid 1:12 htb rate 60kbps ceil 1.00kbps--------------彩票

我..们现在来看看流量图显示的我们用层次结构的解决方案. 当A的WWW流量停止, 它所分配的带宽被二次分配到它的其他流量上, 所以A的总带宽仍然为40kbps..如果A的总请求带宽小于40kbps.那么剩余的流量将被分配给B.             电子

http://upload.bbs.csuboy.com/Mon_1004/126_7098_42e6718fb42b276.gif[/img].


4. Rate ceili.ng 速率限度域名

参数.ceil指定了一个类可以用的最大带宽, 用来限制类可以借用多少带宽.缺省的ceil是和速率一样.(也是我们为什么必须在上面的例子里指定它用来.显示借.用带宽的上限)我们改变前面例子里的类1:2 (A) 和1:11 (A'.s other) ceil 100kbps 分别为ceil 60kbps 和ceil 20kbps.            杀毒

http://upload.bbs.csuboy.com/Mon_1004/126_7098_f3689e09aaee103.gif[/img].

和前面的图显示不同, 在时间3 (WW.W 流量.停止) 因为A .的其他流量限制在20kbps. 所以用户A得到仅仅总带宽20kbps没有用的20kbps被分配给了B .    健康

第二个不同是.在时间15时B停止, 因为没有ce.il, 所有它的带宽被给了A , 但是现在A 仅仅允许使用60kbps,所以剩余的40kbps 闲置.    健康

这个特.性对于.ISP是很有用的, 因为他们一般限制被服务的用户的总量即使其他用户没有请求服务.(ISPS 很想用户付.更多的钱得到更好的服务) ,注根类是不允许被借用的, 所以没有指定ceil.

注: ceil的数值应该至少和它所在的类.的速率一样高, 也就是说ceil应该至少和它的任何一个子.类一样高.



5. Burst 突发

网络硬件只能在一个时间发送一个包这仅仅取决于一个硬件的速率. 链路共享软件可以利用这个能力动态产生多个连接运行在不同的速度. 所以速率和ceil不是一个即时.度量只是一个在一个时间里发送包的平均值. 实.际的情况是怎样使一个流量很小的类在某个时间类以最大.的速率提供给其他类. burst 和cb.urst 参.数控制多少数据可以以硬件最大的速度不费力的发送给需要的其他类.(        游戏          )

如果cburst 小于一.个.理论上的数据包他形成的突发不会超过ceil 速率, 同样的方法TBF的最高速率也是这样.教育

你可能会问, 为什么需要bur.sts . 因为它可以很容易的提高向应速度在一个很拥挤.的链路上. 比如WWW 流.量是突发的. 你访问主页. 突发的获得并阅读. 在空闲的时间burst将再"charge"一次..

注: burst 和c.burs.t至少要和其子类的值一样大. 服务器


http://upload.bbs.csuboy.com/Mon_1004/126_7098_f2e21aec7880eb6.gif[/img].

如图, 接着前一章的例子,我改变burst给红和黄(agency A)类20 kb但cburst仍然为缺省(cca 2 kb).绿色的峰出现在时间13由于在SMTP.类设置了burst;A类在限度下自从时间9并且聚集了20 kb的突发流量,峰高.于20 kbp.s(被ceil参数限制因为它的cburst接近包的尺寸),聪明的读者可能会问为什么在时间7处没有红色和黄色的峰;因为黄色已经接近ceil所以没有空间用于突发;有一个不必要的人为的低谷在时间4, 那是因为我忘记添加burst 给根连接到(1:1)类.;峰从时.间1并且当时间4蓝色的类想借用黄色.的速率被.拒绝并且自己补偿; 学习

局限性: 当你在.计算机上用一个小的时间片操作一个高速链路 你需要为所有的.类设置很小的burst 和cburst . 在i386系统上是10ms 在Alphas.系统是1ms ;最小的burst可以max_rate*timer 被估算出来; 所以10Mbit的速率在i.386. 系统上 burst为 12kb[成人用品]

如果你设置太小的burst 你可能会得到比你设置更小的速率, 后.来TC 工具在你没有指定.burst.时将估计并且设置一个最小且可能的burst.<性病>


6.. Priorizin.g bandwidth share 带宽分配优先.

带.宽分配的优先级包括两个方面,. 首先它影响到子类剩余带宽的分配, 到现在我们已经知道剩余带宽按照速率比例来分配, 我以第三节的配置为例(没有设置ceiling 和 .bursts的层次结构 )除了SMTP (.green)的优先权改为0(更高) 其他所以类都改为1             电子

http://upload.bbs.csuboy.com/Mon_1004/126_7098_21fa386d2da97c5.gif[/img]             汽车

从视图我们可以看到类得到了所有剩余带宽, 规则是优先权越高的类越优先得到剩余带宽., 但必须是在.rate 和 ceil得到保障的前.提下..

另一个方面的问题,包的延时, 在以太网里的延时度量是很困难的,但有一个.简单的办法.我们添加.一个带宽小于100 kbps的HTB类.第二个类(我们测量的)作为一个子类,然后我们模.仿成更慢并且延时比较大的链路.           婚庆

出于简单的原因, 我们用两个有关.联的类;健康

# q.disc for delay. simulation    健康
tc qd.isc a.dd dev eth0 root handle 100: htb          婚庆
tc .class add dev eth0 parent 100: clas.sid 100:1 htb rate 90kbps    外汇

# real. measured qdisc    外汇
tc qdisc .add d.ev eth0 parent 100:1 handle 1: htb             汽车
AC="tc cl.ass add dev eth0 parent"..
$AC 1: cl.assid 1:1 .htb rate 100kbps.
$AC 1:2 classid 1:10 htb rate 5.0kbps ceil 100kbps prio 1..
$AC 1:2 class.id 1:11 htb rate 50kbps ceil .100kbps prio 1(        游戏          )
tc qd.isc add de.v eth0 parent 1:10 handle 20: pfifo limit 2.
tc qdisc. add dev eth0 parent 1:11 .handle 21: pfifo limit 2    外汇

注: 另一个HTB的子类和同一个HTB内的子.类是不一样的, 因为HTB的类发送数据和硬件发送能力一样的, 所以在限度以内的数据发送仅仅取决于设.备速度而不是上级类; .HTB下的HTB类输出是模拟一个逻辑硬件; (大的延时)             汽车

假定速率同为50 .kbps的两个类在时间3S 时执行命令如下:.            杀毒

tc. class change dev eth0 par.ent 1:2 classid 1:10 htb rate 50kbps ceil 1.00kbps burst 2k prio 0

http://upload.bbs.csuboy.com/Mon_1004/126_7098_e845bf9a3393f94.gif[/img]             汽车

你可以看到.WWW的.延时趋近于0而SMTP的延时增大. 当你的优先级别更高而其他类的延时就更大.稍后在7S 时,模仿WWW以60 kbps和SMTP 以40 kbps.发送数据.你可以看到另一个有趣的现象.当WWW越限之后H.TB首先是限制带宽.域名

什么样的类需要..优先权? 一般需要延时低的类; 比如视频和音频流; (你必须使用正确的流量速.率防止流量相互淹没. ) 或者是交互性(TELNET .SSH )流量正常突发并且不影响其他的流量. .

提高ICMP的优先权可以得到一.个很好的PING的延时返回, 但这是一.个假相, 因为从技术角度来说在测试联通性时这种情况并不是你想要的.    外汇



7. Understan.ding statis.tics 查看统计教育

TC 工具允许你对LINUX队列规定进行统计; 不幸.的是统计结果作者没有解释所以你不能经常用.到他们; 这里我尽力解释来帮助理.解HTB的状态; 首先是HTB的整体状态. 下面是第三节里的一个片段;    美容

# tc -s -d qdisc s.how dev e.th0健康
qdisc pfifo 22: lim.it 5p服务器
Sent 0 by.tes 0 pkts (.dropped 0, overlimits 0) (广告)

qdisc pfifo 21: l.imit 5p电脑
Sent 2891500 bytes 5783 pkts (dropped 820, ov..erlimits 0) --------------彩票

qdisc pfifo 20: limit .5p           女人
Sent 1760000 bytes 3520 pkt.s (dro.pped 3320, overlimits 0) .

qdisc htb 1:. r2q 10 d.efault 1 direct_packets_stat 0[成人用品]
Sent 4651500 bytes 9303 .pkts (dropped 4140, overlimits. 34251) .

前三个规定是HTB的子队列, 我.们跳过他们因为PFIFO的状态是.自我解释的. Overlimit告诉你有多少次队列延时了数据包; direct_packets_stat 告诉你有多少包直.接通过.队列被送出; 其他的解释是自我解释型的, 让我们看看类的状态;.

tc -s -d cla.s.s show dev eth0.
class .htb 1:1 root. prio 0 rate 800Kbit ceil 800Kbit burst 2Kb/8 mpu 0b 服务器
cburst 2Kb/8 mpu 0b quantum 102..40 level 3 .
Sent 5914000 .byt.es 11828 pkts (dropped 0, overlimits 0) .
rate 70196bps 1.41pps 电脑
l.ended: 6872 b.orrowed: 0 giants: 0电影

class htb 1:2 parent 1:1 prio 0 rate 320Kbi.t ceil 4000Kbit burs.t. 2Kb/8 mpu 0b              电子
c.burst 2Kb/8 mpu 0b quant.um 4096 level 2              电子
Se.nt 5914000 bytes 11828 .pkts (dropped 0, overlimits 0) 外贸
rat.e 70196bps 141pps 外贸
len.ded: 1017 borrowed: .6872 giants: 0.

class .htb 1:10 parent 1:2 leaf 20: prio 1 rate 224Kbit ceil 800Kbit burst 2.Kb./8 mpu 0b .
c.burst 2Kb/8 mpu 0b. quantum 2867 level 0 .
Sent 2269000 bytes 4538 pkts (dropped 4400, overlimits 3635 http://upload.bbs.csuboy.com/Mon_1004/126_7098_31ffde71d54d97a.gif[/img]           鲜花
rate .14635bps 29pps .
lended.: 2939 borrowed: 1599 gia.nts: 0              乙肝


我删除了类1.:11 .和 1:12 以便输出更简单扼要; 可以看到有我们设置的参数, 还有level 和 DRR quantum 信息; (        游戏          )

overlimits 显示了有多少次类要求被发送数据而被rate/ceil 限制不能发送;(现在.显.示的仅仅是子类)--------------彩票

rate, pps 告诉你.通过类实际的速率(10秒的平均值) 他和你.选择的速率是一样的..

Lende.d 这个类借出的包 ; bo.rrowed 则是被借入的数据包从父类;

Giants 显示了大于TC命令设置.的MTU的数据包的数量;HTB和其协调工作,否则将会.影响速率的精确性,, 添加 MTU 到.你的TC命令里 (缺省是1600 bytes)虚拟主机

8. Making, debuggin.g and se.nding error reports.
开发, 调试和发送错误报告
如果你拥有kernel 2.4.20或者更新.的内核.你就不必要打补丁, 但你需要更新TC 工具从HTB 3.6 包里得到并且使用它;           女人

为了和老内核工作协调, 下载内核源码, 用patch -p1 -i htb3._2.X.X.diff装载补丁程序, 然后用. make menuconfig;make bzImage; 编译内核时不要忘了选中QoS 和 .HTB.    外汇

我将非常感激如果你认为在使用.发现了HTB错误. 我需要详细的输出; 在队列规定出现异常行为时请在tc qdisc add ..... htb.后面加上参数.debug 3333333 ; 它将会在系统日志里记录一些调试记录,为此你可.能需要在你的/etc/syslog.conf.. 文件里加上kern.debug -/var/log/debug这一行. 通过压缩包电邮给我,并且付上问题描述和时间.投资





译者的说明:

由于工作需要用到HTB相关的资料,所以将此文进.行了翻译, 因本人英文水平有限,晦涩难懂的地方翻译的并非理想, 希望能起到抛砖引玉的作用, 也希望网友.不惜赐.教.投资

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线dengxin.
发帖
1917
C币
-263183
威望
354
贡献值
1
银元
-4
铜钱
4219
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-13
Re:[保留]
收藏了,比金山词霸翻译得好多了

离线5136456.
发帖
2120
C币
-235562
威望
415
贡献值
1
银元
-1
铜钱
4813
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-13
Re:[保留]
不错,为了你的辛苦努力顶一下。

离线lzzsgsb.
发帖
2008
C币
-262851
威望
381
贡献值
7
银元
3
铜钱
4528
人人网人气币
0
只看该作者 地板  发表于: 2010-04-13
Re:[保留]
支持楼主,好贴,收藏!

离线陈茵茵.
发帖
1977
C币
-235565
威望
344
贡献值
1
银元
-4
铜钱
4356
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-13
Re:[保留]
顶顶.
还有http://www.docum.org/docum.org/docs/   这里还有更多的介绍,并且有monitor监视等例子

发帖
2100
C币
0
威望
392
贡献值
1
银元
-1
铜钱
4594
人人网人气币
0
只看该作者 5楼 发表于: 2010-04-13
Re:[保留]
楼主辛苦了。

离线pkx520.
发帖
2006
C币
-235498
威望
354
贡献值
1
银元
-4
铜钱
4577
人人网人气币
0
只看该作者 6楼 发表于: 2010-04-13
Re:[保留]
CU高人多,热心肠的人也多,技术更多。。。。佩服!

离线asterye.
发帖
1935
C币
-199233
威望
347
贡献值
1
银元
-2
铜钱
4307
人人网人气币
0
只看该作者 7楼 发表于: 2010-04-13
Re:[保留]

谢谢楼主
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个