120 likes | 355 Views
基于直接用户空间内存访问的 高速网卡驱动. 陈明宇 中科院计算所信息安全实验室 2002.10.27. 研究背景. 网络入侵检测、病毒监控、防火墙等应用需要实时获取和分析网络数据包 高速网络的带宽增长迅速: 1Gb 以太网 - 10Gb 以太网 现有的计算机网络处理结构和处理能力跟不上网络发展的要求。. 研究思路. 捕包和分析系统属于专用的系统(第三方),不需要标准的、完备的协议处理 尽量减少中间环节 充分利用系统资源. 研究项目: DUM. Dum- Direct User Memory
E N D
基于直接用户空间内存访问的 高速网卡驱动 陈明宇 中科院计算所信息安全实验室 2002.10.27
研究背景 • 网络入侵检测、病毒监控、防火墙等应用需要实时获取和分析网络数据包 • 高速网络的带宽增长迅速: • 1Gb以太网- 10Gb以太网 • 现有的计算机网络处理结构和处理能力跟不上网络发展的要求。
研究思路 • 捕包和分析系统属于专用的系统(第三方),不需要标准的、完备的协议处理 • 尽量减少中间环节 • 充分利用系统资源
研究项目:DUM • Dum- Direct User Memory • 平台:linux 2.4 Intel 8254X 千兆网卡 • 目标:提供用户程序和网卡之间零拷贝数据包收发,保证分析程序及时处理网络包。
Linux网络数据包接收过程 • 网卡接收数据包,通过DMA传送到主机 • 网卡向主机发送硬件中断 • 硬件中断程序将数据包转入接收队列 • 软中断处理程序对数据包按协议分发 • 用户程序通过系统调用将数据包拷贝到用户空间 • 用户程序进行分析处理
应用程序 用户缓冲区 用户空间 核心空间 协议栈 PF_PACKET队列 软中断 核心队列 硬中断 DMA缓冲 网卡 Internet
Dum中的关键技术 • 将大容量的用户内存空间映射到核心/DMA空间。 • 修改网卡驱动接口,直接使用用户空间缓冲。 • 用户空间应用程序和网卡驱动的同步 。
驱动的改进 • 直接使用用户进程缓冲区,减少核心到用户空间内存拷贝 • 免去核心频繁内存分配和不必要的协议处理 • 使用大的缓冲区(可到GB级),减少高峰期丢包率。 • 当网络到达包数超过处理能力时,减少不必要的中断处理和DMA。
性能测试 • Intel E1000/PRO(intel 82543GX)千兆位以太网卡, cisco 3524交换机,2x1G PIII 服务器 • 64字节小包接收: • libpcap: 13万/秒 vs. dum: 70万/秒 • 64字节小包发送:50万/秒 • 大于256字节包可实现线速收发
应用展望 • 完全用户空间的协议栈实现,不再受限于核心编程环境。 • 基于用户空间的防火墙、路由器、NAT等,提高系统稳定性。 • 使用用户空间协议栈的高性能专用服务器,如WEB服务。
标准i82543网卡的硬件限制 • 卡上缓冲区太小:64KB • 接收环太小: 256 • 在接收几十个包后必须中断CPU进行处理。 • 卡上无法进行预处理 • 所有的包只有到主机才能决定是否丢弃 • 每个包的长度无法预先知道,必须预留足够大的缓冲区 • 解决:IOP?