Linux

如何分配程序在部分 CPU 上工作?

  • February 24, 2021

我們只想在前 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文件的部分(或創建覆蓋文件)。

但是,如果您需要限制用於許可目的的核心數量,則需要找出相關軟體供應商接受哪些方法。他們可能需要一種不太容易撤消的方法,或者他們可能需要一種機制,例如每天報告該軟體每天使用了多少核心(最大)。

引用自:https://unix.stackexchange.com/questions/635983