[筆記]Linux內核學習之旅--軟中斷(SIrq)與SMP IRQ Affinity


中斷過程簡單來說就是一種CPU 與硬件溝通的方式

中斷分為兩個過程,中間以中斷控制器作為分隔。上半部分即中斷上半部,下半部分為中斷下半部。

上半部分大部分為說說的硬件中斷,下半部分為軟中斷。

硬件中斷通常由真實物理設備產生的脈沖信號作為信號源,也就是說這里的物理設備與中斷控制器溝通方式是通過物理電信號來做的。

軟件中斷由中斷控制器負責統一調度,通常硬件設備產生信號,這個信號帶有中斷號發送給中斷控制器,中斷控制器輪訓收到的信號來調用對應的中斷處理程序。

直觀一點來看:

通過

shell> cat /proc/interrupts 

可以查看到當前系統的軟中斷列表和對應的中斷號

從左到右依次表示:

中斷號,對應CPU中斷次數,設備類型和設備名

[root@localhost ~]# cat /proc/interrupts 
           CPU0       CPU1       
  0:      14678          0   IO-APIC-edge      timer
  1:          2          0   IO-APIC-edge      i8042
  4:          2          0   IO-APIC-edge    
  7:          0          0   IO-APIC-edge      parport0
  8:          1          0   IO-APIC-edge      rtc0
  9:          0          0   IO-APIC-fasteoi   acpi
 12:          4          0   IO-APIC-edge      i8042
 14:   45394223          0   IO-APIC-edge      ata_piix
 15:          0          0   IO-APIC-edge      ata_piix
 16:         56   16232636   IO-APIC-fasteoi   i915, p2p1
 18:    5333843   11365439   IO-APIC-fasteoi   uhci_hcd:usb4
 20:    2277759          0   IO-APIC-fasteoi   ata_piix
 21:          3          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb2
 22:          0          0   IO-APIC-fasteoi   uhci_hcd:usb3
 23:       3813       6412   IO-APIC-fasteoi   uhci_hcd:usb5, Intel ICH7
NMI:       1037        925   Non-maskable interrupts
LOC:  319530452  247726622   Local timer interrupts
SPU:          0          0   Spurious interrupts
PMI:       1037        925   Performance monitoring interrupts
PND:          0          0   Performance pending work
RES:     275434     264341   Rescheduling interrupts
CAL:    4975165    5543634   Function call interrupts
TLB:     452039     409944   TLB shootdowns
TRM:          0          0   Thermal event interrupts
THR:          0          0   Threshold APIC interrupts
MCE:          0          0   Machine check exceptions
MCP:      14411      14411   Machine check polls
ERR:          0
MIS:          0

APIC表示高級可編程中斷控制器(Advanced Programmable Interrupt Controlle

APIC是SMP體系的核心,通過APIC可以將中斷分發到不同的CPU 來處理

比如我這里的0號中斷都是由CPU 來處理的,一些其他的中斷可以綁定CPU或者可以把中斷處理平攤到CPU 上,這個過程叫做 SMP IRQ Affinity

14號中斷是屬於硬盤設備中斷,可以看到中斷處理全部由單個CPU完成,這是因為為了使CPU 緩存的命中率提高等因素,使得CPU和硬盤中斷綁定(IRQBalance)

如果的多網卡多CPU的情況下,也可以考慮將指定的網卡軟中斷綁定到對應的CPU 上,這樣可以將負載有效的平衡,且能最大限度的利用CPU 緩存。

這樣做的前提是先關閉IRQBalance

/etc/init.d/irqbalance stop

然后可以查看到

cat /proc/irq/14/smp_affinity

對應的軟中斷的多核CPU親和性設置

我這里顯示的是3,是什么意思呢

對應的CPU情況是這樣的

CPU0 ----------  00000001     1

CPU1 ----------  00000010     2

CPU2 ----------  00000100     4

.

.

.

CPUN ----------  XXXXXXX     2^N

3 就表示1+2,也就是兩個CPU 都均衡,因為開啟了IRQ Balance,所以這里中斷處理都會交給同一個CPU來保證效率

這里的設置都需要硬件的支持,如果開啟關閉IRQBalance自己設置中斷處理的CPU親和,有的設備在負載壓力大的時候也是會轉到其他CPU處理的,這里的親和並不是強制性的CPU設置。

親和性設置建議:DB可以設置一部分CPU處理硬盤IO,一部分CPU處理網絡IO,多網卡服務器可以設置對應CPU對應網卡。當然具體情況看生產情況而定


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM