禁用 THP 的缺点是什么?为什么在许多发行版上默认启用它?

met*_*jus 7 linux-kernel docker coreos

我和我的团队最近注意到,在我们的 VM 上启动 Redis 会给出以下警告:“警告您在内核中启用了透明大页面 (THP) 支持。这将导致 Redis 出现延迟和内存使用问题。”。

我调查了这个话题,只是为了发现大多数数据库供应商建议(如果不需要)您禁用 THP。举几个例子:

我还注意到许多发行版默认启用了此功能:

  • 红帽
  • CentOS
  • Ubuntu
  • 核心操作系统

所以问题是:

  • 为什么默认启用?
  • 在我们的集群虚拟机(一个基于 CoreOS 的 Kubernetes 集群,我们在其中运行许多不同的 Docker 容器)上禁用 THP 可能有什么缺点/风险?

GAD*_*D3R 6

THP 是一个 linux 特性,它在某些 linux 发行版上默认启用以提高应用程序性能。但有些操作系统数据库供应商并不推荐这样做,因为它会降低他们产品的性能。

来自Red-HAT 文档(为什么启用 THP):

由于 THP 的目标是提高性能,因此其开发人员(来自社区和红帽)已经在广泛的系统、配置、应用程序和工作负载中测试和优化了 THP。这允许 THP 的默认设置提高大多数系统配置的性能。但是,不建议将 THP 用于数据库工作负载。

来自:Oracle Docs(为什么要禁用 THP?)

但不幸的是,透明 HugePages 不能很好地与 Oracle 数据库配合使用,并且与 RAC 安装中的节点重新启动以及单实例和 RAC 安装的性能问题相关联。因此,Oracle 建议在运行 Oracle 数据库的所有服务器上禁用 Transparent HugePages

在我们的集群虚拟机上禁用 THP 可能有哪些缺点/风险?

保持 THP 启用是防止mmap泛洪攻击的一项安全功能。

但是,可以进一步优化应用程序以利用此功能,例如,它们之前已经过优化以避免mmap对每个 malloc(4k) 进行大量系统调用。到目前为止,优化用户空间并不是强制性的,即使对于处理大量内存的大页面不知道的应用程序,khugepaged 已经可以处理长期页面分配。