экранирование процессора и отключение прерываний ядра - PullRequest
6 голосов
/ 05 мая 2011

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

Ответы [ 2 ]

3 голосов
/ 06 мая 2011

Основное ядро ​​Linux не предназначено для отключения всех IRQ на ЦП на длительный период. Существует ряд внутренних функций ядра, которые требуют таких IRQ - RCU является одним из них. Остановка работы RCU может привести к остановке остальной системы, и во избежание такой остановки (в зависимости от используемой реализации RCU) могут возникать IPI (межпроцессорные прерывания), передаваемые всем ЦП.

Тем не менее, существуют экспериментальные исправления для правильной реализации такой изоляции процессора; Например: http://lwn.net/Articles/268711/ - они проходят через все внутренние вращения, необходимые для перевода ЦП в автономный режим (с точки зрения остальной части ядра) перед отключением маршрутизации прерываний. Это довольно старая серия патчей; Вы можете связаться с разработчиком серии исправлений, чтобы узнать, есть ли у них более новая версия, или адаптировать эти исправления к текущей версии ядра. Предполагается, что люди PREEMPT_RT также рассматривают возможность его реализации - посмотрите их вики по адресу https://rt.wiki.kernel.org/index.php/Main_Page (хотя он еще не реализован). Удачи!

2 голосов
/ 06 мая 2011

Несколько вещей, которые нужно учитывать:

  1. Любые IRQ будут иметь на один процессор меньше, что означает, что у вас больше шансов ожидать прерывания. Очевидно, что это становится меньшей проблемой по мере роста числа процессоров.
  2. Без прерываний будет намного сложнее заставить процесс отказаться от выполнения. Если он решает войти в бесконечный цикл, вы не можете прерывать процессор, чтобы остановить его.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...