现在的位置: 首页 > 综合 > 正文

kernel module编程(二):一些古老的记忆

2013年10月08日 ⁄ 综合 ⁄ 共 1745字 ⁄ 字号 评论关闭

  本文档和技术没有直接关联,只是一些回忆。

 
 记录内核模块变成是因为最近在搞那个可恶的GMA500的驱动,翻到了《Linux Device
Drivers》。回想起来我倒真有一个设计kernel
模块的项目,也算大的。我处理器中内核模块,也就是高速从网卡过滤数据包的方式,上层软件从内核模块中获取过滤(包括端口范围、IP地址范围、关键字、协
议特征等等)的包进行协议分析,除了记录分析外还有一些其他的处理,和kernel module没有关系。整个关键就是过滤的效率。

 
 这是我第一个接触Linux kernel module的项目,而且对性能的要求很高。对于SMP
Linux,内核kernel模块如何实现CPU均衡,麻烦死了,而且效果不太好,因为每一个网卡的接收都指定使用某一个CPU,缺省是CPU0,这部分
资源耗费不是我们的代码可以解决。百兆流量没有问题,千兆就很惨,为了这个问题提供花费了很长时间(按月计算)。

 
 我还记得为了保证同时过滤,同时向上层分析软件提供数据,采用了两个队列轮回的方式,其中还有些一些"巧妙"的处理,我只记得在上面使了点小聪明,用来
特别的方式。可是过了一段时间我看回那段程序,我只记得目的,但是如何处理,已经看不懂了。看来人是越来越笨的,没有将处理方法加注,只说明了处理目的。
这个印象很深,所以注释或者笔记是必须的。

 
 实际上那时,根本就没学过内核模块编程,也没有人可以找,我在很长一段时间内都认为程序、程序语言都只是工具,工具不需要明白原理,只要会用就行,一开
始时间也紧,网上共产主义的没有现在繁荣,而且向来也就不求甚解,只求何用。直接在一个开源程序中看懂的,只能说看懂了怎么做。现在翻开

Linux Device Drivers》.,才发现,这个见过,原来是这么一回事……惭愧!

 
 千兆高速分析的性能测试被人整过,这事我记得。实际上也是我们单位悲哀,典型的窝里斗。测试由数据部的同事进行,事后才知道一开始就定调不让通过。原因
不详,估计和利益有关系。但是关系这个东东,你可以让不通过的变成通过,但是不能让通过的变成不通过。不过让你不过就不过,办法总是有的。哼哼,那个家
伙,我记得……不,已经不记得是谁了。实际上数据包的分析和流量并没有直接关系,只是和每秒的数据包的数目有关,处理的单位是数据包,不是一个一个比特。
一般来讲每秒数据包数据越多,带宽越大。我们自己测试的时候好像是按照平均包大小为100-200byte来计算,具体是多少忘了,因为实际网络上有很多
1500的包,BT嘛。但是他们测试给出的包除了目标包之外,都是短包,不记得具体是多少,好像是40或者32,即是smartbit发送的缺省短包,因
为现象就不对,问他们怎么配,死后不说,后来才知道的。测试环境的每秒packet实在太大了,和实际值差太多,短一半就消耗至少多一倍,少了几
倍,CPU就多几倍。而网卡接收这部分只能通过一个CPU来处理,内核模块里面到可以轮选,但是切换CPU也是消耗的,所以最后简单处理是选择和接收不同
的CPU,尽可能优化程序。但是接收的问题不是我能解决。就这样被“自己人”玩了一把。

  当开发人员去接触单位政治是一种悲哀。不知道领导上面的关系如何,但是下面同事的关系还是可以的,当时不敢和我说,实际上最后还是知道的。相对一声叹息,还能如何……

  这个项目测试问题,领导后来去解决,具体的不清楚,但是这种测试很无耻,没有底线。

 
 这个项目的最后一个故事是后来另一个同事抽取其中的某些部分去报了专利,今年年初批下来了。具体报了哪一部分不记得报。记得批下来之后,看了电子扫描文
档,哇,前面挂的领导的名字那个长啊,挂第一位,不,应该说挂1、2、3位的可能都不知道这个项目具体的开发者是哪个小人物,而且我相信,挂在1、2、
3、4、5位的他们根本不知道这个专利说将的技术具体是什么,说白了,他们啥都不清楚。我终于在倒数第二发现了我名字,倒数第一是这个项目的另一个开发者
及申报者。不错了,虽然排在第7、第8,至少让我们漏了把脸,我们要感谢领导们宽广的胸怀,在这个学术腐败争名夺利的地方,居然还能让开发人员排上,虽然
有些勉强,虽然考在最后,上去嘛总比不上的强。

 

相关链接:

我的与kernel module有关的文章

抱歉!评论已关闭.