美文网首页mongodb
【mongoDB】为什么 mongoDB运行时禁用 Transp

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

作者: Bogon | 来源:发表于2023-05-17 00:01 被阅读0次

    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 的性能问题或稳定性问题,原因如下:

    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

    相关文章

      网友评论

        本文标题:【mongoDB】为什么 mongoDB运行时禁用 Transp

        本文链接:https://www.haomeiwen.com/subject/mylbsdtx.html