如何在 Linux 上設定進程的處理器關聯性?

如何在 Linux 上設定進程的處理器關聯性?

如何在 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

相關內容