Linux
如何分配程序在部分 CPU 上工作?
我們只想在前 6 個 CPU上執行我們的應用程序(程序) 。我們有一台 RHEL 機器。
我們有總共 12 個核心的物理 DELL 機器(來自
lscpu
)是否可以將程序分配為僅使用前 6 個核心?
或者其他屏蔽最後 6 個核心的方法,所以我們實際上可以只使用前 6 個核心,或者停用最後 6 個核心,
注意: 真正的原因是因為我們為每個核心支付許可證,如果我們可以使用一半的核心,那麼我們只需支付一半的價格
這方面的術語是CPU 親和性。您可以使用該
taskset
命令為各個程序設置它。
<command>
僅在前 6 個核心(核心 #0-#5)上執行:taskset -c 0-5 <command> [arguments for command]
如果程序已經在執行,您可以改為通過 PID 設置其親和性:
taskset -c 0-5 -p <PID of an existing process>
如果您想要一個適用於特定程序及其所有子程序的限制,那麼您將需要 Stephen Kitt 在評論中提到的 cgroups。如果有問題的程序作為
systemd
服務執行,那麼您只需添加CPUAffinity=0-5
到[Service]
相應.service
文件的部分(或創建覆蓋文件)。但是,如果您需要限制用於許可目的的核心數量,則需要找出相關軟體供應商接受哪些方法。他們可能需要一種不太容易撤消的方法,或者他們可能需要一種機制,例如每天報告該軟體每天使用了多少核心(最大)。