强制模式下的 SElinux 是否会导致文件访问延迟?

强制模式下的 SElinux 是否会导致文件访问延迟?

我在 Amazon Linux 上启用了强制模式的 SElinux,发现文件访问(读取/写入/更新)所需的时间平均增加了 2-4 秒。源进程是 Salt,文件访问与 Salt 的 file.managed 状态相关https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.managedaudit.log 文件中没有相应的拒绝。作为一种强力方法,我们尝试使用 audit2allow 在日志中添加所有拒绝的允许规则,但无法缩短访问文件所需的时间。

是否已知 SElinux 会导致文件系统访问性能下降?Linux 系统上是否存在已知会影响文件访问时间的进程?

答案1

SELinux 经常强制执行那些 IOPS 比你的系统更高的系统。此外,无论使用哪种存储系统或额外开销,IO 经常需要花费数秒的时间,这会导致无法容忍的性能低下。

正在发生其他事情。使用Linux 的丰富性能工具 来揭示它。一些开始的想法:

  • 测量主机上所有性能资源的利用率。CPU、磁盘带宽、磁盘 IOPS、内存等。
  • 得到火焰图当这个东西运行缓慢时,CPU 上有什么用处。
  • 使用特定于编程语言的分析器对有问题的代码行进行分析。在本例中,salt 的文件功能可用。
  • 获取块 IO 延迟分布,例如使用biolatency
  • 使用类似工具对此存储系统的原始 IO 进行基准测试fio,或者只是touch

(其中一些需要最新的内核才能实现 bpf 和其他功能。我不知道 Amazon Linux 的工具对所有这些功能的支持有多好。)

答案2

简短回答: 是的,它会导致增加延迟,但它太小了,你通常不会在意

长答案:SELinux 会增加一些延迟,因为:

  • 它的标签存储在扩展属性中,该属性是附加到每个文件的附加元数据标签(要读取/解析);

  • 它必须将刚读取的元数据与当前加载的二进制策略进行比较。

为了最大限度地减少对性能的影响,Linux 内核保留了一个 AVC 缓存,以绕过读取/比较过程中最繁重的步骤。更多信息可以在这里找到这里这里

结论是一般情况下,SELinux 仅对性能产生 0-2% 的影响,从性能角度而言可以忽略不计

相关内容