LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1435|回复: 3

[讨论]基于硬件ip加速器的tcp ip协议栈优化

[复制链接]
发表于 2006-8-9 00:18:51 | 显示全部楼层 |阅读模式
大家好,我有一些不成熟的想法,想请大家来讨论一下。
  首先,我的目的是使网络设备获得更大的吞吐量。
  对于基于linux的tcp/ip协议栈,它主要的系统资源消耗来自于以下两点:
1 tcp/ip协议栈中关于crc校验是由软件计算得出,而软件计算crc校验需要循环相除;
2 对于ethernet来说数据从网卡到user space需要两次cpoy,即driver->kernel(tcp/ip协议栈)->user space,而数据的发送同样需要这样一个反向地过程。
  对于linux的tcp/ip协议栈来说,它针对不同的cpu进行了有针对性的优化,针对协议栈本身的优化空间很小,但是在crc这部分还是有潜力可挖的。使用硬件实现crc最快的方法就是硬件逻异或,这里的时延是通过两个逻辑门的时间,典型时间为10ns。我的想法是在网卡的硬件mac上实现crc。现在我已经完成了一个基于FPGA的10/100/1000M可用的硬件mac,FPGA用的是xilinx的vertex 4 pro 90nm工艺,可是实际测试的吞吐量在100M时只有75~80M bit。
  第二点是减少copy的次数。对于kernel space到user space可以通过映射实现零拷贝(zero copy),也就是说传递的只是指针,没有实际的数据流,对于网卡到kernel space这部分还是会有一次cpoy。数据一经过总线就会有瓶颈,哪能不能把kernel spcae放到网卡的buffer中去呢?或者仅仅是kernel space的一部分放到buffer中?以前看到一篇文章说有一个实现叫x-kernel,它好像就把kernel space的一部分放到mac的环形buffer中去,但是同一个地址有两个操作源就必须解决互锁和失效的问题,那我在driver中又如何实现这种互锁的过程呢?
  最后一个问题是关于网卡driver,我现在采用了查询结合中断的办法。来中断后,内核挂两个定时器,第一个定时器决定关闭中断的时间,定时时间未到的情况下采用查询,这样可以减少cpu的中断开销。第二个定时器决定了查询的周期。比如第一个定时器的周期是10sec,第二个为1sec。在10秒内采用查询,每秒查询一次。我的问题是如何解决两个定时器互相传递信息的问题。因为我采用了一些动态的自适应算法,可以估计定时的时间长短。那在这种时间非常短的情况下我改采用什么样的同步机制呢?
  请高手来讨论一下,最近为了这个问题一直掉头发……
 楼主| 发表于 2006-8-15 11:21:24 | 显示全部楼层
没有人回答?还是我发错了地方?
回复 支持 反对

使用道具 举报

发表于 2006-8-15 11:38:19 | 显示全部楼层
你的想法很好,你可以看一下网络处理器,有这样的实现.
回复 支持 反对

使用道具 举报

发表于 2006-8-24 11:43:46 | 显示全部楼层
感兴趣
可惜没能力
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表