Linux

僅使用一個 cpu 核心

  • October 23, 2016

我需要為我的並發程序執行性能測試,我的要求是它應該只在一個CPU 核心上執行。(我不想合作執行緒——我希望總是有一個上下文切換)。

所以我有兩個問題:

  1. 最好的解決方案 - 如何僅為我的程序簽名和保留一個 CPU 核心(強制作業系統不使用這個 CPU 核心)。我想這是不可能的,但也許我錯了……
  2. 如何設置 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 與通用調度算法隔離開來”,這可能是您想要的。

引用自:https://unix.stackexchange.com/questions/317898