Изоляция процессора Linux и мьютексы - PullRequest
0 голосов
/ 28 января 2019

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

Описание Удаление указанных процессоров, определенных значениями cpu_number, из общих алгоритмов балансировки SMP ядра и планировщика.

Мой процесс имеет, скажем, 4 потока, и я изолирую 2 ядра (не обращая внимания на HT), и они должны синхронизироваться с помощью неких примитивов синхронизации ОС Linux (mutex, semaphor, cond var и т. Д.).Если ядра удалены из алгоритма планирования, как указано в документации, и один из потоков блокируется и переходит в состояние сна, кто будет планировать поток обратно в изолированные процессоры, когда он разблокируется?

Спасибо.

1 Ответ

0 голосов
/ 28 января 2019

То, что процессоры "Удалить [d ...] из общего алгоритма балансировки SMP ядра и планировщика" означает, что ядро ​​не будет выбирать эти (логические) процессоры для планирования общих задач, что фактически означаетте, которые не были специально назначены для этих процессоров, например, с помощью команды taskset или cset.Из этого также следует, что задачи, запланированные на одном или нескольких из этих процессоров, будут выполняться только на назначенных процессорах, а не на любых других в изолированном наборе, если таковые имеются, независимо от относительной загрузки процессора.

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

Кроме того, в качестве отступления, когда вы говорите

, я изолирую 2 ядра (игнорируйте HT)

, я подозреваю, что у вас может быть неправильное представление.Linux обрабатывает ядра, на которых включена поддержка гиперпоточности, как два отдельных ядра, хотя фактически они совместно используют ресурсы обработки.Таким образом, вы не можете безопасно игнорировать HT, если он включен.На самом деле вам нужно очень тщательно это учитывать, по крайней мере, при выборе количества и каких ядер изолировать.

...