我试图了解启用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缓冲区并推送到上层?
如果有人为我提供了清晰的图片,那将会很有帮助.