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

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

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

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

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

  • 红帽
  • 中央操作系统
  • 乌班图
  • 核心操作系统

所以问题是:

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

答案1

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

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

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

从:甲骨文文档(为什么要禁用 THP?)

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

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

保持 THP 启用是一项安全功能,可防止mmap洪水袭击

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

相关内容