Подтвердить что ты не робот

Всего одно ядро, предназначенное для одиночного процесса

Можно ли каким-либо образом в Linux назначить одно ядро ​​ЦП конкретному данному процессу, и в этом ядре не должно быть никаких других процессов или обработчиков прерываний?

Я прочитал о связности процессов в Linux Процессы привязки к ЦП с помощью утилиты tasket, но это не решает мою проблему, потому что просто пытается аффинировать данный процесс этому ядру, но это возможно, что другие процессы могут быть запланированы на этом ядре, и этого я хочу избежать.

Следует ли изменить код ядра для планирования?

4b9b3361

Ответ 1

Да, есть. Фактически, есть два разных способа сделать это: -)

Прямо сейчас, лучший способ выполнить то, что вы хотите, это сделать следующее:

  • Добавьте параметр isolcpus = [cpu_number] в командную строку ядра Linux из загрузчика во время загрузки. Это даст указание планировщику Linux не запускать какие-либо регулярные задачи на этом CPU, если специально не запрошено использование слияния cpu.

  • Используйте привязку IRQ для установки других процессоров для обработки всех прерываний, чтобы ваш изолированный CPU не получал никаких прерываний.

  • Используйте привязку к процессору, чтобы исправить вашу конкретную задачу на изолированном CPU.

Это даст вам лучшее, что Linux может предоставить в отношении изоляции процессора без внешних и встроенных патчей.

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

Для (почти) полного списка источников прерываний проверьте мою страницу на https://github.com/gby/linux/wiki

Альтернативный метод заключается в использовании cpusets, который является более элегантным и динамичным, но на данный момент страдает некоторыми недостатками (например, без миграции таймеров), что заставляет меня рекомендовать старый, грубый, но эффективный параметр isolcpus.

Обратите внимание, что в настоящее время сообщество Linux использует работу для решения всех этих проблем и более того, чтобы обеспечить еще лучшую изоляцию.

Ответ 2

Существует статья Redhat, говорящая об этом. Он изменяет параметр загрузки isolcpus.

И

Ответ 3

Выделение целого ядра процессора для конкретной программы

В то время как набор заданий позволяет назначать определенную программу определенным процессорам, это не означает, что никакие другие программы или процессы не будут запланированы на этих ЦП. Если вы хотите предотвратить это и выделить целое ядро ​​ЦП для конкретной программы, вы можете использовать параметр ядра "isolcpus", который позволяет вам резервировать ядро ​​процессора во время загрузки.

Добавьте параметр kernel "isolcpus =" в загрузчик во время загрузки или файла конфигурации GRUB. Тогда планировщик Linux не будет планировать какой-либо регулярный процесс на зарезервированном ядре процессора, если специально не запрошен с набором задач. Например, чтобы зарезервировать ядра CPU 0 и 1, добавьте параметр ядра "isolcpus = 0,1". После загрузки используйте набор задач, чтобы безопасно назначить зарезервированные ядра ЦП в вашей программе.

Источник()

Ответ 4

Даже если вы выполните шаги в ответе gby, задачи ядра выполняются на изолированном ядре ЦП. В настоящее время ведется работа в реальном времени RT_PREEMPT, чтобы улучшить это. Поэтому, если вы не используете ядро ​​реального времени с истекающим потоком от RP_PREEMPT, возможно, не удастся полностью изолировать ядро ​​процессора.

Ответ 5

По документация

Планировщик Linux будет соблюдать заданное соответствие процессоров, и процесс не будет работать на других процессорах.

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