Process
如何將 CPU 專用於程序
我試圖尋找解決方案,但我發現的只是如何使用任務集或 sched_setaffinity 將程序固定到 CPU。但看起來這不會讓程序獨占訪問 CPU,即調度程序可能會在這個 CPU 上分配一些其他程序。是否有任何方法或命令可以確保 CPU 專用於程序?使用任務集,我們可以確保特定程序僅在特定 CPU 上執行,但我也希望它以其他方式執行,即 CPU 綁定到該程序。我發現了諸如如何分配特定於程序的 CPU 功率之類的問題?以及如何在 Linux 中將一個程序限制為一個 CPU 核心?但它們被標記為如何在 Linux 上設置程序的處理器親和性?這不是我想要的。
您需要從整體調度中排除一個 CPU,然後您可以通過以下方式將程序分配給它
taskset
正如你已經發現的那樣。要排除 CPU,請添加引導參數
isolcpus=N
數字 (N) 從 0 開始。
在執行 systemd 的系統上,您還可以在 systemd 配置中進行配置。假設您的系統有 4 個核心,您可以添加
[Manager] CPUAffinity=0-2
以
/etc/systemd/system.conf
確保 systemd (PID 1) 將在前三個 CPU 上執行。預設情況下,由 systemd 直接或間接啟動的程序(對所有程序都是如此)將繼承此設置,因此不會使用第 4 個 CPU(編號 3)。只需添加[Service] CPUAffinity=3
到您要在第 4 個核心上執行的服務的單元文件。這種方法的一個優點是您可以調整其他實時相關設置,例如
LimitMEMLOCK
或LimitRTPRIO
在同一位置 - 無需擺弄一堆不同的工具。注意:您需要重新啟動系統,systemd 才能獲取第一個更改。如果您只修改了服務配置,重啟受影響的服務就足夠了:
systemctl daemon-reload systemctl restart my-service.service