Linux
僅使用一個 cpu 核心
我需要為我的並發程序執行性能測試,我的要求是它應該只在一個CPU 核心上執行。(我不想合作執行緒——我希望總是有一個上下文切換)。
所以我有兩個問題:
- 最好的解決方案 - 如何僅為我的程序簽名和保留一個 CPU 核心(強制作業系統不使用這個 CPU 核心)。我想這是不可能的,但也許我錯了……
- 如何設置 linux (Fedora 24) 只使用一個 CPU 核心?
在 linux 上,為程序設置 CPU 親和性的系統呼叫是
sched_setaffinity
. 然後是在命令行上執行此操作的taskset
工具。要讓該單個程序僅在一個 CPU 上執行,我認為您需要類似的東西
taskset -c 1 ./myprogram
(將任何 CPU 編號設置為
-c
開關的參數。)這應該足夠接近單處理器系統,只要您的其他程序與您要測量的程序相比執行得不多,或者它們被安排到其他 CPU 上。如果您只想將一個 CPU 專用於該單個程序*,並阻止其他*程序在該 CPU 上執行,您還需要設置它們的關聯性。
那,我不知道該怎麼做。您需要
init
在啟動過程的早期設置處理器親和性,以確保它被繼承到系統上的所有程序。作為一種解決方法,您可以使用taskset -c -p 0 $PID
所有其他程序來強制它們僅在 CPU #0 上執行。systemd 還必須
CPUAffinity=
控制單元文件中的關聯性,並且有幾個關於在 unix.SE 上設置預設關聯性的問題,但我沒有找到任何好的解決方案。儘管正如@Kamil Maciorowski 評論並回答了 superuser.com 上的另一個問題,但核心命令行
isolcpus=1
上的設置應該“將該 CPU 與通用調度算法隔離開來”,這可能是您想要的。