html5-img
1 / 12

基于直接用户空间内存访问的 高速网卡驱动

基于直接用户空间内存访问的 高速网卡驱动. 陈明宇 中科院计算所信息安全实验室 2002.10.27. 研究背景. 网络入侵检测、病毒监控、防火墙等应用需要实时获取和分析网络数据包 高速网络的带宽增长迅速: 1Gb 以太网 -  10Gb 以太网 现有的计算机网络处理结构和处理能力跟不上网络发展的要求。. 研究思路. 捕包和分析系统属于专用的系统(第三方),不需要标准的、完备的协议处理 尽量减少中间环节 充分利用系统资源. 研究项目: DUM. Dum- Direct User Memory

laszlo
Télécharger la présentation

基于直接用户空间内存访问的 高速网卡驱动

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 基于直接用户空间内存访问的 高速网卡驱动 陈明宇 中科院计算所信息安全实验室 2002.10.27

  2. 研究背景 • 网络入侵检测、病毒监控、防火墙等应用需要实时获取和分析网络数据包 • 高速网络的带宽增长迅速: • 1Gb以太网- 10Gb以太网 • 现有的计算机网络处理结构和处理能力跟不上网络发展的要求。

  3. 研究思路 • 捕包和分析系统属于专用的系统(第三方),不需要标准的、完备的协议处理 • 尽量减少中间环节 • 充分利用系统资源

  4. 研究项目:DUM • Dum- Direct User Memory • 平台:linux 2.4 Intel 8254X 千兆网卡 • 目标:提供用户程序和网卡之间零拷贝数据包收发,保证分析程序及时处理网络包。

  5. Linux网络数据包接收过程 • 网卡接收数据包,通过DMA传送到主机 • 网卡向主机发送硬件中断 • 硬件中断程序将数据包转入接收队列 • 软中断处理程序对数据包按协议分发 • 用户程序通过系统调用将数据包拷贝到用户空间 • 用户程序进行分析处理

  6. 应用程序 用户缓冲区 用户空间 核心空间 协议栈 PF_PACKET队列 软中断 核心队列 硬中断 DMA缓冲 网卡 Internet

  7. Dum中的关键技术 • 将大容量的用户内存空间映射到核心/DMA空间。 • 修改网卡驱动接口,直接使用用户空间缓冲。 • 用户空间应用程序和网卡驱动的同步 。

  8. 驱动的改进 • 直接使用用户进程缓冲区,减少核心到用户空间内存拷贝 • 免去核心频繁内存分配和不必要的协议处理 • 使用大的缓冲区(可到GB级),减少高峰期丢包率。 • 当网络到达包数超过处理能力时,减少不必要的中断处理和DMA。

  9. 性能测试 • Intel E1000/PRO(intel 82543GX)千兆位以太网卡, cisco 3524交换机,2x1G PIII 服务器 • 64字节小包接收: • libpcap: 13万/秒 vs. dum: 70万/秒 • 64字节小包发送:50万/秒 • 大于256字节包可实现线速收发

  10. 应用展望 • 完全用户空间的协议栈实现,不再受限于核心编程环境。 • 基于用户空间的防火墙、路由器、NAT等,提高系统稳定性。 • 使用用户空间协议栈的高性能专用服务器,如WEB服务。

  11. 标准i82543网卡的硬件限制 • 卡上缓冲区太小:64KB • 接收环太小: 256 • 在接收几十个包后必须中断CPU进行处理。 • 卡上无法进行预处理 • 所有的包只有到主机才能决定是否丢弃 • 每个包的长度无法预先知道,必须预留足够大的缓冲区 • 解决:IOP?

  12. 谢谢!

More Related