Linux网络机制 - NAPI

NAPI(Non-Blocking Adapter Polling Interface)是Linux内核中的网络接收机制,它结合中断和轮询的优点,在数据量低时使用中断,高时转为轮询,以降低CPU开销。当数据到达时,NAPI会关闭中断并轮询处理,直到无新数据。然而,NAPI可能导致数据包处理延迟,并且对大包处理效率不高,更适合高速率的短数据包场景。

Linux网络机制 - NAPI

背景

  外部设备与中央处理器交互一般有两种手段:轮询和中断。
  ● 中断看似很高效,但是却会遗漏一些数据,避免遗漏的机制要么由硬件实现要么由上层的软件实现。
  ● 轮询没有中断高效,会做很多徒劳的操作,而且必须引入暂存机制,由于cpu不可能每次查询硬件的时候正好有事情可做,但轮询不会遗漏请求。
  当外部设备活跃时,频繁的中断会导致大量的CPU开销,此时最好用轮询,但是外设活动很缓和的时候,轮询将会浪费CPU资源。

机制

  NAPI是中断和轮询的结合,数据量低时采用中断,数据量高时采用轮询。

Created with Raphaël 2.3.0 中断 中断处理函数 关闭中断 处理数据 没有新数据到达? 打开中断 结束 yes no

  平时是中断方式,当有数据到达时,会触发中断处理函数执行,中断处理函数关闭中断开始处理。如果此时有数据到达,则没必要再触发中断了,因为中断处理函数中会轮询处理数据,直到没有新数据时才打开中断。

缺点

  1. 对于上层的应用程序而言,系统不能在每个数据包接收到的时候都可以及时地去处理它,而且随着传输速度增加,累计的数据包将会耗费大量的内存;
  2. 另外一个问题是对于大的数据包处理比较困难,原因是大的数据包传送到网络层上的时候耗费的时间比短数据包长很多(即使是采用 DMA 方式),因此,NAPI适用于对高速率的短长度数据包的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值