linux内核qos实现机制

linux内核qos实现机制

ID:27553035

大小:519.21 KB

页数:24页

时间:2018-12-03

linux内核qos实现机制_第1页
linux内核qos实现机制_第2页
linux内核qos实现机制_第3页
linux内核qos实现机制_第4页
linux内核qos实现机制_第5页
资源描述:

《linux内核qos实现机制》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Linux内核QoS实现机制1.QoS介绍QoS(QualityofService)即服务质量。对于网络业务,服务质量包括传输的带宽、传送的时延、数椐的丢包率等。在网络屮可以通过保证传输的带宽、降低传送的时延、降低数据的丢包率以及时延抖动等措施来提高服务质景。网络资源总是有限的,只要存在抢夺网络资源的情况,就会出现服务质量的要求。服务质量是相对网络业务而言的,在保证某类业务的服务质量的同时,可能就是在损害其它业务的服务质量。例如,在网络总带宽固定的情况下,如果某类业务占用的带宽越多,那么其他业务能使用的带宽就越少,可能会影响其他业务的使用

2、。因此,网络管理者需要根裾各种业务的特点来对网络资源进行合理的规划和分配,从而使网络资源得到高效利用。流量控制包括以下几种方式:■SHAPING(限制)当流量被限制,它的传输速率就被控制在某个值以下。限制值可以大大小于有效带宽,这样可以平滑突发数据流垃,使网络更为稳定。shaping(限制)只适用于向外的流S。■SCHEDULING(调度)通过调度数据包的传输,可以在带宽范围内,按照优先级分配带宽。SCHEDULING(调度)也只适于向外的流量。■POLICING(策略)SHAPING用于处理叫外的流量,而POLICIING(策略)用于处

3、理接收到的数据。■DROPPING(丢弃)如果流量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。2.内核实现过程(lp?elayers(TCP,UDP,Inpirlntertxe>InputDt-nulipleiingi—FomrardingaueungOutputInterlaceTnfti:controlRDcessiigofrutwoifcdala图表1流量控制过程绿色部分就是Linux内核实现的QoS模块,滅中ingresspolicing是处理输入数据包的,而outputqueueing则是处理输出数掘包的。2.1.In

4、gress实现机制IngressQOS在内核的入口点有两个,但是不能同时启用,这収决于内核编译选项。当打开了CONFIG_NET_CLS_ACT(from2.6.8releasestillavailableon2.6.39release)时,入口点在src/net/core/dev.c的netif_receive_skb函数巾;当没有打幵CONFIG_NET_CLS_ACT,而是打开了CONFIG_NET_CLS_POLICE(from2.6.9releaseto2.6.24,thusthisisanobsoleteconfigurati

5、on)和CONF1G_NETHLTER时,就会在netfilter的PREROUTING钩子点处调用ing_hook函数。C刪G一XETJCLSJWLICECONF】G_WT_CLSjCT&4C0XFIG_XETFILrER图表2ingress策略实现当filter中有规则时,遍历规则表,寻找与skb-〉mark(由ebtables或iptables来配置)相匹配的表项,如果找到了则会进一步调用tcf_exts_exec函数对扩展的action进行处理fw_classifyTp->classifytitrtLlskb->mark表项tcf

6、_exts_execN图表3FW分类器实现过程2.1.Egress实现机制系统在注册网络设备时会在register_netdevice函数中调用dev_init_scheduler函数注册一个qdisc的接口,它是一个特殊的qdisc:不做任何处理。当创建好设备,用ifconfigup命令把设备拉起G,会调用到内核的src/net/core/dev.c中的dev_open函数,在dev_open函数中乂会调用到src/net/sched/sch_generic.c屮的dev_activate函数,给设备配置默认的rootqdisc处理机制

7、:pfifo_fast。注逝W络设备ifconfigupdevicedcv_init_selivcliiler沌册noop_qdist姑构实例,_读实例不做任钶審情图表4以prioqdisc为例的egress初始化过程出口队列调度的入口点在src/net/core/dev.c的dev_queue_xmit函数中,通过q=rcu_dereference(dev-〉qdisc)可以获取到设备上rootqdisc的指针q(structQdisc*)。在下面的处理过程中并没有判断q是否为NULL,这就说明设备上一定会存在egressqdisc,这

8、一•点和ingress是不同的,一个设备上可以没有ingressqdisc,即dev->qdisc_ingress指针一般是NULL,除非通过tcqdisc命令配置了ingressqdisc。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。