Linux 中断

232 阅读4分钟

中断

中断的作用

外部设备完成某些工作后用以通知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上触发(通常情况下)。