Cpu-Usage
如何在啟動時為所有 Linux 程序綁定靜態關聯?
我在伺服器上有一個單執行緒程序,我想靜態綁定到一個 CPU 核心並始終為其提供所有可用的計算能力(它是受資源不足嚴重影響的實時程序)。不幸的是,機器嚴重超載,因此 CPU 平均佔用 60% 或更多 CPU,並且程序通常會窒息。我已經分配了實時循環優先級 99,但它仍然遠非完美。
如何在啟動時將所有其他程序分配給剩餘的 7 個 CPU 核心,並讓一個核心專用於這一程序?我說的是所有新生成的程序從一開始就已經綁定到 7 個核心的情況。
使用核心引導參數 isolcpus 刪除您想要為實時程序專用的 cpu:
Remove the specified CPUs, as defined by the cpu_number values, from the general kernel SMP balancing and scheduler algroithms. The only way to move a process onto or off an "isolated" CPU is via the CPU affinity syscalls
如果您使用的是帶有 systemd 的發行版,則可以
CPUAffinity
在您的服務單元中使用
我從來沒有這樣做過,所以這只是一個建議。
似乎
taskset
配置是繼承的。因此,您可以儘早在引導過程中為 PID 1 進行這樣的設置,以便 SystemD 之後啟動的所有內容都將僅使用這些核心:taskset -p 0x7F 1
或者您不在乎在啟動過程中的哪個時間點會發生這種情況,只需遍歷所有現有程序即可。
不要忘記為您的特殊應用更改設置…