Transparent Huge Pages 简称 THP,本来是Linux为提高系统性能而做的努力,结果反而成了性能的隐患。
mongoDB的官方文档明确说明要禁止 linux 的 THP。
Transparent Huge Pages (THP) 是 Linux 内核为提高系统性能而引入的一种内存管理技术。它允许操作系统将连续的小页面(4KB)合并成更大的页面(2MB或1GB),从而减少了内存管理的开销,并提高了内存访问的效率。
大页的分配机制:标准大页管理是预分配的方式,而透明大页管理则是动态分配的方式。
标准大页管理是在系统启动时预分配一定数量的大页,并将它们放置在一个专门的内存池中。
当应用程序需要使用大页时,它们可以从这个内存池中分配出来。这种方式可以提高应用程序的性能,因为大页的使用可以减少页表的数量,从而减少了 CPU 访问内存的时间。
透明大页管理是在应用程序运行时动态分配大页。
当应用程序需要使用大页时,操作系统会检查当前可用的内存情况,并决定是否分配大页。
这种方式可以更加灵活地管理大页,但也可能会导致一些性能问题,因为动态分配大页需要一定的时间和系统资源。
总的来说,标准大页管理适用于需要稳定性和可预测性的场景,而透明大页管理适用于需要灵活性和动态性的场景。
在实际应用中,需要根据具体的需求来选择合适的大页管理方式。
在某些情况下,THP 可能会导致性能下降或应用程序出现问题。
MongoDB 官方文档明确建议禁用 THP,因为 THP 可能会导致 MongoDB 的性能问题或稳定性问题。
如何通过修改内核参数来实现禁用 THP?
# cat /sys/kernel/mm/transparent_hugepage/enabled
# cat /sys/kernel/mm/transparent_hugepage/defrag
-
always
表示 THP 已启用,并且内核将尝试合并所有可合并的页面。 -
madvise
表示内核将根据进程的 mmap() 调用来确定是否使用 THP。 -
never
表示 THP 未启用,并且内核将不会尝试合并页面。
如果输出结果为[always]表示透明大页启用了,[never]表示透明大页禁用、[madvise]表示内核将根据进程的 mmap() 调用来确定是否使用 THP。
# echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
# echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
# vi /etc/rc.local
echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
为什么THP 可能会导致 MongoDB 的性能问题或稳定性问题?
THP 可能会导致 MongoDB 的性能问题或稳定性问题,原因如下:
-
内存分配问题:MongoDB 使用 mmap() 系统调用将数据文件映射到内存中。但是,THP 可能会导致内存分配问题,因为它将大块内存分配为连续的物理页框。这可能会导致 MongoDB 分配不必要的内存,从而导致性能下降或内存不足的问题。
-
内存碎片问题:THP 可能会导致内存碎片问题,因为它会将多个小页面合并成一个大页面。这可能会导致 MongoDB 的内存使用效率降低,从而导致性能下降。
-
内存回收问题:THP 可能会导致内存回收问题,因为它需要更多的内存来存储页面映射表。这可能会导致 MongoDB 的内存回收效率降低,从而导致性能下降或内存泄漏的问题。
因此,为了避免这些问题,MongoDB 官方文档建议禁用 THP。如果您正在使用 MongoDB,建议按照官方文档的建议禁用 THP,以确保 MongoDB 的性能和稳定性。
参考
mongoDB 运行时禁用 Transparent Huge Pages
https://www.cnblogs.com/ctypyb2002/p/9793108.html
Disable Transparent Huge Pages (THP)
https://www.mongodb.com/docs/v3.2/tutorial/transparent-huge-pages/index.html
Linux 透明大页 THP 和标准大页 HP
https://mp.weixin.qq.com/s/9tO0UJC5W3GxKrMS2h3-ZQ
透明大页的玄机
https://richardweiyang-2.gitbook.io/kernel-exploring/00-index/04-thp
Linux 关于透明大页(Transparent Hugepages)的介绍
https://www.modb.pro/db/237852
Linux关于透明大页的使用与禁用介绍
https://cloud.tencent.com/developer/article/1721462
一文看懂Linux 页表、大页与透明大页
https://zhuanlan.zhihu.com/p/545341899
Transparent Huge Pages
https://www.cnblogs.com/abclife/p/5257877.html
Linux 关于Transparent Hugepages的介绍
https://www.cnblogs.com/kerrycode/p/4670931.html
网友评论