本來是要查 irqbalance 是做什麼用的?? 下面是 RedHat 的官方文件.
This daemon is enabled by default and periodically forces interrupts to be handled by CPUs in an even, fair manner. However in realtime deployments, applications are typically dedicated and bound to specific CPUs, so the irqbalance daemon is not required.
irqbalance 這個服務預設是啟動的,他會定期強制中斷應用程式,讓每個應用程式能更公平的方式分享 CPU 的資源,但在 realtime 即時環境下,應用程序通常是專用的,並綁定到特定的 CPU,所以不需要 irqbalance 這個服務守護.
恩!! 在 Linux 下 CPU 是用哪一種排程?? 從大學摸過恐龍書(作業系統導論)後就沒有詳細探討過現在作業系統下的 CPU 排程.還好在 https://access.redhat.com/documentation/zh-TW/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/s-cpu-scheduler.html 都可以查到.
排程有兩類:
即時 real time 的執行緒會先被執行,而一般 Regular 的執行緒會在即時 real time 執行緒後才排進去執行,至於哪些是即時的哪些是一般的執行緒這是由系統決定,我們可以透過 ps -la 來檢視
root@ubuntu:/proc# ps -la F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 3112 3075 0 80 0 - 17810 poll_s pts/13 00:00:00 sudo 4 S 0 3114 3112 0 80 0 - 17705 wait pts/13 00:00:00 su 4 S 0 3115 3114 0 80 0 - 6797 wait pts/13 00:00:01 bash
即時 real time 政策
- SCHED_FIFO
這政策也稱為「靜態優先順序排程」(static priority scheduling),因為此政策為每個執行緒定義了固定的優先順序(介於 1 到 99)。這個排程器會以優先順序掃描 SCHED_FIFO 執行緒清單,並排程擁有最高執行順序的執行續以執行之。這個執行緒會一直執行,直到被阻絕、退出、或被擁有更高優先順序的執行緒所取代為止。即使是最低權限的即時執行緒,也比非即時的執行緒擁有更高的權限;如果只有一個即時執行緒,那麼 SCHED_FIFO 的優先值就無關緊要。(轉貼 https://access.redhat.com/documentation/zh-TW/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/s-cpu-scheduler.html) - SCHED_RR
這是源自 SCHED_FIFO 政策的一種輪詢(round-robin)政策。SCHED_RR 執行緒也會被賦予固定的權限值,介於 1 到 99。然而,擁有同樣權限值的執行續會以一固定時間量,又稱「時間配量」(time slice)。(轉貼 https://access.redhat.com/documentation/zh-TW/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/s-cpu-scheduler.html)
一般 Regular 政策
- SCHED_OTHER
預設的排程政策。此政策使用了 CFS(完全公平排程器,Completely Fair Scheduler)好為使用此政策的所有執行續提供完全公平的存取時間。CFS 會建立動態的優先順序清單,部分根據每個執行續的 niceness 值。這能給使用者一些非直接的控制等級,以控制程序的優先順序;但動態優先順序清單可以由 CFS 直接改變。(轉貼 https://access.redhat.com/documentation/zh-TW/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/s-cpu-scheduler.html) - SCHED_BATCH
- SCHED_IDLE
優先執行序 (priority, PRI) 是由核心動態調整的,我們無法直接調整 PRI ,我們最多能透過 nice 與 renice 改變其優先執行序 PRI(new) = PRI(old) + nice (PRI 越小優先順序越高)
Nice 的使用時機為一開始執行程式,如果是要調整某個已經存在的的執行程式則需要用 renice 指令, nice / renice 使用請參考 https://benjr.tw/10985
現在回到 irqbalance ,如果我需要即時 real time 的系統建議是關閉它.
立即關閉 irqbalance 服務
# service irqbalance status irqbalance (pid PID) is running...
如果 irqbalance 是在執行階段可以透過指令立即關閉它
# /etc/init.d/irqbalance stop Stopping irqbalance: [ OK ]
開機後關閉 irqbalance 服務
# chkconfig irqbalance off
systemd 的方式請參考 https://benjr.tw/94315
關閉部份的 irqbalance 服務
設定檔位於 /etc/default/irqbalance ,我也沒有設定過就先不討論了.
root@ubuntu:/proc# cat /etc/default/irqbalance #Configuration for the irqbalance daemon #Should irqbalance be enabled? ENABLED="1" #Balance the IRQs only once? ONESHOT="0"
透過 CPU Affinity 手動設定 irq 對應,請參考 https://benjr.tw/99353
2 thoughts on “Linux daemon – irqbalance”