概述
pfifo_fast
这个队列的特点就是先进先出(FIFO),没有任何数据包被特殊对待,这个队列有3个所谓的“频道”。FIFO规则应用于每一个频道。并且:如果在频道0有数据包等待发送,1频道的包就不会被处理,1频道和2频道之间的关系也是如此。
内核遵照数据包的TOS标记,把带有“最小延时”标记的包放进0频道。
不能把这个五类的简单队列规定与分类的PRIO相混淆!虽然它们的行为有些类似,但是对于无类的pfifo_fast而言,不能使用tc命令向其中添加其它的队列规定。
参数与使用
pfifo_fast 队列规定作为硬性的缺省设置,不能对它进行配置。它缺省是这样配置的:
priomap:
内核规定,根据数据包的优先权情况,对应相应的频道。这个对应是根据数据包的TOS字节进行打的。TOS看上去如下图:
TOS字段的4个bit如下定义
二进制 | 十进制 | 意义 |
1000 | 8 | 最小延时(md) |
0100 | 4 | 最大吞吐量(mt) |
0010 | 2 | 最大可靠性(mr) |
0001 | 1 | 最小成本(mmc) |
0000 | 0 | 正常服务 |
可以使用命令 tcpdump -vv(两个v)看到整个TOS字段的情况,而不仅仅是这4个bit ,如下表第一列的值:
TOS | Bits | 意义 | Linux优先权 | 频道 |
0x0 | 0 | 正常服务 | 0 最好效果 | 1 |
0x2 | 1 | 最小成本(mmc) | 1 填充 | 2 |
0x4 | 2 | 最大可靠性(mr) | 0 最好效果 | 1 |
0x6 | 3 | mmc + mr | 0 最好效果 | 1 |
0x8 | 4 | 最大吞吐量(mt) | 2 大量传输 | 2 |
0xa | 5 | mmc + mt | 2 大量传输 | 2 |
0xc | 6 | mr + mt | 2 大量传输 | 2 |
0xe | 7 | mmc + mr + mt | 2 大量传输 | 2 |
0x10 | 8 | 最小延时(md) | 6 交互 | 0 |
0x12 | 9 | mmc + md | 6 交互 | 0 |
0x14 | 10 | mr + md | 6 交互 | 0 |
0x16 | 11 | mmc + mr + md | 6 交互 | 0 |
0x18 | 12 | mt + md | 4 交互 + 大量传输 | 1 |
0x1a | 13 | mmc + mt + md | 4 交互 + 大量传输 | 1 |
0x1c | 14 | mr + mt + md | 4 交互 + 大量传输 | 1 |
0x1e | 15 | mmc + mr + mt + md | 4 交互 + 大量传输 | 1 |
第四列写出了 linux内核对于TOS位的理解,并表明了它们对应哪种优先权。最后一列表明对应的频道(对应优先级)
应用程序对应的TOS:
txqueuelen : 队列的长度
队列的长度来自网卡的配置,可以用ifconfig 和 ip 命令修改。如设置队列长度为10,执行
ifconfig eth0 txqueuelen 10
在这里不能用tc命令设置。
最后
以上就是明亮皮卡丘为你收集整理的pfifo_fast队列详解pfifo_fast的全部内容,希望文章能够帮你解决pfifo_fast队列详解pfifo_fast所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复