Вызывает ли SElinux в принудительном режиме задержки при доступе к файлам?
Я включил SElinux в принудительном режиме на Amazon Linux и вижу, что время, необходимое для доступа к файлу (чтение / запись / обновление), увеличилось в среднем на 2-4 секунды. Исходным процессом является Salt, а доступ к файлу связан с состоянием file.managed Salt https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html В файле audit.log нет соответствующих отказов. В качестве метода грубой силы мы попытались добавить правила разрешения для всех отказов в журнале с использованием audit2allow, но не смогли сократить время, необходимое для доступа к файлам.
Известно ли, что SElinux вызывает снижение производительности при доступе к файловой системе? Существуют ли известные процессы в системе Linux, которые влияют на время доступа к файлам?
2 ответа
SELinux регулярно применяет системы, которые выполняют больше операций ввода-вывода в секунду, чем ваша. Кроме того, операции ввода-вывода, которые регулярно занимают несколько секунд, недопустимо плохо работают, независимо от того, какая система хранения или каких-либо дополнительных затрат.
Что-то еще происходит. Используйте богатые инструменты производительности Linux, чтобы показать это. Некоторые стартовые идеи:
- Измерьте использование всех ресурсов производительности на хосте. Процессор, пропускная способность диска, IOPS диска, память и т. Д.
- Получите график пламени того, что находится на процессоре, когда эта штука медленная.
- Используйте специальный профилировщик языка программирования для проблемных строк кода. В этом случае функции файла соли.
- Получите распределение задержки ввода-вывода блока, например с
biolatency
, - Оцените необработанные операции ввода-вывода в этой системе хранения, используя такие инструменты, как
fio
, или простоtouch
(Некоторые из них требуют новейших ядер для bpf и других функций. Я не знаю, насколько хороши инструменты Amazon Linux для всего этого.)
Короткий ответ: да, это вызывает дополнительную задержку, но она настолько мала, что вам, как правило, все равно
Длинный ответ: SELinux добавляет задержку, потому что:
его метка хранится в расширенном атрибуте, который является дополнительным тегом метаданных (для чтения / анализа), прикрепленным к каждому файлу;
он должен сравнивать только что прочитанные метаданные с текущей загруженной двоичной политикой.
Чтобы свести к минимуму влияние на производительность, ядро Linux хранит кэш AVC, чтобы обойти самые тяжелые шаги в процессе чтения / сравнения. Более подробную информацию можно найти здесь и здесь
Вывод заключается в том, что в общем случае SELinux влияет на производительность только на 0-2% и может быть проигнорирован с точки зрения производительности