Linux 中斷相關(guān)節(jié)點(diǎn)
/proc/interrupts
cat 這個(gè)節(jié)點(diǎn),會(huì)打印系統(tǒng)中所有的中斷信息,如果是多核CPU,每個(gè)核都會(huì)打印出來。
包括每個(gè)中斷的名字、中斷號(hào) IRQ number、每個(gè)中斷的觸發(fā)次數(shù)、在哪個(gè)CPU核處理的、是邊沿觸發(fā)還是電平觸發(fā),屬于哪個(gè)中斷控制器,都會(huì)打印出來。
/proc/irq/…
進(jìn)入這個(gè)目錄。會(huì)看到以中斷號(hào)命名的文件夾,每個(gè)中斷號(hào)文件夾下面都有幾個(gè)節(jié)點(diǎn),存儲(chǔ)了這個(gè)中斷的信息,比如smp_affinity、affinity_hint、spurious等。smp_affinity代表中斷號(hào)核CPU之間的親緣綁定關(guān)系,也就是如果某個(gè)中斷號(hào)綁定了一個(gè)CPU核,那么這個(gè)中斷就會(huì)一直在這個(gè)CPU上處理。
如何讓某個(gè)中斷在某個(gè)特定的 CPU 處理?
kernel 2.4 以后的版本才支持把不同的硬件中斷請(qǐng)求(IRQs)分配到特定的 CPU 上,這個(gè)綁定技術(shù)被稱為 SMP IRQ Affinity.更多介紹請(qǐng)參看 Linux 內(nèi)核源代碼自帶的文檔:linux-4.14/Documentation/IRQ-affinity.txt
/proc/irq/{IRQ}/smp_affinity
/proc/irq/{IRQ}/smp_affinity_list
/proc/irq/{IRQ}/smp_affinity 指定給定的 irq中斷號(hào)源允許哪些CPU執(zhí)行,它是一個(gè)掩碼位,比如是ff,代表11111111,表示這個(gè)中奪冠可以在 8 個(gè) CPU 執(zhí)行,具體在哪一個(gè) CPU執(zhí)行,靠分配器分配。
如果這個(gè) /proc/irq/{IRQ}/smp_affinity 指定為00000001,代表這個(gè)IRQ只能在最后一個(gè)CPU核進(jìn)行處理,其他CPU不允許處理,大家可以測(cè)試一下,主測(cè)試是 OK的(GIC支持,其他中斷控制器不一定)。
串口手動(dòng)賦值的重啟以后會(huì)消失,可以在代碼中調(diào)用 irq_set_affinity 函數(shù),指定中斷的掩碼,來達(dá)到某個(gè)中斷被固定CPU處理的需求。
中斷分發(fā)機(jī)制
對(duì)于 GIC-V2 而言,SPI 的分發(fā)是根據(jù) Distributor 中的 Interrupt Processor Targets Registers 來決定的。對(duì)于任何一個(gè) SPI,其都有在某個(gè) GICD_ITARGETSRn 寄存器中有 8 個(gè)bit標(biāo)識(shí)送達(dá)的processor,如果只有一個(gè) bit 被 set,那么就很簡(jiǎn)單了,如果該中斷是當(dāng)前優(yōu)先級(jí)最高的中斷,那么 Distributor 就會(huì)送到對(duì)應(yīng)的 CPU interface,該中斷最終會(huì)送達(dá)指定的 CPU。
如果該中斷對(duì)應(yīng)的 Interrupt Processor Targets Registers 中的那 8 個(gè) bit 有多個(gè) bit 被 set
的話,Distributor 如何處理呢?“依次輪著把產(chǎn)生的中斷給各個(gè)CPU,還是說看哪個(gè)CPU有空就給哪個(gè)CPU來著”,讓硬件處理這么復(fù)雜的邏輯有些不合適,實(shí)際上,GIC的硬件是不會(huì)進(jìn)行任何判斷的,也不會(huì)集成任何的算法,它就是根據(jù)Interrupt Processor Targets Registers的bit設(shè)定情況,忠實(shí)的把中斷送往指定的一個(gè)processor或者多個(gè)processors。
大家可以去看看 gic_set_affinity 這個(gè)函數(shù),這個(gè)函數(shù)確保一個(gè)中斷的 Interrupt Processor Targets
Registers 中的那8個(gè)bit只有一個(gè)bit被設(shè)定。
/kernel5.15/drivers/irqchip/irq-gic-v3.c
在 1244 和 1246 行,1246 行就是在 online 的 CPU 中選中一個(gè),1263 行寫入到寄存器中,GIC 會(huì)讀取這個(gè)寄存器,是哪個(gè) CPU,然后將中斷發(fā)給這個(gè)CPU。中間的函數(shù)很簡(jiǎn)單,大家可以自己看。
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1416瀏覽量
41462 -
cpu
+關(guān)注
關(guān)注
68文章
11083瀏覽量
217187 -
Linux
+關(guān)注
關(guān)注
87文章
11512瀏覽量
213909 -
子系統(tǒng)
+關(guān)注
關(guān)注
0文章
115瀏覽量
12851
發(fā)布評(píng)論請(qǐng)先 登錄
PCB布局的關(guān)鍵:開關(guān)節(jié)點(diǎn)走線尺寸滿足電流?(3)
去除DC-DC開關(guān)節(jié)點(diǎn)噪聲的緩沖電路如何設(shè)計(jì)?
電源技巧#7:通過更好的去耦減少開關(guān)節(jié)點(diǎn)振鈴
控制同步降壓轉(zhuǎn)換器中的開關(guān)節(jié)點(diǎn)振鈴
開關(guān)節(jié)點(diǎn)的振鈴
方波波形開關(guān)節(jié)點(diǎn)概述
無線傳感器網(wǎng)絡(luò)的普通節(jié)點(diǎn)和網(wǎng)關(guān)節(jié)點(diǎn)怎么實(shí)現(xiàn)?
STM32系統(tǒng)時(shí)鐘配置操作的一些關(guān)節(jié)點(diǎn)
Arm Linux中斷子系統(tǒng)先相關(guān)資料分享
方波波形開關(guān)節(jié)點(diǎn)為什么受歡迎
基于Cortex_M3的多功能樓宇控制系統(tǒng)網(wǎng)關(guān)節(jié)點(diǎn)設(shè)計(jì)

使用RC緩沖電路去除開關(guān)節(jié)點(diǎn)諧波噪聲

PCB布局的關(guān)鍵:盡量縮短開關(guān)節(jié)點(diǎn)走線長(zhǎng)度?

如何使用RC緩沖電路去除開關(guān)節(jié)點(diǎn)諧波噪聲

評(píng)論