- 主题:多核(SMP)CPU是怎么响应外部中断的?
抢锁,谁抢到谁响应处理
【 在 wjhtingerx 的大作中提到: 】
: 是每个核都会响应,还是只是某个核响应?
: --
:
发自「今日水木 on BLA-AL00」
--
FROM 219.143.244.*
是的,自旋锁,抢锁成功后复位中断,设置对应的业务标志位,抢锁不成功的退出。有专门的中断进程根据业务标志位延后处理。
【 在 wjhtingerx 的大作中提到: 】
:
: 就是说是随机的?一个核抢到后,其他核就不会产生中断了?
: --
:
发自「今日水木 on BLA-AL00」
--
FROM 219.143.244.*
LINUX有个逻辑,延后处理,叫TASKLIST
【 在 wjhtingerx 的大作中提到: 】
:
: 你这个说的硬件逻辑,还是软件逻辑?
: --
:
发自「今日水木 on BLA-AL00」
--
FROM 219.143.244.*
硬件中断是外部带进来的,LINUX不是实时系统,不保证实时性,处理外部硬件中断时,抢锁,复位外部中断标志位后,再设置一个业务标志位,有别的内核进程根据业务标志位延后处理业务。操作系统内核有很多巧妙的设计,挺有意思的
【 在 wjhtingerx 的大作中提到: 】
:
: 那你的意思是,硬件上所有的核都会产生这个中断?
: --
:
发自「今日水木 on BLA-AL00」
--
FROM 219.143.244.*
硬件中断,软件中断有别的逻辑
【 在 wjhtingerx 的大作中提到: 】
: 你这个说的硬件逻辑,还是软件逻辑?
: --
发自「今日水木 on BLA-AL00」
--
FROM 219.143.244.*
https://zhuanlan.zhihu.com/p/393195942网上搜了一下,是这个是吗
【 在 wjhtingerx 的大作中提到: 】
:
: 不是,你没明白我的意思,我说的硬件是指硬件行为,不是硬中断、软中断那个处理过程。
: 我的疑问是,多核的每个核是不是都会产生同一个外部中断?如果不是,怎么确定是哪个核产生?如果只在一个核上产生,那注册中断回调的时候,岂不是每个核上都要注册?
: --
:
发自「今日水木 on BLA-AL00」
--
FROM 219.143.244.*
zan
【 在 stub 的大作中提到: 】
: 如图
: 发自「今日水木 on Redmi Note 8 Pro」
--
FROM 1.202.112.*
这个比较直观了。
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.*
![单击此查看原图](//static.mysmth.net/nForum/att/KernelTech/76634/396/middle)