Назад | Перейти на главную страницу

Вызывает ли SElinux в принудительном режиме задержки доступа к файлам?

Я включил SElinux в принудительном режиме в Amazon Linux и вижу, что время, затрачиваемое на доступ к файлу (чтение / запись / обновление), увеличилось в среднем на 2-4 секунды. Исходный процесс - это Salt, а доступ к файлу связан с файловым. Управляемым состоянием Salt. https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.managed В файле audit.log нет соответствующих отказов. В качестве подхода грубой силы мы попытались добавить разрешающие правила для всех отказов в журнале с помощью audit2allow, но не смогли сократить время, необходимое для доступа к файлам.

Известно ли, что SElinux снижает производительность доступа к файловой системе? Существуют ли известные процессы в системе Linux, которые влияют на время доступа к файлам?

Короткий ответ: да, это вызывает дополнительную задержку, но она настолько мала, что вам все равно

Длинный ответ: SELinux увеличивает задержку, потому что:

  • его метка хранится внутри расширенного атрибута, который представляет собой дополнительный тег метаданных (для чтения / анализа), прикрепленный к каждому файлу;

  • он должен сравнивать только что прочитанные метаданные с текущей загруженной двоичной политикой.

Чтобы минимизировать влияние на производительность, ядро ​​Linux сохраняет кеш AVC, чтобы обойти самые тяжелые этапы процесса чтения / сравнения. Более подробную информацию можно найти Вот и Вот

Вывод в том, что в общем случае SELinux влияет на производительность только на 0-2% и может быть проигнорирован с точки зрения производительности

SELinux обычно применяет принудительное исполнение в системах, которые выполняют больше операций ввода-вывода в секунду, чем ваша. Кроме того, операции ввода-вывода, которые регулярно занимают несколько секунд, являются недопустимо низкой производительностью, независимо от системы хранения или дополнительных накладных расходов.

Происходит что-то еще. Использовать Богатые инструменты производительности Linux раскрыть это. Некоторые стартовые идеи:

  • Измерьте использование всех ресурсов производительности на хосте. ЦП, пропускная способность диска, IOPS диска, память и т. Д.
  • Получить график пламени о том, что находится на процессоре, когда эта штука работает медленно.
  • Используйте профилировщик для конкретного языка программирования в проблемных строках кода. В этом случае файл соли functions.
  • Получите распределение задержки блочного ввода-вывода, например, с biolatency.
  • Сравните необработанные операции ввода-вывода в этой системе хранения с помощью таких инструментов, как fio, или просто touch

(Для некоторых из них требуются новейшие ядра для bpf и других функций. Я не знаю, насколько хороши инструменты Amazon Linux для всего этого.)