4

То, что я пытаюсь реализовать, - это запустить скрипт Python на собственном ядре на Raspberry Pi 2 с Debian. Можно использовать taskset чтобы связать процесс с конкретным ядром. Но мне нужно, чтобы это ядро было свободным от загрузки ОС и других процессов одновременно. Как мне это сделать?

2 ответа2

5

Вся эта тема должна быть полезной.

Я хотел бы найти способ ограничить процесс 'init' для запуска на процессоре 1.

В общем случае последние слова должны быть «запущены на всех процессорах, кроме 1». Я думаю, можно использовать некоторые параметры ядра ; irqaffinity , isolcpus выглядят многообещающе.


РЕДАКТИРОВАТЬ:

О isolcpus в документации параметров ядра:

Этот вариант является предпочтительным способом изолировать процессоры. Альтернатива - ручная установка маски ЦП для всех задач в системе - может вызвать проблемы и неоптимальную производительность балансировщика нагрузки.

Я сделал несколько тестов. Результаты:

  • Параметр ядра isolcpus - это тот, который вы можете использовать, чтобы ограничить процесс init и изолировать ЦП.

  • Мне показалось, что параметр ядра irqaffinity не влияет на изолированные процессоры. Вам, вероятно, не нужен этот параметр.

  • Когда я изолировал CPU0, он не работал полностью без дела. Это системное или аппаратное требование для выполнения каких-либо вычислений, несмотря на изоляцию? - Я не знаю.

  • Когда я изолированные CPU1 или CPU7 он был твердым , как в режиме ожидания , как камень.

Для того, чтобы изолировать CPU1 добавить isolcpus=1 в вашем grub.cfg как это:
linux /vmlinuz-(... все ваши текущие параметры здесь ...)isolcpus=1


ОРИГИНАЛЬНЫЙ ОТВЕТ ПРОДОЛЖАЕТСЯ:

В качестве альтернативы, после запуска системы вы можете переназначить привязку всех запущенных в данный момент процессов, но это выглядит менее элегантно.

Я согласен, что он кажется менее элегантным, но все же может работать достаточно хорошо (РЕДАКТИРОВАТЬ: это может вызвать проблемы и неоптимальную производительность балансировщика нагрузки, как указано выше). В моем Debian работает быстрый и грязный однострочный текст:

sudo bash -c 'cd /proc ; for i in [1-9]* ; do taskset -a -p fffffffe $i ; done'

Я получил ошибки для некоторых pid- ов, но, тем не менее, htop показывает, что после этого одно ядро практически простаивает. Конечно, вы должны запустить свой скрипт позже, каким-то образом исключить его или просто переназначить:

taskset -a -p 1 PID

Я ожидаю, что вам не нужно будет повторять упомянутую однострочную оболочку, чтобы охватить новые процессы, так как привязка к процессору наследуется.

3

С пакетом Cpuset:

# cset shield -c 42 -k on

зарезервировать ЦП № 42 для вашей задачи (вы можете зарезервировать группу ЦП), затем

# cset shield -e your_script

запустить your_script на ваших зарезервированных процессорах. (Смотрите также параметры --user и --group .)

Когда вы закончите, освободите процессоры ("сбросить щит") с помощью:

# cset shield -r

Существует много, намного больше в этом инструменте. Например, присоединение ранее запущенного процесса к зарезервированному ЦП:

# cset shield -s -p <PID> --threads

Справка командной строки:

# cset help

Онлайн помощь / учебник

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .