Linux性能優化(十六)——中斷綁定

一、中斷綁定簡介

1、中斷簡介

計算機中,中斷是一種電信號,由硬件產生並直接送到中斷控制器上,再由中斷控制器向CPU發送中斷信號,CPU檢測到信號後,中斷當前工作轉而處理中斷信號。CPU會通知操作系統已經產生中斷,操作系統就會對中斷進行處理。常見的中斷控制器有兩種:可編程中斷控制器8259A和高級可編程中斷控制器(APIC)。8259A只適合單 CPU的情況,多CPU多核的SMP體系下,爲了充分利用SMP體系結構,把中斷傳遞給系統上的每個CPU以便更好實現並行和提高性能,Intel引入了高級可編程中斷控制器(APIC)。
中斷是一種硬件主動發起的和CPU進行通信的方式,輪詢(polling)是CPU定時對硬件狀態進行查詢然後做相應處理。
每個硬件設備(如硬盤、網卡等)都需要和CPU進行通信,以便CPU處理硬件請求,硬件設備主動打擾CPU的現象稱爲硬件中斷。
操作系統中,每個硬件設備都會被分配一個IRQ號,通過唯一的IRQ號可以區分不同硬件的中斷。


2、中斷綁定簡介

中斷綁定即設置中斷的CPU Affinity,讓中斷只在指定CPU核心上進行響應。
硬件中斷髮生頻繁,會非常消耗CPU資源。在多核CPU條件下,如果把大量硬件中斷分配給不同的CPU核心處理可以很好的平衡性能。通常服務器上會有多個CPU多核、多塊網卡、多塊硬盤,如果能讓網卡中斷獨佔1個CPU核心、磁盤IO中斷獨佔1個CPU核心,將會大大減輕單一CPU負載、提高整體處理效率。
默認情況下,Linux中斷響應會被平均分配到所有CPU核心上,勢必會發生寫新的數據和指令緩存,並與CPU核心上原有進程產生衝突,造成中斷響應延遲,影響進程處理時間。爲了解決這個問題,可以將中斷(或進程)綁定到指定CPU核心上,中斷(或進程)所需要指令代碼和數據有更大概率位於指定CPU本地數據和指令緩存內,而不必進行新的寫緩存,從而提高中斷響應(或進程)的處理速度。將某一個進程及其相關中斷綁定在同一個CPU核心上,使其共享緩存,提高程序性能;將彼此不相關的中斷與進程綁定到不同的CPU核心上,可以避免衝突,提高程序性能。
Linux Kernel 2.4開始支持把不同的硬件中斷請求(IRQ)分配到特定的CPU上,綁定技術被稱爲SMP IRQ Affinity。


3、中斷綁定應用

對於文件服務器、Web服務器,把不同的網卡IRQ均衡綁定到不同的CPU上將會減輕某CP的負載,提高多個CPU整體處理中斷的能力;對於數據庫服務器,把磁盤控制器綁到一個CPU、把網卡綁定到另一個CPU將會提高數據庫的響應時間、優化性能。
合理的根據自己的生產環境和應用的特點來平衡IRQ中斷有助於提高系統的整體吞吐能力和性能。

二、中斷綁定流程

1、關閉中斷平衡守護進程

中斷平衡守護進程(irqbalance daemon)會週期性地將中斷平均地公平地分配給各個CPU核心,默認開啓。爲了實現中斷綁定,首先需要將中斷平衡守護進程關閉。
systemctl status irqbalance
查看守護進程的運行狀態
systemctl stop irqbalance
關閉中斷平衡守護進程,中斷響應默認都會由CPU0核心處理。
systemctl disable irqbalance
取消中斷平衡守護進程開機重啓
關閉中斷平衡守護進程過於強硬,可以在不關閉中斷平衡守護進程條件下,讓某些CPU核心脫離中斷平衡守護進程的管理。






2、脫離中斷平衡守護進程

可以通過修改/etc/sysconfig/irqbalance配置文件,將指定CPU核心從中斷平衡守護進程的列表中脫離出來,即中斷平衡守護進程不會再將中斷分配給相應CPU核心。
將IRQBALANCE_BANNED_CPUS指定禁止中斷平衡守護進程管理的CPU十六進制掩碼,如將8~15編號CPU核心從中斷平衡守護進程中脫離,設置如下:
IRQBALANCE_BANNED_CPUS=0000ff00
CPU掩碼最多可以有64位,如果計算機核心數超過32個,可以使用兩個32位掩碼,並用逗號隔開。
IRQBALANCE_BANNED_CPUS=00000001,0000ff00



3、綁定指定中斷到CPU

中斷綁定時,需要關閉系統中斷平衡守護進程
systemctl stop irqbalance
計算機當前各種中斷響應情況在/proc/interrupts文件中。
Linux性能優化(十六)——中斷綁定
第一列是中斷ID號,CPU N列是中斷在第n個CPU核心上的響應次數,倒數第二列是中斷類型,最後一列是描述。
利用echo命令將CPU掩碼寫入/proc/irq /中斷ID/smp_affinity文件中,即可實現修改某一中斷的CPU親和性。例如
echo 0x0004 > /proc/irq /50/smp_affinity
將網卡的中斷響應綁定到CPU3核心上。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章