У Linux працює системний виклик для встановлення спорідненості процесора до процесу sched_setaffinity
. Тоді є taskset
інструмент зробити це в командному рядку.
Щоб ця єдина програма працювала лише на одному процесорі, я думаю, ви хочете щось подібне
taskset -c 1 ./myprogram
(встановіть будь-який номер CPU як аргумент для -c
комутатора.)
Це повинно бути досить близьким до однопроцесорної системи, якщо ваші інші процеси не працюють надто багато в порівнянні з тим, який ви хочете виміряти, або вони плануються до інших процесорів. Якщо ви хочете , щоб виділити один процесор для цього єдиного процесу тільки , і запобігти інші процеси від роботи на цьому процесорі, ви повинні встановити їх спорідненість теж.
Що, я не знаю, як правильно це зробити. Вам потрібно буде встановити спорідненість процесора init
дуже рано в процесі завантаження, щоб переконатися, що він успадковується всім процесам у системі. Як вирішення, ви можете використовувати taskset -c -p 0 $PID
для всіх інших процесів, щоб змусити їх працювати лише на процесорі № 0.
Systemd такожCPUAffinity=
контролювати спорідненість в одиничних файлах і є кілька з питань по налаштуванню спорідненості за замовчуванням тут на unix.SE, але я не знайшов ні з хорошим рішенням.
Хоча як @Kamil Maciorowski прокоментував і відповів на інше запитання на superuser.com , налаштування isolcpus=1
в командному рядку ядра повинно "ізолювати цей процесор від загальних алгоритмів планування", що вам може знадобитися.