千兆网卡驱动的设计

1 影响数据传输的因素

  1. 数据传输方式。驱动与网卡进行数据传输有轮询方式、中断方式和DMA方式。不同的传输方式会影响数据传输的效率。
  2. 中断开销。中断处理中要保护程序的上下文,这些处理会消耗CPU资源。如果中断非常频繁的话,会影响整个系统的效率。
  3. 内存拷贝开销。大批量的内存拷贝会消耗大量的CPU资源。如果发生缺页异常的话,需要从外部设备中将数据调入内存中,这样会增大时延。

2 解决上述问题的方法

  1. 减少中断开销。接收到中断请求后关闭中断,将数据处理完成后再打开中断。具体采用NAPI技术,结合关中断和合中断技术。网卡硬件在接受多个数据包后,触发接受中断,网卡驱动在中断处理程序中调度接收线程,并关闭设备中断,然后从硬中断中返回。返回后并不打开中断,所以系统不会被后来的接受或发送中断打扰,直到接收线程处理了所有待处理的数据包后激活设备的接收中断。
  2. 减少内存拷贝。基本思想是实现内存共享,在不同对象对数据处理时要注意同步和互斥。借鉴Zero-Copy技术,用户空间和网卡驱动共享缓冲区结构。Zero-Copy技术在对数据包处理的过程中越过了对内核协议栈的处理,所以常用于在有对数据包进程协议处理的驱动。

在微内核中,协议栈是在网络服务器中进程处理的。应该可以直接使用该技术。
DMA技术不通过CPU进行内存之间的拷贝,减少CPU的负载,实现Zero-Copy。借助DMA技术应该可以使驱动和网卡之间的内存拷贝更快。在后续实现时可以考虑使用DMA技术进行内存拷贝。

  1. 选用高速中线。网卡驱动中要对总线及其设备进行初始化,并封装对数据的收发操作。

3 网卡驱动设计

3.1 功能需求分析
  1. 初始化网卡硬件。内核启动或加载网卡驱动模块的时候,完成对硬件的初始化。建立注册网卡在内存中对应的结构体、缓冲区、设备的MAC地址和相应的中断处理函数。
  2. 提供网卡的配置与管理接口。提供给用户程序需要的网络地址、硬件地址,配置MAC数据路由等。
  3. 完成数据包的收发。完成用户程序与网卡之间的数据传输功能。
3.2 网卡驱动工作原理

由内核中的相关子例程和数据组成的I/O设备软件接口。子例程包括打开/关闭/配置设备接口、发送/接收数据接口。这些接口为用户程序提供了网卡和对网卡操作的抽象(将网卡设备抽象成设备文件,将对网卡的操作抽象为对文件的操作)。用户程序使用这些接口,可以像操作文件一样操作网卡设备。

3.3 网卡驱动的体系结构

从上到下分为四层,分别为网络协议接口层、网络设备接口层、提供实际功能的设备驱动功能层和网络媒介层。网络设备接口是网卡在内存中的映像,反应网卡的状态和能够对网卡进行什么操作。设备驱动功能层是各个功能的封装实现。网络媒介层为网卡与网络环境的概述。网卡驱动的体系结构如下图所示,下图中的函数名为Linux中的函数。
网卡驱动的体系结构

3.4 网卡驱动的关键数据结构
  1. net_device结构。声明定义网卡设备和管理网卡设备的方法。网卡的抽象。
  2. sk_buff(套接字缓冲区)结构。声明定义套接字缓冲区和管理缓冲区的方法。网卡端口的抽象。

参考文献:
易正利. 基于Linux的千兆网卡驱动程序实现及数据传输效率优化

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值