Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 硬中断与软中断_Linux_Networking_Linux Kernel - Fatal编程技术网

Linux 硬中断与软中断

Linux 硬中断与软中断,linux,networking,linux-kernel,Linux,Networking,Linux Kernel,在linux中,当网卡接收到一个数据包时,会触发一个硬中断,然后在中断回调功能中,它会引发一个net_RX_SOFTIRQ,这个SOFTIRQ会与硬irq在同一个cpu上运行吗?中断请求(irq)是在硬件级别发送的服务请求。中断可以通过专用硬件线路发送,也可以通过硬件总线作为信息包(消息信号中断或MSI)发送。 当中断被启用时,收到IRQ会提示切换到中断上下文。内核中断调度代码检索IRQ号及其相关的已注册中断服务例程(ISR)列表,并依次调用每个ISR。ISR确认中断并忽略来自同一IRQ的冗余中

在linux中,当网卡接收到一个数据包时,会触发一个硬中断,然后在中断回调功能中,它会引发一个net_RX_SOFTIRQ,这个SOFTIRQ会与硬irq在同一个cpu上运行吗?

中断请求(irq)是在硬件级别发送的服务请求。中断可以通过专用硬件线路发送,也可以通过硬件总线作为信息包(消息信号中断或MSI)发送。 当中断被启用时,收到IRQ会提示切换到中断上下文。内核中断调度代码检索IRQ号及其相关的已注册中断服务例程(ISR)列表,并依次调用每个ISR。ISR确认中断并忽略来自同一IRQ的冗余中断,然后将延迟处理程序排队以完成中断处理,并阻止ISR忽略未来的中断

IRQ有一个关联的“affinity”属性smp_affinity,它定义了允许为该IRQ执行ISR的CPU内核。此属性可用于通过将中断关联和应用程序的线程关联分配给一个或多个特定CPU核来提高应用程序性能。这允许在指定的中断线程和应用程序线程之间共享缓存线

# cat /proc/irq/32/smp_affinity 
  f
smp_关联的默认值为f,这意味着IRQ可以在系统中的任何CPU上提供服务。将该值设置为1,如下所示,意味着只有CPU 0可以为该中断提供服务:

# echo 1 >/proc/irq/32/smp_affinity
# cat /proc/irq/32/smp_affinity
  1
在支持中断控制的系统上,修改IRQ的smp_亲缘关系将设置硬件,以便在硬件级别决定使用特定CPU为中断提供服务,而无需内核干预


Redhat的文档中提供了更详细的信息-

通常在硬件中断退出时,它运行在同一个内核上。