Linux效能優化 中斷繫結

2021-09-05 19:38:40 字數 2724 閱讀 8724

對於實時環境,我們需要消除或者最小化事件響應的延遲。要想做到這一點,需要將不同的中斷響應(irqs)和使用者程序繫結到不同的cpu核心上,使他們彼此隔離。

為什麼需要這樣呢?

預設情況下,linux的中斷響應會被平均分配到所有cpu核心上,這樣勢必會發生寫新的資料和指令快取,而且還會與cpu核心上原來存在的程序產生衝突。這就會延遲中斷響應,影響程式的處理時間。為了解決這個問題,可以將中斷(或程序)繫結到指定的cpu核心上,這樣該中斷(或程序)所需要的**和資料結構就有更高的可能性位於本地cpu的資料和指令快取內,而不必進行新的寫快取,從而提高中斷響應(或程序)的處理速度。此外,將某乙個程序及其相關的中斷繫結在同乙個cpu核心上,使它們共享快取線路,可以提高程式效能。還有,將彼此不相關的中斷與程序繫結到不同的cpu核心上,可以避免衝突,也可以提高程式效能。

以上提到的方法對於延遲敏感的中斷(或程序)是很有用的,同時這些方法對於處理速度受限於記憶體和匯流排頻寬的情況也是很重要的。

接下來介紹如何實現中斷繫結。

中斷平衡守護程序(irqbalance daemon)會周期性地將中斷平均地公平地分配給各個cpu核心,它預設是開啟的。為了實現中斷繫結,首先需要將這個守護程序關閉。

利用systemctl status irqbalance檢視守護程序的執行狀態

[root@node9 ~]# systemctl status irqbalance

irqbalance.service - irqbalance daemon

loaded: loaded (/usr/lib/systemd/system/irqbalance.service; disabled; vendor preset: enabled)

active: inactive (dead)

利用systemctl stop irqbalance 可以關閉該程序。這樣中斷響應預設都會由cpu0核心處理。

利用systemctl disable irqbalance 可以取消程序,使其開機不會重啟。

其實,關閉該程序實在太強硬了,畢竟中斷平衡功能還是有用的。那麼有沒有其它方法,在不關閉守護程序的情況下,還能讓某些cpu核心脫離守護程序的管理,看下乙個方法。

我們可以通過修改/etc/sysconfig/irqbalance配置檔案,將指定的cpu核心從中斷平衡守護程序的列表中脫離出來,即守護程序不會再將中斷分配給這些cpu核心。

開啟/etc/sysconfig/irqbalance檔案,找到「#irqbalance_banned_cpus=」位置,將注釋取消,然後在等號後面填寫cpu十六進製制掩碼,比如

irqbalance_banned_cpus=0000ff00
可以將8~15這8個cpu核心從守護程序中脫離出來。

這裡的掩碼最多可以有64位,如果系統具有的核心數超過32個,則可以在等號後面新增兩個32位掩碼,並用逗號隔開,例如

irqbalance_banned_cpus=00000001,0000ff00
就是將8~15和33這9個核心隔離了。

關於掩碼:乙個32位的位掩碼(bitmask)形如00000000000000000000000000000011,表示為十進位制掩碼(decimal)為3,表示為十六進製制掩碼(hexadecimal)為0x00000003。

設定中斷的cpu親和性(affinity),就是讓該中斷只在指定cpu核心上進行響應,即中斷繫結。

首先我們通過/proc/interrupts檔案檢視一下各種中斷的響應情況

[root@node9 ~]# cat /proc/interrupts

cpu0 cpu1 cpu2 cpu3

0: 63 0 0 0 ir-io-apic-edge timer

8: 1 0 0 0 ir-io-apic-edge rtc0

9: 0 0 0 0 ir-io-apic-fasteoi acpi

******

第一列顯示的中斷id號,cpun列顯示的是該中斷在第n個cpu核心上的響應次數,倒數第二列是中斷型別,最後一列是描述。

1)利用echo命令將cpu掩碼寫入/proc/irq /中斷id/smp_affinity檔案中,即可實現修改某一中斷的cpu親和性。例如

echo 0x0004 > /proc/irq /170/smp_affinity
就可以將170中斷的響應繫結到cpu3核心上。當該中斷下一次發生時,再檢視/proc/interrupts裡面的響應數量,會發現cpu3核心的響應次數增加了,而其它核心的響應次數沒有改變。

2)還有一種方法,通過tuna也可以實現中斷繫結功能。詳見linux工具使用——使用tuna進行效能調優

最後總結一下,為了滿足實時處理的要求,我們需要將中斷繫結到指定的cpu核心上,實現中斷繫結主要有兩方面操作:1)關閉中斷平衡守護程序或者隔離cpu核心;2)手動設定中斷的cpu親和性。另外值得一提的是,這裡只是介紹了中斷繫結的方法,至於該繫結哪些中斷以及繫結到哪幾個核心上,需要針對應用程式的具體情況進行分析。在實際應用中,想要實現效能最優,需要進行各種嘗試,然後才能得到最好的配置方式。

Linux效能調優 網絡卡中斷與CPU的繫結問題

網絡卡與作業系統的互動一般有兩種方式 當出現cpu占用不均的時候,就需要考慮網絡卡多佇列是否尚未與cpu繫結引起的?mpstat p all 1 18 20 33 cpu user nice sys iowait irq soft steal idle intr s 18 20 33 all 0,2...

linux效能優化

調優必須有效能指標,一開始調優必須確定指標 確定基線 確定目標。如果可能的話分離問題,刪除任何執行於被調查系統的多餘的程式或應用!工具 gnome system monitor 圖形介面,可以說是top的圖形化 執行 gnome system monitor 多處理器統計 mpstat,最大的優點是...

Linux效能優化

這裡一定會想到 高併發 和 響應快 這裡詞正對應的就是 吞吐 和 延時 我們知道隨著應用負載的體系,系統資源的使用就會提高,甚至達到極限。而效能問題的本質,就是系統資源已經達到瓶頸,但請求處理還是不夠快,無法支撐更多的請求。linux效能工具圖譜 這個圖是個重要的參考資料,會告訴我們,在linux不...