- 主题:多核(SMP)CPU是怎么响应外部中断的?
搜一下interrupt affinity
【 在 wjhtingerx 的大作中提到: 】
: 是每个核都会响应,还是只是某个核响应?
--
FROM 120.244.236.*
这个比较直观了。
cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
0: 51 0 0 0 0 0 0 0 IO-APIC 2-edge timer
1: 3 0 0 0 0 0 0 0 IO-APIC 1-edge i8042
4: 4 0 0 0 0 0 0 0 IO-APIC 4-edge
8: 1 0 0 0 0 0 0 0 IO-APIC 8-edge rtc0
9: 0 0 0 0 0 0 0 0 IO-APIC 9-fasteoi acpi
12: 4 0 0 0 0 0 0 0 IO-APIC 12-edge i8042
17: 0 0 0 0 0 0 0 0 IO-APIC 17-fasteoi uhci_hcd:usb3
18: 0 0 0 0 0 0 0 0 IO-APIC 18-fasteoi uhci_hcd:usb4
19: 26 0 0 0 0 0 0 0 IO-APIC 19-fasteoi ehci_hcd:usb1
20: 0 0 0 0 0 0 0 0 IO-APIC 20-fasteoi uhci_hcd:usb6
21: 58 0 0 1 0 0 0 0 IO-APIC 21-fasteoi ehci_hcd:usb2, uhci_hcd:usb5
23: 118 3390 106574 32306 393079 61079 404920 1075930 IO-APIC 23-fasteoi ata_piix
25: 0 0 0 0 0 0 0 0 PCI-MSI 16384-edge PCIe PME
26: 0 0 0 0 0 0 0 0 PCI-MSI 49152-edge PCIe PME
27: 0 0 0 0 0 0 0 0 PCI-MSI 65536-edge PCIe PME
28: 0 0 0 0 0 0 0 0 PCI-MSI 81920-edge PCIe PME
29: 0 0 0 0 0 0 0 0 PCI-MSI 98304-edge PCIe PME
30: 0 0 0 0 0 0 0 0 PCI-MSI 114688-edge PCIe PME
31: 0 0 0 0 0 0 0 0 PCI-MSI 147456-edge PCIe PME
36: 8369 8601 13109485 19300357 15191540 15538813 17369406 5137741 IO-APIC 1-fasteoi megasas
37: 105 4800861 2090935 3269206 4601276 2527295 5406858 7555165 PCI-MSI 524288-edge eno1-0
38: 49 12950579 6615016 5372066 8699396 6089635 10273653 13908456 PCI-MSI 524289-edge eno1-1
39: 56 13231374 4974235 3339807 8443707 17442776 8409208 8976991 PCI-MSI 524290-edge eno1-2
40: 45 43733125 14355801 3782888 10282680 9393627 10209005 14146130 PCI-MSI 524291-edge eno1-3
41: 62 5024038 7309938 7164860 6645789 3689618 6617002 17292605 PCI-MSI 524292-edge eno1-4
42: 48 1461471 7483791 7815253 8681481 4897194 6816497 28040413 PCI-MSI 524293-edge eno1-5
43: 45 2538577 5532474 4679636 8493743 9270833 6038913 16530422 PCI-MSI 524294-edge eno1-6
44: 39 1844897 9658441 5821616 8018901 7276448 8478717 16344481 PCI-MSI 524295-edge eno1-7
NMI: 148770 225877 131556 185728 128639 173807 129964 168111 Non-maskable interrupts
LOC: 713796438 496520077 759025669 496332904 761073676 498308596 896203930 521172564 Local timer interrupts
SPU: 0 0 0 0 0 0 0 0 Spurious interrupts
PMI: 148770 225877 131556 185728 128639 173807 129964 168111 Performance monitoring interrupts
IWI: 4 95 81 13 37 11 143 258 IRQ work interrupts
RTR: 6 0 0 0 0 0 0 0 APIC ICR read retries
RES: 69907540 53307392 27171625 34684872 21024196 24805447 19523035 19569012 Rescheduling interrupts
CAL: 11231979 9230941 10596720 9118333 10894560 9036513 11094898 9747047 Function call interrupts
TLB: 49564728 54082246 45718154 49662527 44111967 47761922 43383300 46568193 TLB shootdowns
TRM: 0 0 0 0 0 0 0 0 Thermal event interrupts
THR: 0 0 0 0 0 0 0 0 Threshold APIC interrupts
DFR: 0 0 0 0 0 0 0 0 Deferred Error APIC interrupts
MCE: 0 0 0 0 0 0 0 0 Machine check exceptions
MCP: 7092 7092 7092 7092 7092 7092 7092 7092 Machine check polls
【 在 wjhtingerx 的大作中提到: 】
: 是每个核都会响应,还是只是某个核响应?
--
FROM 219.143.244.*
翻书看了一下,这里好像有答案
【 在 wjhtingerx 的大作中提到: 】
: 就是说是随机的?一个核抢到后,其他核就不会产生中断了?
: --
发自「今日水木 on BLA-AL00」
--
FROM 219.143.244.*
看架构代码里面中断控制器IP如何操作的,一般可以绑定到固定核或者动态分配到空闲核。
【 在 occupiersx 的大作中提到: 】
: 翻书看了一下,这里好像有答案
: 发自「今日水木 on BLA-AL00」
--
FROM 183.206.160.*
中断处理是软硬件复合行为
中断不是cpu核心产生的,来自主板上的各种外设,核心不会产生中断;
至于中断处理程序,是内核来设定的,你无法自己注册
【 在 wjhtingerx 的大作中提到: 】
: 不是,你没明白我的意思,我说的硬件是指硬件行为,不是硬中断、软中断那个处理过程。
: 我的疑问是,多核的每个核是不是都会产生同一个外部中断?如果不是,怎么确定是哪个核产生?如果只在一个核上产生,那注册中断回调的时候,岂不是每个核上都要注册?
:
--
FROM 125.33.247.*
看中断控制器的配置。比如arm的gic可以配置中断亲和性。
--
FROM 36.45.230.*
请教书名?
谢谢
【 在 stub 的大作中提到: 】
: 如图
: 发自「今日水木 on Redmi Note 8 Pro」
--
FROM 13.114.100.*
【 在 wolfking 的大作中提到: 】
: 请教书名?
: 谢谢
:
深入理解Linux内核
--
FROM 117.136.47.*
多谢!
【 在 stub 的大作中提到: 】
: 深入理解Linux内核
--
FROM 36.148.224.*