分享

NAPI和netpoll区别

 昵称7975692 2011-10-23
最近调试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只是模拟了来自指定设备的中断。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多