中斷過程簡單來說就是一種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對應網卡。當然具體情況看生產情況而定