返回

我们真的了解 THP 吗?小心这些隐蔽的性能杀手

前端

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:

  1. 编辑文件/etc/default/grub。
  2. 在 GRUB_CMDLINE_LINUX_DEFAULT 行中添加以下参数:
transparent_hugepage=never
  1. 保存文件并退出。
  2. 运行以下命令更新 GRUB 配置:
update-grub
  1. 重启系统。

总结

THP 是一种非常有用的特性,但它也可能带来一些潜在的性能问题。在使用 THP 时,需要仔细考虑系统的实际情况、THP 的配置参数以及应用程序的兼容性。如果发现 THP 导致了性能问题,可以按照本文提供的步骤关闭 THP。