论文部分内容阅读
传统路由器操作系统大多基于Linux深度定制。Linux操作系统的程序运行环境分为内核态和用户态。运行在内核态的程序权限最高,可以进行所有操作。传统的驱动程序,一般实现在内核态,一方面由于它的重要地位,一方面是因为访问硬件的IO指令属于特权指令。驱动程序运行在内核态,意味着驱动程序有着和操作系统相同的权限,一旦驱动程序出现bug,将可能破坏内核的数据结构,甚至可能导致整个Linux系统崩溃。运行在用户态的程序权限最低,在这个级别中,处理器控制着对硬件的直接访问以及对内存的非授权访问。在用户态开发驱动程序,能够减少内核代码量,增强内核稳定性。而且用户态的程序运行出错一般不会造成整个系统的崩溃,只需要将进程杀掉即可,能保证整个系统的运行安全。同时,用户态驱动程序对内核依赖性小,便于驱动的升级和集成第三方应用。DPDK(Data Plane Development Kit),是Intel公司推出的面向通用多核处理器的数据面开发软件库。DPDK将网卡驱动程序的大部分实现在了用户态,并且取得了传统Linux驱动程序难以比拟的高性能。BCM5719(Broadcom 5719)是一款性价比出色的以太网芯片,广泛应用于服务器和通讯设备领域,目前DPDK中尚未加入对该网卡的支持。本文深入分析了 DPDK有关用户态驱动程序的实现框架,结合数据面处理领域运用到的网卡性能优化手段,实现了大部分工作在路由器用户态的BCM5719以太网芯片驱动程序,相比传统的纯内核态驱动拥有更高的报文转发性能。该驱动程序包含内核态部分和用户态部分。其中内核态部分实现中断响应和处理等少部分工作。用户态部分实现了网卡初始化、转发任务、网卡配置等大部分工作。本文工作主要分为以下三个部分:1.熟悉国内外有关用户态驱动程序的研究现状。深入分析了 DPDK中基于UIO(UserspaceI/O)框架的用户态网卡驱动程序的设计和实现。2.以传统路由器网络系统BCM5719以太网芯片为例,分析BCM5719网卡的初始化流程、多队列报文收发流程以及中断处理流程等。设计并实现了BCM5719用户态网卡驱动程序。3.深入分析业内网卡性能优化的主要手段,例如线程绑定、无锁化的数据结构、轮询与中断相结合等,并将这些优化手段应用到本文设计的用户态网卡驱动程序中去。最后与传统的完全工作在内核态的BCM5719驱动程序进行吞吐量等性能比较。