Linux 网络设备驱动之层次结构

    学习网络设备驱动之前,先来分析一下网络子系统的结构等知识。

1.分为用户空间和内核空间,以及物理设备空间;

2.用户空间是应用层,内核空间与应用层交互的是系统文件调用层(system call interface),系统调用和网络协议层之间有个协议无关接口(protocol agnostic interface),网络协议层和设备驱动层(device dirver )之间有个设备无关接口(device agnostic interface);

3.为什么要有协议无关接口?这样系统调用可以用统一的接口来将不同类型的传输协议包送给协议无关接口,经过协议无关接口后来送给协议层处理,方便了应用层的系统调用。

4.为什么要有设备无关接口?这一层提供一组通用函数供底层驱动程序使用,让它们可以对高层协议栈进行操作。向上,为我们的网络协议层来访问设备驱动提供了统一的接口,不管网卡驱动如何写,我们的协议层访问网卡驱动都是用的统一的接口;向下,它为设备驱动程序处理协议提供了统一的接口,比如说网卡接收到了IP包,我们的驱动程序不需要去关心这个IP包是TCP的还是UDP的,甚至它都不需要关心是不是IP包,它将这个包直接丢给设备无关接口来处理了。

    有了网络框架结构的了解,下面从net_device这个结构体来讲起。

1.每个网络接口都由一个net_device来描述,这个结构可以用alloc_netdev或者alloc_etherdev()来分配;

2.这个结构体主要的成员有 

NAPI 是 Linux 上采用的一种提高网络处理效率的技术,它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后 POLL 的方法来轮询数据,(类似于底半(bottom-half)处理模式);从我们在实验中所得到的数据来看,在随着网络的接收速度的增加,NIC 触发的中断能做到不断减少,目前 NAPI 技术已经在网卡驱动层和网络层得到了广泛的应用,驱动层次上已经有 E1000 系列网卡,RTL8139 系列网卡,3c50X 系列等主流的网络适配器都采用了这个技术,而在网络层次上,NAPI 技术已经完全被应用到了著名的 netif_rx 函数中间,并且提供了专门的 POLL 方法--process_backlog 来处理轮询的方法;根据实验数据表明采用NAPI技术可以大大改善短长度数据包接收的效率,减少中断触发的时间;由于 RTL8139CP 是一种应用比较广泛的网络适配器,所以本文以其为例,说明了NAPI技术在网络适配器上的应用和基本原理。 但是 NAPI 存在一些比较严重的缺陷:而对于上层的应用程序而言,系统不能在每个数据包接收到的时候都可以及时地去处理它,而且随着传输速度增加,累计的数据包将会耗费大量的内存,经过实验表明在 Linux 平台上这个问题会比在 FreeBSD 上要严重一些;另外采用 NAPI 所造成的另外一个问题是对于大的数据包处理比较困难,原因是大的数据包传送到网络层上的时候耗费的时间比短数据包长很多(即使是采用 DMA 方式),所以正如前面所说的那样,NAPI 技术适用于对高速率的短长度数据包的处理,在本文的末尾提出了 NAPI 的改善方法,和实验数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值