什么是NAPI?
NAPI是linux新的网卡数据处理API,用于提高网络处理效率。外部设备与中央处理器交互一般有两种手段:轮询和中断。中断看似很高效,但是却会遗漏一些数据,避免遗漏的机制要么由硬件实现要么由上层的软件实现,而轮询就没有中断高效了,它会做很多徒劳的操作,而且必须引入暂存机制,就是说由于cpu不可能在每次查询硬件的时候正好有事情可做,但轮询不会遗漏请求。当外部设备活跃时,频繁的中断会导致大量的CPU开销,此时最好用轮询,但是外设活动很缓和的时候,轮询将会浪费CPU资源。无论设备是否发生状态改变,轮询总在进行。在实际情况中,大多数设备的状态改变通常不会那么频繁,轮询空转将白白浪费CPU时间片。NAPI是两者的结合,数据量低时采用中断,数据量高时采用轮询。平时是中断方式,当有数据到达时,会触发中断处理函数执行,中断处理函数关闭中断开始处理。如果此时有数据到达,则没必要再触发中断了,因为中断处理函数中会轮询处理数据,直到没有新数据时才打开中断。NAPI是linux新的网卡数据处理API,用于提高网络处理效率。外部设备与中央