如何使用 numactl 強製程序僅在單執行緒上運行?

如何使用 numactl 強製程序僅在單執行緒上運行?

我的本機有多個CPU,每個CPU都有多個核心,每個CPU都可以支援多個執行緒。我有一個多線程進程,我想強制它僅在單個線程上運行。我明白numactrl可以做到這一點。

如何numactl強制進程僅在單一執行緒上運行?或者,是否有一個更簡單的內建實用程式可以做到這一點?

答案1

numactl --physcpubind=+1 /path/to/your/executable

這應該在分配給您的晶片組的第二個核心/CPU 上運行您的進程(索引 1)。有關更多詳細信息,請參閱手冊頁的範例部分: http://linux.die.net/man/8/numactl

編輯:我應該指出,這意味著程式最多會同時運行一個線程,但這並不意味著整個進程將僅由一個線程組成。如果編寫程式是為了產生一個新線程,它就會這樣做,但它將與進程的其餘部分在同一核心/CPU 上執行。雖然差異很小,但仍然可能很重要。

答案2

要將程式限制為一個 CPU 硬體核心/線程,也可以使用taskset 1 prog [args]

聚苯乙烯

限製程式可以擁有的進程(執行緒)數量的程式是prlimit --nproc=1 prog [args]。我嘗試使用它,rsync但得到“fork unavailable... IPC 中的錯誤”,最後 -rsync被寫入不作為一個線程工作。

strace prlimit --nproc=1 rsync  

運行strace已顯示,如下面的 SO 連結中所述,調用的返回值clone-1 EAGAIN (resource temporary unavailable).

PS創意取自https://stackoverflow.com/questions/38637451/is-there-a-way-force-a-program-to-use-only-1-thread

相關內容