mongodb

【mongoDB】为什么 mongoDB运行时禁用 Transp

2023-05-17  本文已影响0人  Bogon

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]表示透明大页启用了,[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 的性能问题或稳定性问题,原因如下:

  1. 内存分配问题:MongoDB 使用 mmap() 系统调用将数据文件映射到内存中。但是,THP 可能会导致内存分配问题,因为它将大块内存分配为连续的物理页框。这可能会导致 MongoDB 分配不必要的内存,从而导致性能下降或内存不足的问题。

  2. 内存碎片问题:THP 可能会导致内存碎片问题,因为它会将多个小页面合并成一个大页面。这可能会导致 MongoDB 的内存使用效率降低,从而导致性能下降。

  3. 内存回收问题: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

上一篇下一篇

猜你喜欢

热点阅读