我和我的团队最近注意到,在我们的虚拟机上启动 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 已经可以处理长期页面分配,即使对于处理大量内存的巨页不感知应用程序也是如此。