1 Linux 内核QoS 实现机制 1. QoS 介绍 QoS(Qu ality of Serv ice)即服务质量。对于网络业务,服务质量包括传输的带宽、传送的时延、数据的丢包率等。在网络中可以通过保证传输的带宽、降低传送的时延、降低数据的丢包率以及时延抖动等措施来提高服务质量。 网络资源总是有限的,只要存在抢夺网络资源的情况,就会出现服务质量的要求。服务质量是相对网络业务而言的,在保证某类业务的服务质量的同时,可能就是在损害其它业务的服务质量。例如,在网络总带宽固定的情况下,如果某类业务占用的带宽越多,那么其他业务能使用的带宽就越少,可能会影响其他业务的使用。因此,网络管理者需要根据各种业务的特点来对网络资源进行合理的规划和分配,从而使网络资源得到高效利用。 流量控制包括以下几种方式: SHAPING(限制) 当流量被限制,它的传输速率就被控制在某个值以下。限制值可以大大小于有效带宽,这样可以平滑突发数据流量,使网络更为稳定。shaping(限制)只适用于向外的流量。 SCHEDULING(调度) 通过调度数据包的传输,可以在带宽范围内,按照优先级分配带宽。SCHEDULING(调度)也只适于向外的流量。 POLICING(策略) SHAPING 用于处理向外的流量,而 POLICIING(策略)用于处理接收到的数据。 DROPPING(丢弃) 如果流量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。 2 2 . 内核实现过程 图表 1 流量控制过程 绿色部分就是Linux内核实现的QoS 模块,其中ingress policing 是处理输入数据包的,而output queueing 则是处理输出数据包的。 2.1. Ingress 实现机制 Ingress QOS 在内核的入口点有两个,但是不能同时启用,这取决于内核编译选项。当打开了 CONFIG_NET_CLS_ACT(from 2.6.8 release still av ailable on 2.6.39 release)时,入口点在 src/net/core/dev .c 的netif_receiv e_skb 函数中;当没有打开 CONFIG_NET_CLS_ACT,而是打开了 CONFIG_NET_CLS_POLICE (from 2.6.9 release to 2.6.24, thu s this is an obsolete configu ration)和 CONFIG_NETFILTER 时,就会在 netfilter 的PREROUTING 钩子点处调用ing_hook 函数。 3 netif_receive_skbing_filterhandle_bridgeNDev->qdisc_ingressq->enqueueYingress_enqueue进入net/sched/sch_ingress.c文件tc_classifytp->next Tp->classifyYN……PREROUTING钩子点调用ing_ho...