Chinaunix首页 | 论坛 | 博客
  • 博客访问: 468523
  • 博文数量: 185
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 681
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-06 21:45
个人简介

为梦而战

文章分类

全部博文(185)

文章存档

2016年(3)

2015年(103)

2014年(79)

我的朋友

分类: LINUX

2014-06-25 00:15:06

最近调试KGDBoE的过程中,终于搞明白了两个概念:NAPI和netpoll。

NAPI用于在禁止中断时以轮询模式操作接口。主要用于网络带宽很高的情况下。对于传统的driver,当接口收到一个包的情况下,就会产生一个中断。但是,当宽带接口每秒钟收到上千个包时,使用中断方式会使系统性能全面下降。所以,为了提高Linux在宽带系统上的性能,使用了一种基于轮询方式的接口。该接口在kernel中的定义:int (*poll)(struct net_device *dev, int *quota)。

netpoll的目的是让内核在网络和I/O子系统尚不能完整可用时,依然能发送和接收数据包。主要用于网络控制台(net console)和远程内核调试(KGDBoE)中。实现netpoll功能,主要是要实现kernel中的poll_controller函数,该函数定义:void (*poll_controller)(struct net_device *dev)。该函数的作用是在缺少设备中断的情况下,还能对控制器做出响应。几乎所有的poll_controller函数都定义成如下形式:
void my_poll_controller(struct net_device *dev) {
disable_device_interrupt(dev);
call_interrupt_handler(dev->irq, dev);
enable_device_interrupt(dev);
}
所以,poll_controller只是模拟了来自指定设备的中断。
阅读(716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~