说明:

标准大页(HugePages)

标准大页(HugePages)是从 Linux Kernel 2.6 后被引入的。

目的是用更大的内存页面(memory page size)以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。

透明大页(Transparent HugePages)

透明大页(Transparent Huge Pages)缩写为THP,透明超大页面(THP)在RHEL 6中默认情况下对所有应用程序都是启用的。

内核试图尽可能分配巨大的页面,主内核地址空间本身被映射为巨大的页面,减少了内核代码的TLB压力。

内核将始终尝试使用大页来满足内存分配。

如果没有可用的巨大页面(例如由于物理连续内存不可用),内核将回退到正常的4KB页面。

THP也是可交换的(不像hugetlbfs)。

这是通过将大页面分成更小的4KB页面来实现的,然后这些页面被正常地换出。

透明大页存在的问题:

Oracle Linux team在测试的过程中发现,如果linux开启透明大页THP,则I/O读写性能降低30%;

如果关闭透明大页THP,I/O读写性能则恢复正常。

另,建议在Oracle Database中不要使用THP。

ORACLE官方不建议在使用RedHat 6, OEL 6, SLES 11 and UEK2 kernels 时开启透明大页(THP),因为透明大页存在一些问题:

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

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

标准大页和透明大页区别:

两者区别在于大页的分配机制,标准大页管理是预分配 方式,而透明大页管理则是动态分配 方式。

目前透明大页与传统大页混合使用会出现一些问题,导致性能问题和系统重启。

如何开启标准大页(HugePages)

适用于:

1.Kernel Version 2.6及更高。

2.Oracle AMM内存管理和HugePages不兼容,确保在AMM关闭的情况下启动HugePages。

启用HugePages方法:

1 运行以下命令以确定内核是否支持HugePages

$ grep Huge /proc/meminfo

2 配置memlock

在/etc/security/limits.conf文件中设置memlock值,memlock设置以KB为单位。

当启用HugePages内存时,最大锁定内存限制应至少设置为当前服务器内存的90%。

禁用HugePages内存时,最大锁定内存限制应设置为至少3145728 KB(3 GB)。

例如,如果安装了64 GB RAM,则添加以下条目以增加最大锁定内存地址空间:

*   soft   memlock    60397977

*   hard   memlock    60397977

也可以将memlock值设置为高于SGA要求的值。

再次以oracle用户身份登录并运行ulimit-l命令以验证新的memlock设置:

su - oracle

$ ulimit -l

3 启动实例

检查实例是启动状态

srvctl status instance -d dbname

如果没启动,手动启动实例

srvctl start instance -d dbname -i instance_name -o open

4 使用脚本为当前共享内存段计算hugepages配置的建议值:

root用户下执行

chmod +x hugepages_settings.sh

./hugepages_settings.sh

脚本来自My Oracle Support note 401749.1,脚本详细内容见末尾。

5 停止数据库实例

srvctl stop instance -d dbname -i instance_name -o immediate

6 设置vm.nr_hugepages内核参数

写入配置文件,永久生效

vi /etc/sysctl.conf

vm.nr_hugepages=<value from above>

sysctl -p

# sysctl -w vm.nr_hugepages=<value from above> 临时改变,重启失效

7 启动实例

srvctl start instance -d dbname -i instance_name -o open

8 检查可用的hugepages

$ grep Huge /proc/meminfo

如果配置没生效,需要重启服务器

[root@rac1 ~]# grep Huge /proc/meminfo

AnonHugePages:         0 kB

HugePages_Total:     179

HugePages_Free:        9

HugePages_Rsvd:        7

HugePages_Surp:        0

Hugepagesize:       2048 kB

参考:

1

2

3

My Oracle Support note 401749.1 

My Oracle Support note 361323.1

Database Administrator's Reference for Linux and UNIX System-Based Operating Systems

如何关闭透明大页(Transparent HugePages)

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

[root@DB ~]# cat /etc/redhat-release

Red Hat Enterprise Linux Server release 7.2 (Maipo)

关闭THP

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

[always] madvise never

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

THP 禁用方的几种方法

方法 1:

[root@DB ~]# vi /etc/default/grub

GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/swap rd.lvm.lv=rhel/root rhgb quiet transparent_hugepage=never"

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

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

方法 2:

1

2

3

4

5

[root@DB ~]#vi /etc/rc.local

if test -f /sys/kernel/mm/transparent_hugepage/enabledthen echo never > /sys/kernel/mm/transparent_hugepage/enabled

fi

if test -f /sys/kernel/mm/transparent_hugepage/defragthen echo never > /sys/kernel/mm/transparent_hugepage/defrag

fi

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

always madvise [never]

方法 3:

[root@DB ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled

[root@DB ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

always madvise [never]

查看是否关闭透明大页

[root@DB ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

always madvise [never]

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

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

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

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

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

hugepages_settings.sh 脚本内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

#!/bin/bash

#

# hugepages_settings.sh

#

# Linux bash script to compute values for the

# recommended HugePages/HugeTLB configuration

# on Oracle Linux

#

# Note: This script does calculation for all shared memory

# segments available when the script is run, no matter it

# is an Oracle RDBMS shared memory segment or not.

#

# This script is provided by Doc ID 401749.1 from My Oracle Support

# Welcome text

echo "

This script is provided by Doc ID 401749.1 from My Oracle Support

() where it is intended to compute values for

the recommended HugePages/HugeTLB configuration for the current shared

memory segments on Oracle Linux. Before proceeding with the execution please note following:

 * For ASM instance, it needs to configure ASMM instead of AMM.

 * The 'pga_aggregate_target' is outside the SGA and

   you should accommodate this while calculating the overall size.

 * In case you changes the DB SGA size,

   as the new SGA will not fit in the previous HugePages configuration,

   it had better disable the whole HugePages,

   start the DB with new SGA size and run the script again.

And make sure that:

 * Oracle Database instance(s) are up and running

 * Oracle Database 11g Automatic Memory Management (AMM) is not setup

   (See Doc ID 749851.1)

 * The shared memory segments can be listed by command:

     # ipcs -m

Press Enter to proceed..."

read

# Check for the kernel version

KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`

# Find out the HugePage size

HPG_SZ=`grep Hugepagesize /proc/meminfo awk '{print $2}'`

if [ -z "$HPG_SZ" ];then

    echo "The hugepages may not be supported in the system where the script is being executed."

    exit 1

fi

# Initialize the counter

NUM_PG=0

# Cumulative number of pages required to handle the running shared memory segments

for SEG_BYTES in `ipcs -m | cut -c44-300 | awk '{print $1}' grep "[0-9][0-9]*"`

do

    MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" bc -q`

    if [ $MIN_PG -gt 0 ]; then

        NUM_PG=`echo "$NUM_PG+$MIN_PG+1" bc -q`

    fi

done

RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" bc -q`

# An SGA less than 100MB does not make sense

# Bail out if that is the case

if [ $RES_BYTES -lt 100000000 ]; then

    echo "***********"

    echo "** ERROR **"

    echo "***********"

    echo "Sorry! There are not enough total of shared memory segments allocated for

HugePages configuration. HugePages can only be used for shared memory segments

that you can list by command:

    # ipcs -m

of a size that can match an Oracle Database SGA. Please make sure that:

 * Oracle Database instance is up and running

 * Oracle Database 11g Automatic Memory Management (AMM) is not configured"

    exit 1

fi

# Finish with results

case $KERN in

    '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" bc -q`;

           echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;

    '2.6'echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;

    '3.8'echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;

    '3.10'echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;

    '4.1'echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;

    '4.14'echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;

    '5.4'echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;

    *) echo "Kernel version $KERN is not supported by this script (yet). Exiting." ;;

esac

# End

Oracle 标准大页和透明大页相关推荐

  1. 【内存】Linux 页表、大页与透明大页|大页内存

    目录 页表与MMU CPU访问的是什么地址(虚拟地址,物理地址)? MMU如何工作 MMU对内存的保护 多级页表 一. 内存映射与页表 1. 内存映射 2. 页表 4. 页表的简单工作原理 大页 什么 ...

  2. Linux 透明大页 THP 和标准大页 HP

    作者 | JiekeXu 来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT) 大家好,我是JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Linux 透明大页 TH ...

  3. 透明大页相关内核参数_Linux7.4 关闭透明大页

    1 THP 背景知识补充说明 在Linux6.x之后的平台,在安装Oracle数据库的时候都建议关闭透明大页 Linux下的大页分为两种类型:标准大页(Huge Pages)和透明大页(Transpa ...

  4. ubuntu 禁用透明大页_Linux关于透明大页的使用与禁用介绍

    随着计算需求规模的不断增大,应用程序对内存的需求也越来越大.为了实现虚拟内存管理机制,操作系统对内存实行分页管理.自内存"分页机制"提出之始,内存页面的默认大小便被设置为 4096 ...

  5. linux透明大页内存,Linux如何禁用透明大页

    环境: RHEL 6.5 + Oracle 11.2.0.4 RAC 1.确认透明大页是否开启 grep HugePage /proc/meminfo cat /sys/kernel/mm/redha ...

  6. linux 内存管理 Transparent HugePages 透明大页 简介

    1. 介绍 从RedHat6, RedHat7, OL6, OL7 SLES11 and UEK2 kernels开始,透明大页默认是被开启的以便去改善操作系统的内存管理.透明大页与之前版本的传统意义 ...

  7. Linux 关闭透明大页(transparent_hugepage)和 NUMA

    有些情况下需要关闭Linux 服务器的 透明大页和 NUMA,比如安装 Oracle 数据库! 下面介绍如何永久关闭 透明大页 和 NUMA 的命令: Linux 6: 关闭透明大页: cat > ...

  8. 大页内存与透明大页详解

    大页内存 大页内存(HugePages),有时也叫"大内存页"."内存大页"."标准大页".操作系统以内存页为单位管理内存,内存页的大小对系 ...

  9. 透明大页相关内核参数_Oracle关于内存参数及大页设置的相关概念和设置之hugepage概念和配置...

    一.概念: Oracle 数据库和 Linux 内存管理 系统中使用的内存越多,管理该内存所需的资源也就越多.对于 Linux 操作系统,通过 Linux kswapd 进程和页表内存结构(针对系统中 ...

最新文章

  1. 中兴f477v2超级管理员_中兴F650光猫修复
  2. java最基础语句,Java基础:Java语句
  3. Java HttpSessionListener监听器的使用
  4. continue 的用户及实例
  5. 关于string,我今天科普的
  6. C++ 输入一行未知个数的整数
  7. MySQL Replication主从复制环境下修改主库IP
  8. 2013-2018卷积神经网络中十个最重要的概念与创新
  9. vivox6Android版本,vivo x6有几个版本?vivo x6各版本区别对比评测
  10. 解雇IE补丁操作方法
  11. 关于AP没办法获取IP地址故障排查及思路。
  12. 获取Dell,Lenovo电脑的保修期
  13. 服务器pe系统ghost系统安装教程,U盘PE启动安装GHOST系统图文教程
  14. 第六章第三十题(游戏:双骰子赌博)(Game: craps)
  15. JAVA超简单输名字骂人_骂人不带脏字的网名非常有趣
  16. 转特权:NIOS2下的SDHC调试
  17. python字符串分片_Python第六章字符串ppt
  18. shell C语言编程
  19. 97年世界编程大赛一等奖作品
  20. kubernetes(k8s)全面介绍

热门文章

  1. 2021年高考英语卷三成绩查询,2021年全国3卷高考外语卷难不难,今年全国3卷高考外语卷难度系数点评...
  2. vue 封装dialog_自己封装dialog组件
  3. 怎么像编辑提供wb原图_PLoS One:7月1日起,投稿必须提供原始WB图片!
  4. php中td的属性设置,html table表格是什么?table标签中各种属性的使用方法
  5. SpringBoot集成JPA根据实体类自动生成表
  6. 微软在Build 2019大会上发布Fluid Framework协作平台
  7. 11.7 iostat: I/O信息统计
  8. LVS、Nginx 及 HAProxy 工作原理
  9. 2.2 CPU 上下文切换是什么意思?(下)
  10. 分区和分片的区别_MySQL分区与分片的差异