返回
我们真的了解 THP 吗?小心这些隐蔽的性能杀手
前端
2023-11-22 00:29:19
THP 简介
THP 的概念非常简单:
- 系统内存中所有的物理页面被分成大小为 2MB 的 huge page。
- 对于系统中所有的进程,所有的 huge page 都是预先分配好的,但并未关联到具体进程。
- 当进程需要分配内存时,系统会首先从这些预先分配好的 huge page 中分配,只有当没有足够的 huge page 时,才会使用默认大小的 4KB 页面。
THP 的设计初衷很简单:
- 减少TLB miss,提升页表项的缓存利用率。
- 简化内存管理,减少内核的开销。
THP 的潜在性能问题
然而,THP 也会带来一些潜在的性能问题,例如性能抖动。
- 性能抖动: THP 可能会导致性能抖动,因为当系统需要分配或释放内存时,它必须先找到一个合适的 huge page,这可能会导致额外的开销。
- 内存碎片: THP 可能会导致内存碎片,因为当系统释放一个 huge page 时,它可能会留下一些小块的内存,这些内存无法被其他进程使用。
- 延迟敏感型应用性能下降: 对于那些对延迟非常敏感的应用,THP 可能会导致性能下降,因为分配或释放 huge page 可能需要较长的时间。
THP 的使用建议
尽管 THP 可能会带来一些潜在的性能问题,但它仍然是一个非常有用的特性。在大多数情况下,THP 可以显著提高系统性能。但是,在某些情况下,THP 可能会导致性能下降。因此,在使用 THP 时,需要仔细考虑以下几点:
- 系统的实际情况: 在启用 THP 之前,需要了解系统的实际情况,例如系统的负载、应用程序的类型等。如果系统负载很重,或者应用程序对延迟非常敏感,则不建议使用 THP。
- THP 的配置参数: THP 的配置参数有很多,例如 hugepage_size、hugepages_nr、hugepages_percent 等。这些参数可以对 THP 的性能产生很大的影响。在启用 THP 之前,需要仔细调整这些参数。
- 应用程序的兼容性: THP 可能会与某些应用程序不兼容。在启用 THP 之前,需要确保应用程序与 THP 兼容。
如何关闭 THP
如果发现 THP 导致了性能问题,可以按照以下步骤关闭 THP:
- 编辑文件/etc/default/grub。
- 在 GRUB_CMDLINE_LINUX_DEFAULT 行中添加以下参数:
transparent_hugepage=never
- 保存文件并退出。
- 运行以下命令更新 GRUB 配置:
update-grub
- 重启系统。
总结
THP 是一种非常有用的特性,但它也可能带来一些潜在的性能问题。在使用 THP 时,需要仔细考虑系统的实际情况、THP 的配置参数以及应用程序的兼容性。如果发现 THP 导致了性能问题,可以按照本文提供的步骤关闭 THP。