Chinaunix首页 | 论坛 | 博客
  • 博客访问: 453671
  • 博文数量: 143
  • 博客积分: 6159
  • 博客等级: 准将
  • 技术积分: 1667
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-25 23:08
文章分类

全部博文(143)

文章存档

2013年(1)

2012年(11)

2011年(55)

2010年(76)

分类:

2011-01-09 12:27:28


QoS in Linux

前面介绍了QoS的各种参数,实现QoS的各种算法,下面结合Linux介绍一个系统如何QoS(当然,Linux系统和实际网络设备中运行的系统还是有很大差距,但是对于QoS的基本思想是一致的)。下面首先介绍一下Linux中queuing的软件架构,然后结合几个QoS算法介绍如何在Linux中实现自己的QoS算法。

Packet queuing in Linux
Linux中QoS的软件架构如下图所示:

从上图可以看出整个QoS的管理,从enqueue到dequeue,主要由三种元素连接而成,有Qdisc,Class和Filter。其中,Qdisc主要负责pkt队列的管理,Filter完成对pkt的分类,决定一个enqueue的pkt应该入队到哪个队列,class就是Filter分类后的结果,并对应有一组QoS参数,即这个class的CIR,PIR等等;dequeue时将由调度算法判断应该从哪个class对应的Qdisc中dequeue一个pkt发送。因此,一个pkt的从enqueue到dequeue的流程就是,首先Linux的QoS是针对一个网络设备的,每个网络设备本身有一个根Qdisc,在对此Qdisc enqueue的时候,首先需要对pkt进行分类,利用挂接在Qdisc下的filter链表分类到具体的class的Qdisc中;dequeue一般发生在发送DMA完成或发现DMA空闲但Qdisc中不为空时,此时将从根Qdisc中dequeue,然后调用到此设备所指定的调度算法完成对各个queue的dequeue工作。

从代码执行流程上看,如下图所示:

待续

阅读(2098) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~