免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lenn
打印 上一主题 下一主题

Intel-E100网卡驱动实例分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-17 17:49 |显示全部楼层 |倒序浏览
大家拾柴火焰高,我也跟点风,把intel-e100的驱动程序整理了,呵呵
有错误请指正。

PS:这个论坛限制100k的附件,太小了,我的pdf贴不进来,只好用doc文件。提个小意见。


完整的PDF文件:

[ 本帖最后由 lenn 于 2006-10-27 18:03 编辑 ]

Intel E100 网卡驱动实例分析.pdf

174.48 KB, 下载次数: 1172

PDF文件

论坛徽章:
0
2 [报告]
发表于 2006-01-18 09:17 |显示全部楼层
我的定义是像
iptables -I FORWARD -m geoip --dst JP -j DROP
iptables -I FORWARD -m string --string "Japan" -j DROP
iptables -I INPUT -m geoip --src JP -j MIRROR
这样,包是直接走你的网卡的,这是直路控制,
旁路控制就是包不直接走你的网卡,你得到的是一份复制的流量,根据复制的流量进行拦截,就是旁路;
旁路的好处是拦截系统挂了,不影响正常的系统工作,而且性能比较高,电信过滤大都是这样做的;

论坛徽章:
0
3 [报告]
发表于 2006-01-18 22:37 |显示全部楼层
线速达不到,我们实际电信生产大概一台机器2个网卡能处理1.8G的流量,1个网卡处理950M流量。
实际上“线速”这个概念只存在于实验室,电信的乱包大概是100多字节长度比较多,而且很多都是
大包。旁路拦截其实发出来的拦截包很少的,普通网卡用sock_raw发包就足够了,主要是能收下所有
的包及时处理,“及时”的概念是在下一轮收报不给覆盖,就可以了,延迟点问题不大,因为你处于被控制
的地方最近,通常是出口附近。而访问的地方通常是比较远,跨越路由器的。

我叫lenn,不是len,呵呵...

论坛徽章:
0
4 [报告]
发表于 2006-01-19 14:25 |显示全部楼层
延时大点无所谓,我的意思是说,给网卡开的缓冲区是一定的,即使用内部协议栈,包在系统内的生存时间总有一个固定值,
假如说一个网卡1000K包数/秒,开辟一个100M大小的缓冲区,因为一个eth frame是1500,为了计算方便,给每个包使用
2k字节, 则1M放512个包, 100M可以放共100*512= 50K个包; 如果不做任何处理,则包的生存时间是1/20秒= 0.05秒
也就是如果应用程序能够50毫秒内处理完这个包,则系统相当不丢包,在这个条件下,一个应用程序如果有锁的碰撞,很容易丢包.

旁路拦截是在智能交换机(路由器)中,使用portmap或者端口分光技术,把出口的流量进行复制后送给处理机器,这样处理机器
就能处理那么多的流量了. 通常回复包的速度要远远快于正常请求包速度,这样就能先到达请求机器,从而达到控制的目的.
这种情况下,只能对tcp进行拦截,对udp无能为力,如果要对udp应用拦截,只能是模拟应用发送udp请求包.

这个系统缺点是要使用交换机等设备,但是能做交换机作不到的很多工作,比如应用拦截,统计,监控等.
如果采用直接拦截,我认为目前的PC SERVER是达不到这样的能力的,一个普通的防火墙应用,最多也只能处理300M左右
的流量吧(不确定).所以要用PC作这样的高性能防火墙,估计性能还是不怎么够.

如有错误,请多指教,呵呵.

论坛徽章:
0
5 [报告]
发表于 2006-01-19 16:02 |显示全部楼层
技术瓶颈是在抓包这一块,如果走协议栈,CPU都消耗在system上了,达不到要求;
如果CPU> 2.4G的主频,那性能瓶颈是应用处理, 为了分析各种包, 必须要把所有的原数据,比如用户信息,过滤关键信息等
都放在大内存中作cache,这么大的流量,频繁的锁肯定是不能用的,其实都没有什么技术含量了,只有一些经验的做法,知道
怎么处理更快,怎么处理更节约时间,呵呵.

论坛徽章:
0
6 [报告]
发表于 2006-02-17 15:24 |显示全部楼层

回复 27楼 depthblue_xsc 的帖子

哈哈,既然你问了,我就说说看.在哪个公司就不说了,不过反正今年想变变,我们是给电信作流量分析等的.如果你们需要zero-copy技术,我可以提供合作,呵呵.e100/e1000都可以,其他网卡要再开发.
端口镜像
通过在网络的核心层或汇聚层交换机上设置端口镜像,将交换机上联端口的出流量镜像一份到采集机器上,即可采集到用户访问网络的请求。绝大部分中高端交换机均支持端口镜像功能,如Cisco Catalyst 序列、3Com CoreBuilder序列、华为的S8000序列、Foundry的BigIron 4000/8000序列、Extreme的BD6800/AP3800序列等。基于端口镜像进行流量采集时,系统的采集机一般通过2个FE端口或者一个GE及一个FE端口和采集点交换机进行直连。
分光技术
某些节点,接入服务器通过光口GE链路直接与核心路由器(一般为Cisco GSR)相连,宽带接入服务器及GSR均不支持端口镜像,这时采用分光器进行流量采集是最合适的方法。当某些节点的核心交换机或汇聚层交换机没有足够的GE端口,不适合采用端口镜像进行流量采集时,也可以采分光器进行流量采集。分光器是一种无源光器件,通过在物理层上进行光复制来进行用户访问请求数据的采集。

论坛徽章:
0
7 [报告]
发表于 2006-02-20 14:47 |显示全部楼层
原帖由 guotie 于 2006-2-20 14:18 发表
还有一个问题,zero-copy 肯定需要一次性分配很多连续的内存空间,用__get_free_pages一次好像只能得到1024个页面,即4Mbyte,lenn是怎么得到更多的内存空间的呢?


哈哈,你好笨哦,一次2M,多分配几次,搞个数组或者list存起来不就可以了么,干嘛还想着改核心参数阿,那样会带来不稳定的因素的.
有时候最笨的方法是最有效的,呵呵.

你把协议栈移植到用户空间,是你的想法还是你们的项目阿,这个好像比较困难吧.如果有钱,咱们一起研究下,哈哈.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP