Linux network code reading (TODO)

接收packet的时候,Kernel有两套机制。一套是传统的,但其在高速网络上已经不够用了。另一套的API命名为NAPI(New API)的意思。

在传统机制下,系统收到一个网络包时,会调用三个函数。 net_interruptnet_rxnetif_rx 。前两个是网卡设备相关的,后面那个则已经是 设备无关的,它会把收到的网络包放到wait-queue里去,最后产生一个软中断。

在新的API机制下,中断和轮循被同时采用。当收到第一个packet的时候,系统 会产生中断,然后关中断——采用一直轮循该网卡设备的方式,看有没有新的 packet要处理。

这个新机制要求设备能缓存一定数量的网络包。比如缓存在DMA中。另外还要求 设备必须可以关闭收数据包的中断。如果有多个新机制的设备的话,多个设备之间采用 round robin 的方式。