暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Oracle Rac:关闭透明大页的原因及方法

一森咖记 2019-07-23
2729

【前言】


Oracle安装之前的准备工作中,有一项必须的工作是:禁用透明巨页(Disabling Transparent HugePages)


那问题来了:

       为什么要关闭透明大页? 以及怎么进行禁用?


先来看下比较权威的介绍:

https://blogs.oracle.com/linux/performance-issues-with-transparent-huge-pages-thp

划重点:

根据上述文中标红处,简单来说就是Oracle Linux team在测试的过程中发现,如果linux开启透明巨页THP,则I/O读写性能降低30%如果关闭透明巨页THP,I/O读写性能则恢复正常。另,建议在Oracle Database中不要使用THP

 

接下来看下透明巨大页面是个


Linux下的大页分为两种类型:标准大页(Huge Pages)和透明巨页(Transparent Huge Pages)。

1). 标准大页(Huge Pages)是从Linux Kernel 2.6后被引入的。目的是用更大的内存页面(memory page size) 以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。


2). 透明巨页Transparent Huge Pages)缩写为THP透明超大页面(THP)RHEL 6中默认情况下对所有应用程序都是启用的。内核试图尽可能分配巨大的页面,主内核地址空间本身被映射为巨大的页面,减少了内核代码的TLB压力。内核将始终尝试使用巨页来满足内存分配。如果没有可用的巨大页面(例如由于物理连续内存不可用),内核将回退到正常的4KB页面。THP也是可交换的(不像hugetlbfs)。这是通过将大页面分成更小的4KB页面来实现的,然后这些页面被正常地换出。


两者区别在于大页的分配机制,标准大页管理是预分配方式,而透明巨页管理则是动态分配方式。目前透明巨页与传统大页混合使用会出现一些问题,导致性能问题和系统重启。ORACLE官方不建议在使用RedHat 6, OEL 6, SLES 11 and UEK2 kernels 时开启透明巨页(THP),因为透明巨页存在一些问题:

 

1. RAC环境下,透明巨页(THP)会导致异常节点重启和性能问题;

2. 在单机环境中,透明巨页(THP也会导致一些异常的性能问题;


Linux6.x之后的平台,在安装Oracle时都建议关闭透明巨页


默认情况下,Red Hat Enterprise Linux 6,SUSE Linux Enterprise Server 11和Oracle Linux 6与早期版本的Oracle Linux Unbreakable Enterprise Kernel 2(UEK2)内核一起启用透明HugePages内存。在Oracle Linux UEK2内核的更高版本中禁用透明HugePages内存,Transparent HugePages可能导致运行时内存分配延迟。


为避免性能问题,Oracle建议您在所有Oracle数据库服务器上禁用透明超大页面。Oracle建议您使用标准的HugePages来提高性能.Transparent HugePages内存与标准HugePages内存不同,因为内核khugepaged线程在运行时动态分配内存。标准HugePages内存在启动时预先分配,并且在运行时不会更改。


下一个问题:

    如何关闭透明巨页(THP)?


Linux7 默认情况下 是开启透明巨页功能的。检查系统对应版本

    [root@ethanDB ~]# cat etc/redhat-release
    Red Hat Enterprise Linux Server release 7.2 (Maipo)


    Disabling Transparent HugePages

      [root@ethanDB ~]# cat sys/kernel/mm/transparent_hugepage/enabled
      [always] madvise never

       

      默认情况下,状态为always,需要调整为never

       

      THP禁用方的几种方法

       

      方法1:

        [root@ethanDB ~]# vi etc/default/grub
        GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/swap rd.lvm.lv=rhel/root rhgb quiet transparent_hugepage=never"


        运行下列命令使之修改生效:

          [root@ethanDB ~]# grub2-mkconfig -o boot/grub2/grub.cfg

          方法2:

          上面的方法重启之后好像并没生效,可用以下方法:

          或:Add the following lines in etc/rc.local and reboot the server:

           

            [root@ethanDB ~]#vi etc/rc.local
            if test -f sys/kernel/mm/transparent_hugepage/enabled; then
            echo never > sys/kernel/mm/transparent_hugepage/enabled
            fi
            if test -f sys/kernel/mm/transparent_hugepage/defrag; then
            echo never > sys/kernel/mm/transparent_hugepage/defrag
            fi

            [root@ethanDB ~]# cat /sys/kernel/mm/transparent_hugepage/enabled

              always madvise [never]


              方法3:


                [root@ethanDB ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
                [root@ethanDB ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
                always madvise [never]


                查看是否关闭透明巨页

                  [root@ethanDB ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
                  always madvise [never]

                  如果输出结果为[always]表示透明巨页启用了。[never]表示透明巨页禁用;

                   

                  [root@ethanDB ~]# grep -i HugePages_Total /proc/meminfo

                  如果HugePages_Total,返回0,也意味着透明巨页禁用了


                    [root@ethanDB ~]# cat /proc/sys/vm/nr_hugepages

                    返回0也意味着透明巨页禁用了。


                    【结语】

                    1. 本文讲述了Oracle Transparent HugePages的原因和方法;

                    2. RedHat 6OEL 6SLES 11UEK2内核开始,系统缺省会启用 Transparent HugePages,用来提高内存管理的性能透明巨页(Transparent HugePages )和之前版本中的大页功能上类似。主要的区别是:Transparent HugePages 可以实时配置,不需要重启才能生效配置;

                    3. 透明HugePages类似于以前Linux版本中可用的HugePages主要区别在于透明HugePages是在运行时由内核中的khugepaged线程动态设置,常规的HugePages必须在启动时预先分配。

                    4. 透明超大页面已知会导致意外的节点重新启动并导致RAC出现性能问题,因此Oracle强烈建议禁用透明超大页面。即使在单实例数据库环境中,也会出现意外的性能问题或延迟。


                    【参考】

                    https://www.2cto.com/database/201804/735762.html

                    【参考】

                    https://access.redhat.com/solutions/422283

                    【参考】

                    https://blogs.oracle.com/linux/performance-issues-with-transparent-huge-pages-thp

                    【参考】

                    https://blog.51cto.com/8026776/2074544

                     

                    如果大家觉得此文有帮助,欢迎关注个人微信公众号;

                    长按识别二维码或公众号搜索“一森咖记”

                     


                    最后修改时间:2020-04-02 12:36:43
                    文章转载自一森咖记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论