参考链接:

  • NAPL模式
  • NAPL简介
  • 硬中断和软中断
  • 中断与轮询的区别一
  • ring buffer

一、 中断

  • 从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。
  • 如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事,跳到中断处理程序的入口点,进行中断处理。

1. 硬中断

  • 由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。

2. 软中断

  • 为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。

3. 区别

  • 软中断是执行中断指令产生的,而硬中断是由外设引发的。
  • 硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。
  • 硬中断是可屏蔽的,软中断不可屏蔽。
  • 硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。
  • 软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。
  • Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。

二、轮询

轮询(Polling)IO方式或程序控制IO方式,是让CPU以一定的周期按次序查询每一个外设,看它是否有数据输入或输出的要求,若有,则进行相应的输入/输出服务;若无,或I/O处理完毕柏,CPU就接着查询下一个外设。

三、ring buffer

因为分配给 Ring Buffer 的空间是有限的,当收到的数据包速率大于单个 CPU 处理速度的时候 Ring Buffer 可能被占满,占满之后再来的新数据包会被自动丢弃。

如果在多核 CPU 的服务器上,网卡内部会有多个 Ring Buffer,NIC 负责将传进来的数据分配给不同的 Ring Buffer,同时触发的 IRQ 也可以分配到多个 CPU 上,这样存在多个 Ring Buffer 的情况下 Ring Buffer 缓存的数据也同时被多个 CPU 处理,就能提高数据的并行处理能力。

当然,要实现“NIC 负责将传进来的数据分配给不同的 Ring Buffer”,NIC 网卡必须支持 Receive Side Scaling(RSS) 或者叫做 multiqueue 的功能。RSS 除了会影响到 NIC 将 IRQ 发到哪个 CPU 之外,不会影响别的逻辑了。数据处理过程跟之前描述的是一样的。

三、 NAPI: 数据包处理-中断和轮询的折中方法

  1. 使用中断方式时,当包数量过多时,cpu会忙于响应中断而其他线程无法正常使用cpu,造成无法正常工作,因此启动轮询方式来遍历,禁止中断,保证其他线程正常工作。
  2. NAPI方式对网卡的收包方式提出了要求,那就是需要支持ring buffer(即支持DMA)的网卡才能真正意义上的使用NAPI方式进行收包,不支持DMA的网卡还是需要通过中断的方式进行收包。
  3. NAPI 是 Linux 上采用的一种提高网络处理效率的技术,它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后 POLL 的方法来轮询数据。

网卡收包基础: 中断-轮询-ring buffer-DMA-NAPI相关推荐

  1. 《深入浅出DPDK》读书笔记(八):网卡性能优化(异步中断模式、轮询模式、混和中断轮询模式)

    本文内容为读书笔记,摘自<深入浅出DPDK> 82.DPDK的轮询模式 <DPDK PMD( Poll Mode Driver)轮询模式驱动程序> DPDK采用了轮询或者轮询混 ...

  2. Linux网络协议栈:网卡收包分析

    Table of Contents 网卡收包 一,框架 二,初始化 三,驱动收包 四,内核处理 参考文章 推荐阅读 网卡收包 内核网络模块如何初始化? 内核如何通过网卡驱动收发数据包? 驱动收到的数据 ...

  3. DPDK 网卡收包流程

    Table of Contents 1.Linux网络收发包流程 1.1 网卡与liuux驱动交互 1.2  linux驱动与内核协议栈交互 题外1: 中断处理逻辑 题外2:中断的弊端 2.linux ...

  4. 网卡收包流程分析(一)

    由于本人工作内容主要集中于kernel的网络子系统,刚接触这个模块,于是想梳理一下网卡驱动的收包过程,以下内容为个人理解,如有不对,希望大家能够多多指正,相互成长~ 后续会持续更新有关kernel网络 ...

  5. 代码学习-Linux内核网卡收包过程(NAPI)

    本文通过学习RealTek8169/8168/8101网卡的驱动代码(drivers/net/r8169.c).梳理一下Linux下网卡的收包过程. 在下水平相当有限,有不当之处,还请大家斧正^_^ ...

  6. 32位网卡驱动 2008_DPDK之网卡收包流程

    1.导读 一个网络报文从网卡接收到被应用处理,中间主要需要经历两个阶段: 阶段一:网卡通过其DMA硬件将收到的报文写入到收包队列中(入队) 阶段二:应用从收包队列中读取报文(出队) 下面以ixgbe网 ...

  7. 服务器网卡收包性能测试

    之前写过不少跟网络相关的 benchmark,比如: * <网络质量评估> * <10G(82599EB) 网卡测试优化(总)> 上面的更多的是放在带宽使用率上,即如何尽可能的 ...

  8. linux 网卡 轮询,中断还是轮询?取个数据包真麻烦!

    原标题:中断还是轮询?取个数据包真麻烦! 网络部新员工 我叫Robert,是Linux帝国一个普通的公民. 今天是我第一天上班的日子,我下了好大功夫才考上了帝国的公务员,根据我的成绩,我被分到了帝国网 ...

  9. Linux C语言在用户态实现一个低时延通知(eventfd)+轮询(无锁队列ring)机制的消息队列

    目录 fastq.c fastq.h test-0.c test-1.c https://github.com/Rtoax/test/tree/master/ipc/github/fastq fast ...

最新文章

  1. springmvc不断输出文本到网页
  2. Nexus安装及配置
  3. WEB入门之十九 UI
  4. Centos7忘记密码——转
  5. java 等待唤醒机制,Java线程等待唤醒机制
  6. ChaiNext:当前市场短期行情波动大
  7. LeetCode刷题(45)--Remove Duplicates from Sorted List
  8. Java 并没有死!
  9. 惠普计算机开机半花屏,惠普电脑花屏怎么办
  10. OpenDaylight VTN 项目指南
  11. **一些常用的字体英文名**
  12. 给div元素设置背景颜色
  13. lwip连续发数据卡死_用lwip发送大量数据时,遇到的问题解答记录 | 求索阁
  14. wechat小程序布局flex
  15. ini 文件 使用说明
  16. 人体的神经系统图 分布,神经系统分布图解析图
  17. 2019美团后台开发工程师笔试
  18. “90后”女大学生奇怪 白毛女为何不嫁黄世仁
  19. 2021乐平四中高考成绩查询,喜报!乐平高考成绩出炉!2019再创佳绩!!
  20. 1095 解码PAT准考证

热门文章

  1. 开源在线的MarkDown编辑器 --【Editor.md】
  2. python 自动填excel_Python读写Excel自动填表
  3. QT日志模块的个性化使用
  4. 对比学习视角重新审视推荐系统
  5. linux获取被人手机相册,原来很多软件会偷偷上传你手机相册里的照片,你的隐私早被泄露了!...
  6. TWaver可视化软件(八)工业可视化 下
  7. html+css+js 学生信息管理系统
  8. 华为路由器rip静态共存案例优先级
  9. Markdown 学习小记--基础技巧
  10. 【水文模型】02 水文水动力系统应用