Linux kernel 禁用超线程处理器上的中断

Linux kernel 禁用超线程处理器上的中断,linux-kernel,x86,interrupt,hyperthreading,isr,Linux Kernel,X86,Interrupt,Hyperthreading,Isr,假设我有一个超线程处理器,操作系统将它们视为两个不同的虚拟处理器vp1和vp2。现在在vp1上的LWP1中,我禁用硬件中断。这不等于说,除非启用,否则两个虚拟处理器都不会得到任何中断吗?如果这是真的,那么也应该意味着在另一个处理器vp2上启用另一个LWP2返回的中断也将在vp1上启用中断?我假设禁用内核中断只会在本地处理器上禁用它 请解释这是如何工作的。超线程处理器的两个逻辑核心都有自己的APIC ID,因此就中断而言,它们是独立的CPU。(在Knight's Landing/Xeon Phi中

假设我有一个超线程处理器,操作系统将它们视为两个不同的虚拟处理器vp1和vp2。现在在vp1上的LWP1中,我禁用硬件中断。这不等于说,除非启用,否则两个虚拟处理器都不会得到任何中断吗?如果这是真的,那么也应该意味着在另一个处理器vp2上启用另一个LWP2返回的中断也将在vp1上启用中断?我假设禁用内核中断只会在本地处理器上禁用它


请解释这是如何工作的。

超线程处理器的两个逻辑核心都有自己的APIC ID,因此就中断而言,它们是独立的CPU。(在Knight's Landing/Xeon Phi中,四个逻辑核)

这使得在内核模式下使用
cli
/
sti
可以独立于任何其他逻辑核禁用中断。一切都与非SMT多核系统上的完全相同,因为超线程就是这样设计的


其他任何事情都会带来不便和怪异,有时会禁用其他逻辑内核等待的中断,从而增加其他逻辑内核的延迟,因此很明显,这是英特尔设计它的明智方法。

处理器(内核)只有一个(在某些体系结构上有两个)插脚用于中断信号。(好的,NMI是一个单独的案例)。你说的是例外吗?或者特定的意思是什么?什么是LWP?无论如何,可以在
eflags
级别、LAPIC级别、中断控制器级别(IOAPIC或PIC)和设备级别禁用中断。前两个是为每个核心复制的资源,因此这些级别是针对每个核心的。中断控制器可以服务于整个逻辑处理器组或逻辑处理器的子集,因此禁用其中的中断可能会影响多个内核(通常所有内核都用于桌面/移动配置)。在设备级别,任何代理都禁用中断,因为这会“删除”源。解释x86中断子系统过于宽泛,无法给出答案。编辑了我的问题-为了更好地理解,但我不是指例外,我指的是来自以太网卡等硬件设备的中断。LWP是轻量级进程,是操作系统上的一个调度实体,位于内核内。修改:在我之前的评论中,我提到的是“内核”,我指的是“线程”(即逻辑处理器)。@0andriy:好的,这对于没有HT的心智模型来说是有意义的。但是Intel的超线程技术让物理核上的每个逻辑核都有自己的逻辑“连线”。我猜物理/电气上可能有两条实际线路,每条线路由一个逻辑核的
IF
选通。
cli
sti
是串行的,IIRC,因此CPU在无序执行期间不需要跟踪IF状态。但更可能的是,中断号直接发送到逻辑核instead)引发一个中断,然后让它从某处请求中断号,以便对IDT进行索引。