Указание ядру Linux * не * использовать определенные процессоры

8

Я пытаюсь запустить некоторые тесты на многоядерной машине, и я бы хотел сказать ядру Linux просто избегать определенных ядер, если явно не указано их использовать.

Идея состоит в том, что я мог бы выделить несколько ядер (у машины есть 6 физических ядер) для бенчмаркинга и использовать маску процессора, чтобы разрешить только процессы бенчмарка на заданных ядрах.

Это возможно?

Лайос Надь
источник
Какие фактические тесты вы хотите выполнить?
Василий Старынкевич

Ответы:

5

Вы можете изолировать некоторые ядра процессора от планирования ядра, используя isolcpusпараметр. Добавьте этот параметр в ваш grub.conf и перезагрузитесь, чтобы изменения вступили в силу.

VenkatC
источник
2
Ссылка мертва. Лучше всего включить пример непосредственно в ответ.
pchaigno
4

Вы хотите некоторую привязку процессора (или привязку процессора ).

Соответствующим системным вызовом является sched_setaffinity (2) , но вы должны использовать его через pthread_set_affinity_np (3), если вы хотите для этого кодировать свои тесты.

Связанная команда это taskset (1), и вы можете использовать ее в командах, которые вы хотите тестировать (или в вашей оболочке).

Если возможно, позаботьтесь о том, чтобы машина не была загружена другими задачами, не относящимися к тесту.

В качестве альтернативы, используйте некоторый гипервизор, такой как Xen , и загрузите Linux в качестве гостевой ОС для этого гипервизора. Затем настройте xenиспользование только ограниченного набора ядер ЦП (я не знаю точных деталей, вам нужно это выяснить). В Debian (и связанных с ними) распределений, можно установить пакеты , такие как xen-linux-system-amd64, xen-hypervisor-amd64, и xen-utilsт.д. (я использую на Debian / Sid xen-hypervisor-4.5-amd64, xen-linux-system-4.0.0-1-amd64, и xen-utils-4.5 т.д. ...).

Возможно, существует какой-то способ настройки (возможно, во время компиляции ядра или передачи конкретных аргументов в ядро ​​через загрузчик Grub) вашего ядра Linux, чтобы ограничить количество используемых ядер.

Конечно, лучше, когда бенчмаркинг некоторые программы -EG на рабочем столе Linux PC-, позаботиться , чтобы избежать многих внешних запущенных процессов (использование ps auxw, pstree -p, topчтобы найти их). По крайней мере, закройте и закройте большинство интерактивных приложений (браузер, такой как Firefox, электронная почта, редактор, IDE, например, Eclipse) и оставьте лишь небольшое количество терминалов для сравнения. Можно даже эталоном в пакетном режиме ( с использованием batchили atдля запуска тестов) , пока вы еще не вошли в систему (так что не имеет GUI сессий а - ля Gnome или KDE или Xfce , и т.д ... работает).

Василий Старынкевич
источник
Установление соответствия задач для сравнения недостаточно. Вы должны также держать другие задачи подальше. То, что делает ваше предложение гипервизора, но очень жестким способом.
Жиль "ТАК - перестань быть злым"
@Gilles: почему для целей бенчмаркинга нужны другие задачи? На практике при тестировании ПК часто простаивает ... Для дорогостоящего сервера все иначе!
Василий Старынкевич
Например, потому что вы проводите тестирование на своем настольном ПК, который также тратит ресурсы на Firefox, Eclipse и другие чрезвычайно сложные задачи.
Жиль "ТАК - перестань быть злым"
На вашем собственном настольном ПК вы можете довольно легко остановить самые трудоемкие задачи (например, закрыть и выйти из firefox и затмения) во время сравнительного анализа. Вы даже можете запустить тесты в пакетном режиме (используя atили batch), пока вы не вошли в систему (поэтому не запускайте какой-либо потребляющий сеанс).
Василий Старынкевич