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工作。
从代码执行流程上看,如下图所示:
待续
阅读(2142) | 评论(0) | 转发(3) |