相关疑难解决方法(0)

关于Linux内核中的NAPI实现

我试图了解启用NAPI的网络驱动程序,并对此有一些疑问.

如果我在接口处有网络数据包时以外行人的话来谈论它,它会被通知给CPU并执行相应的以太网驱动程序(中断处理程序)代码.然后,以太网驱动程序代码将数据包从以太网的设备存储器复制到DMA缓冲区,最后是数据包被推到上层.

NAPI禁用以太网驱动程序是否真的如此?

现在,对于NAPI启用的以太网驱动程序,无论何时数据包到达接口,都会通知CPU并执行相应的以太网驱动程序代码(中断处理程序).在中断处理程序代码中,我们检查是否接收到中断类型数据包.

 if(statusword & SNULL_RX_INTER)
   snull_rx_ints(dev,0);//Disbale further interrupts
   netif_rx_schedule(dev);
Run Code Online (Sandbox Code Playgroud)

禁用进一步中断意味着什么?

这是不是意味着数据包仍然被设备捕获并保存在设备内存中,但没有通知CPU有关这些数据包的可用性?

另外,CPU的意思是汇集设备,就像CPU每隔几秒就会运行snull_poll()方法并将设备内存中的任意数量的数据包复制到DMA缓冲区并推送到上层?

如果有人为我提供了清晰的图片,那将会很有帮助.

network-programming linux-device-driver linux-kernel

4
推荐指数
1
解决办法
3151
查看次数