中断
中断的作用
外部设备完成某些工作后用以通知CPU。
中断的分类
- 硬中断
- 软中断
中断占据的计算机资源有哪些
中断主要会占据cpu资源。 Linux 执行top 命令,hi si 字段可以查看 硬中断 与 软中断 对于 cpu的占有率。
中断向量表
中断向量表的定义
存在于内核之中的表,存储着 中断号 与 中断处理程序之间的关系。
硬中断
硬中断的定义
硬件触发的中断 被称为是硬中断。 还可以这样认为,硬中断触发后 中断处理的上半部分。
硬中断的类型有哪些
- timer:时钟中断
- RES:重新调度中断 ......
如何查看网络相关的硬中断是什么
有的网卡会开启多队列,每个队列会对应一个硬中断号,硬中断号获取方式。 cat /proc/interrupts | egrep 'CPU|virtio.*(input|output)'
硬中断的触发方式
- 1: 网卡接收到数据包会触发硬中断。
- 2: 键盘输入 ......
硬中断的处理 (中断处理)
硬件 触发 硬中断 通知cpu, cpu打断当前正在执行的程序,处理硬中断(中断处理的上半部分),软中断(中断处理的下半部分)会异步执行,一般来说,硬中断在哪个cpu上触发,软中断也会在哪个cpu上触发,如果内核启用RPS机制,那么软中断处于的cpu可能和硬中断所处的cpu不同。
中断(硬中断)亲和性
什么是中断亲和性
多核cpu架构下,硬中断具体在哪个cpu上面触发。自己觉得可以理解为,cpu对于硬中断的亲和性。cpu对于硬中断的亲和性高,那么硬中断就有更多的概率在这个cpu上执行。
中断亲和性修改
Linux文件 /proc/irq/中断号/smp_affinity 之中的取值,表示了中断号与哪些cpu有亲和性。 取值是16进制的数,每一位的取值为1,则表示具体与哪一个cpu存在亲和性。
硬中断监控
查看各种硬中断在 cpu上的分布情况
原因:如果硬中断分布不均匀,会导致软中断分布不均匀,会影响硬件发挥的效率的。 cat /proc/interrupts 查看硬中断的数目,以及在各个cpu上的分布情况。
软中断
软中断的定义
触发硬中断的时候,对于硬中断的处理分为两部分, 一部分是硬中断处理程序 一部分是软中断处理程序 软中断就是硬中断触发之后,中断处理的下半部分。
软中断 与 软件中断
软中断:中断处理下半部机制。 软件中断:从软件中断指令而来。在32位x86中,为了实现linux用户态到内核态的切换,linux使用软件中断指令“int 0x80”来触发异常,切换CPU特权级,实现系统调用。 两者完全是两码事。
Linux 上如何查看 网络相关的软中断在 cpu上的分布
cat /proc/softirqs | grep NET 获取的是 网络的收发软中断在各个cpu上的计数。
软中断的触发 与 处理
触发
- 1:硬中断触发软中断
- 2:软件中断模拟硬中断,最终触发软中断。
处理 软中断的处理程序 为 软中断处理程序。最终cpu会执行软中断处理程序。
软中断的监控
查看软中断在cpu上的分布
cat /proc/softirqs
问题
1: 对于网卡来说 硬中断的次数 就代表收包的次数嘛
不是。 原因: 1:网卡可以设置中断合并,多个网络帧可以只发起一次中断。 2:NAPI 运行的时候会关闭硬中断,通过poll来收包
2:为什么中断处理分为上下两部分
硬中断会打断cpu, 如果处理时间过长,会影响其他进程的正常执行, 所以中断处理会分为上下两部分,将耗时长的部分切分到一边,异步调度执行。
3:硬中断 软中断 cpu 之间的关系
在多核cpu下,某个cpu上触发硬中断,那么软中断会在这个cpu上触发(通常情况下)。