免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 34608 | 回复: 44

我自己分析内核tc的一点心得 [复制链接]

论坛徽章:
0
发表于 2006-11-11 20:36 |显示全部楼层
包括
tc qdisc add dev eth0 root sfq的内核流程
sch_sfq.c文件分析
tbf的原理
sch_tbf.c的分析

桌面.rar

23.93 KB, 下载次数: 2090

论坛徽章:
0
发表于 2006-11-13 14:32 |显示全部楼层
看不太懂!

论坛徽章:
0
发表于 2006-11-13 15:12 |显示全部楼层
谢谢 qtdszws,干的不错;

论坛徽章:
0
发表于 2006-11-13 15:42 |显示全部楼层
其实我前段时间才真正开始研究网络。以前看过情景分析,把socket层基本搞清楚。往下是inet socket层,也不是很难。再往下就是传输层,TCP/UDP,虽然看过TCP/IP详解的一,二卷本,但仍一头雾水,看不懂(原因估计是太庞大,又盘根错节)。决定再从下往上。

先看了net/core/*.c,许多都看不同,但总算有了一些认识。然后看drivers/net/ne.c,loopback.c驱动,知道了驱动大概情况。

再往上就是qos了,也就是net/sched/*.c.从最简单的看起,sch_generic.c(其中有noop_disc,noqueue_qdisc,pfifo_fast_qdisc),sch_fifo.c。这些基本内容之后就看sch_sfq.c,sch_tbf.c,这两个稍微复杂一点,但是和别的东西独立(只是牵涉到af_netlink,sch_api.c),因此也比较容易理解.

再往后看了sch_prio.c,这是一个可分类的规则,很简单,但也很重要。因为能够分类(能够挂接其他队列规则),因此又涉及到分类器。于是从前天到昨天花了两天时间集中研究了u32分类器(cls_u32.c),这个分类器功能很强大,因此结构异常复杂。然后附带研究了一下fw分类器,这个分类器原理很简单。

分析的时候我同时进行试验,先在在virtual pc上,然后实战。我们学校的网关是我装的,redhat 7.2(2.4.7-10smp).以前照葫芦画瓢建了两个简单tc规则.
tc qidsc add dev eth0 root sfq perturb 10
tc qidsc add dev eth1 root sfq perturb 10
eth0接外网,eth1接内网,iptables做nat和过滤包。

现在稍微懂了一些qos后,修改了一下规则
#!/bin/bash -x

for i in 0 1
do
/sbin/tc qdisc del dev eth$i root
/sbin/tc qdisc add dev eth$i handle 1: root prio bands 3 priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
/sbin/tc qdisc add dev eth$i parent 1:1 sfq perturb 10
/sbin/tc qdisc add dev eth$i parent 1:2 sfq perturb 10
/sbin/tc qdisc add dev eth$i parent 1:3 sfq perturb 10
if [ $i -eq 0 ];then port="dport";addr="16";else port="sport";addr="12";fi
/sbin/tc filter add dev eth$i parent 1: pref 10 protocol ip u32 match ip protocol  6 0xff match ip $port 80 0xffff flowid 1:1
/sbin/tc filter add dev eth$i parent 1: pref 10 protocol ip u32 match u32 0xaabbccdd 0xffffffe0 at $addr flowid 1:2
done

这样可以对校内的流量进行象样的qos了,保证http流量优先,其次是访问我们自己的公网服务器的流量,最后是其他流量,这些流量都是通过u32分类器进行分类.当然也可以使用fw分类器来完成这些任务。试验的时候有些命令不会用就看Linux的高级路由和流量控制HOWTO.pdf,然后在对照iproute2中tc的源代码,可以起到事半功倍的效果,而不是以前的抓瞎了(tc比较难用,有没有正规的手册)。

接下来我准备继续把其他的几个算法看完,包括cls_route,cls_tcindex,sch_red,sch_gred,sch_teql,sch_dsmask,sch_cbq(这个最麻烦了),sch_ingress.等等。

把这些看完就了后,往上到邻居子系统层(arp),再到ip层(包括路由子系统,netfilter子系统,icmp,igmp,ipip,等等),最后再猛攻UDP/TCP.

路还很长,但我有信心走下去。

[ 本帖最后由 qtdszws 于 2006-11-13 15:45 编辑 ]

论坛徽章:
0
发表于 2006-11-13 15:51 |显示全部楼层
sch_prio队列规则的分析
cls_u332分类器的分析
cls_fw分类器的分析

桌面2.rar

41.58 KB, 下载次数: 911

论坛徽章:
0
发表于 2006-11-13 16:03 |显示全部楼层
“试验的时候有些命令不会用就看Linux的高级路由和流量控制HOWTO.pdf,然后在对照iproute2中tc的源代码,可以起到事半功倍的效果“

呵呵,的确,有些时候看代码得到答案的速度会快一些,正如 Torvalds 所说:Use the Source, Luke!

论坛徽章:
0
发表于 2006-11-14 09:17 |显示全部楼层
原帖由 qtdszws 于 2006-11-11 20:36 发表
包括
tc qdisc add dev eth0 root sfq的内核流程
sch_sfq.c文件分析
tbf的原理
sch_tbf.c的分析


要分析Linux 的QoS框架,明白内核的队列层是很重要的,楼主有没有这方面的资料??最近看这个,似懂非懂,呵呵!

论坛徽章:
0
发表于 2006-11-15 10:04 |显示全部楼层
这方面的资料比较匮乏,我只有Linux的高级路由和流量控制HOWTO.pdf,其实源代码才是最宝贵的第一手资料(包括tc的)

修正发现的错误:
1.令牌桶过滤器的原理中
“如果令牌不够,数据需要等待一定的时间才被发送,这个时间是由latency参数控制。”这句话有误,这个时间不是由latency参数控制的,而是根据还需要多少令牌来计算延迟的时间,然后启动看门狗定时器。

2.u32分类器的数据结构的组织理解有误,修改过的文件在附件中

u32分类器比较复杂(非常容易写错),而fw却很简单(非常容易写),建议大家用fw.

tc filter add u32.rar

11.91 KB, 下载次数: 4769

论坛徽章:
0
发表于 2006-11-29 23:06 |显示全部楼层

我需要

论坛徽章:
0
发表于 2006-11-30 16:50 |显示全部楼层
学习了。我最近也在学linux内核编程,
写了一个大概,希望能坚持下去。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP