
如何在 Linux 上設定進程的處理器關聯性?
答案1
我為此使用了任務集。如果您安裝了任務集,類似:
taskset -cp 0,2 45678
會將 id 為 45678 的進程設定為與 cpu 1 和 3 具有關聯性。
答案2
在進程內部,呼叫將是sched_setaffinity()
,或對於 pthreads 的東西,pthread_setaffinity_np()
與此相關的是,如果您擔心程式的 CPU 關聯性,那麼也值得關注它是如何進行記憶體分配的。記憶體連接到多個控制器(即多個 CPU 插槽,每個插槽都有自己的)的大型系統在不同的 CPU-記憶體對之間將具有可變的延遲和頻寬。您還需要使用它所numactl
使用的命令或系統呼叫來研究 NUMA 關聯性。我參與的一個程式由此獲得了 10% 的效能提升。
答案3
您需要安裝schedutils
(Linux 調度程式實用程式)。我已經在我的 Ubuntu 桌面上使用了它。
順豐關聯
答案4
taskset -c 1-3 ./a.out arg1 arg2
a.out
使用給定參數和設定為處理器 1、2 或 3(從零開始)的關聯來啟動進程。
這是一個最小的 C 測試程序,可用於查看它的實際情況:https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from-c/50117787#50117787