随着计算需求规模的不断增大,应用程序对内存的需求也越来越大。为了实现虚拟内存管理机制,操作系统对内存实行分页管理。自内存“分页机制”提出之始,内存页面的默认大小便被设置为 4096 字节(4KB),虽然原则上内存页面大小是可配置的,但绝大多数的操作系统实现中仍然采用默认的 4KB 页面。 4KB 大小的页面在“分页机制”提出的时候是合理的,因为当时的内存大小不过几十兆字节,然而当物理内存容量增长到几 G 甚至几十 G 的时候,操作系统仍然以 4KB 大小为页面的基本单位,是否依然合理呢?

在 Linux 操作系统上运行内存需求量较大的应用程序时,由于其采用的默认页面大小为 4KB,因而将会产生较多 TLB Miss 和缺页中断,从而大大影响应用程序的性能。当操作系统以 2MB 甚至更大作为分页的单位时,将会大大减少 TLB Miss 和缺页中断的数量,显著提高应用程序的性能。这也正是 Linux 内核引入大页面支持的直接原因。好处是很明显的,假设应用程序需要 2MB 的内存,如果操作系统以 4KB 作为分页的单位,则需要 512 个页面,进而在 TLB 中需要 512 个表项,同时也需要 512 个页表项,操作系统需要经历至少 512 次 TLB Miss 和 512 次缺页中断才能将 2MB 应用程序空间全部映射到物理内存;然而,当操作系统采用 2MB 作为分页的基本单位时,只需要一次 TLB Miss 和一次缺页中断,就可以为 2MB 的应用程序空间建立虚实映射,并在运行过程中无需再经历 TLB Miss 和缺页中断(假设未发生 TLB 项替换和 Swap)。

为了能以最小的代价实现大页面支持,Linux 操作系统采用了基于 hugetlbfs 特殊文件系统 2M 字节大页面支持。这种采用特殊文件系统形式支持大页面的方式,使得应用程序可以根据需要灵活地选择虚存页面大小,而不会被强制使用 2MB 大页面。

Redis在Linux中启动时通常会报“WARNING you have Transparent Huge Pages (THP) support enabled in your kernel”的警告信息,意思是:你使用的是透明大页,可能导致redis延迟和内存使用问题。

关于透明大页,我们看看官方的介绍

Transparent Huge Pages (THP) are enabled by default in RHEL 6 for all applications. The kernel attempts to allocate hugepages whenever possible and any Linux process will receive 2MB pages if the mmap region is 2MB naturally aligned. The main kernel address space itself is mapped with hugepages, reducing TLB pressure from kernel code. For general information on Hugepages, see: What are Huge Pages and what are the advantages of using them?

The kernel will always attempt to satisfy a memory allocation using hugepages. If no hugepages are available (due to non availability of physically continuous memory for example) the kernel will fall back to the regular 4KB pages. THP are also swappable (unlike hugetlbfs). This is achieved by breaking the huge page to smaller 4KB pages, which are then swapped out normally.

But to use hugepages effectively, the kernel must find physically continuous areas of memory big enough to satisfy the request, and also properly aligned. For this, a khugepaged kernel thread has been added. This thread will occasionally attempt to substitute smaller pages being used currently with a hugepage allocation, thus maximizing THP usage.

In userland, no modifications to the applications are necessary (hence transparent). But there are ways to optimize its use. For applications that want to use hugepages, use of posix_memalign() can also help ensure that large allocations are aligned to huge page (2MB) boundaries.

Also, THP is only enabled for anonymous memory regions. There are plans to add support for tmpfs and page cache. THP tunables are found in the /sys tree under /sys/kernel/mm/redhat_transparent_hugepage.

查看是否启用透明大页

1:命令cat /sys/kernel/mm/redhat_transparent_hugepage/enabled 该命令适用于Red Hat Enterprise Linux系统

[root@getlnx06 ~]# more /etc/issue

Red Hat Enterprise Linux Server release 6.6 (Santiago)

Kernel \r on an \m

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

[always] madvise never

2:命令cat /sys/kernel/mm/transparent_hugepage/enabled 该命令适用于其它Linux系统

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

always madvise [never]

[root@getlnx06 ~]#

使用命令查看时,如果输出结果为[always]表示透明大页启用了。[never]表示透明大页禁用、[madvise]表示

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

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

HugePages_Total: 0

4:cat /proc/sys/vm/nr_hugepages返回0也意味着透明大页禁用了。

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

0

禁用、启用透明大页功能

方法1:设置/etc/grub.conf文件,在系统启动是禁用。

[root@getlnx06 ~]# vi /etc/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You have a /boot partition. This means that

# all kernel and initrd paths are relative to /boot/, eg.

# root (hd0,0)

# kernel /vmlinuz-version ro root=/dev/mapper/VolGroup--LogVol0-LogVol01

# initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux 6 (2.6.32-504.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/VolGroup--LogVol0-LogVol01 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup-LogVol0/LogVol01 rd_LVM_LV=VolGroup-LogVol0/LogVol00 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-2.6.32-504.el6.x86_64.img

transparent_hugepage=never

方法2:设置/etc/rc.local文件

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

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then

echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

fi

使用上面的配置后必须重启操作系统才能生效,你也可以运行下面命令不用重启操作系统。

[root@getlnx06 ~]# echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

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

always madvise [never]

[root@getlnx06 ~]#

小知识点:

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

2:Transparent Huge Pages在32位的RHEL 6中是不支持的。

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

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

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

ubuntu 禁用透明大页_Linux关于透明大页的使用与禁用介绍相关推荐

  1. ubuntu 禁用透明大页_MySQL InnoDB 透明页压缩(Page Compression)

    MySQL InnoDB支持数据压缩,有两种数据压缩方式,第一种为表压缩,通常也称之为行格式压缩,另外一种是页压缩(Page Compression),又叫做透明页压缩(Transparent Pag ...

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

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

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

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

  4. 学生网页制作源代码下载HTML5+CSS大作业——个人博客(2页)HTML+CSS 本网页作业为一个展示产品类型的网页设计作业作品成品

    HTML5+CSS大作业--个人博客(2页)HTML+CSS 本网页作业为一个展示产品类型的网页设计作业作品成品 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. ...

  5. led透明屏生产厂家_如何实现LED双面透明显示屏,双面LED透明屏

    市面上我们所常见的LED透明屏一般来说都是单面的,只能单面显示画面,而LED双面透明屏可能相对较少.其实LED双面透明屏显示屏无非就是两块LED透明屏的叠加,前后显示画面,可以向LED透明屏一样,拥有 ...

  6. php 网页 透明背景图片,php 处理透明背景的图片时的问题

    PHP图象处理之透明背景的gif和png图片的一些问题 1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况. 解决方法:使用 imagesavealpha ($ ...

  7. stm32 led屏控制卡_如何实现LED双面透明显示屏,双面LED透明屏

    市面上我们所常见的LED透明屏一般来说都是单面的,只能单面显示画面,而LED双面透明屏可能相对较少.其实LED双面透明屏显示屏无非就是两块LED透明屏的叠加,前后显示画面,可以向LED透明屏一样,拥有 ...

  8. 透明效果(六)--透明测试

    [本系列文章系学习 唐福幸<Unity ShaderLab 新手宝典>的笔记,包含个人理解,如有错误欢迎批评指出 透明效果 7.4 透明测试 7.4.1透明测试 7.2抗锯齿 一句话总结: ...

  9. led透明屏生产厂家_LED透明屏与LED玻璃屏有何区别

    LED透明屏与LED玻璃屏两者都具有独特的显示效果因为显示背景是通透的,可以使广告画面给人悬浮在玻璃幕墙上的感觉,具有很好的广告及艺术效果 下面我们来分析下两者的区别 什么是LED透明屏? LED透明 ...

最新文章

  1. JAVA实现查看详情功能_【JavaWeb】111:详情页面的实现
  2. 今日头条成功的核心技术秘诀是什么?深度解密个性化资讯推荐技术 本文作者:AI研习社 2017-07-05 12:24 导语:从“内行”的角度解密个性化资讯推荐技术。 雷锋网按:本文系知名 IT 技术资
  3. 【AC Saber】归并排序
  4. [导入]相片: 23853741.jpg
  5. 【渝粤题库】国家开放大学2021春1400机器人技术及应用题目
  6. windows 停止nginx
  7. jq之无callback,有 alert hide
  8. python-OpenCV图像的基本运算
  9. FlashDevelop专用swc导出插件
  10. mysql 触发器和存储过程组合使用,实现定时触发操作
  11. MOOC 数据结构 第九周 树与二叉树(下)
  12. 军用计算机通用规范测试试验,军用装备环境可靠性试验项目表
  13. 6个强推的思维导图软件
  14. python 报错 TypeError: tuple indices must be integers or slices, not tuple
  15. Java核心技术大会|Java应用开发专场
  16. 丑哥哥工作室官方网站开通啦
  17. JAVA混合执行,Java8默认情况下是混合执行模式
  18. nbu15_NBU常用的命令
  19. 2021.12.28activiti
  20. SecureCRT中文乱码问题的解决

热门文章

  1. ZooKeeper简单使用
  2. GPU上如何优化卷积
  3. 2021年大数据ELK(九):使用VSCode测试分词器
  4. docker desktop使用入门
  5. java.lang.IllegalArgumentException: No view found for id 0x7f07005f (xx) for for fragment xxFragment
  6. Android 购物车图片上面添加数字
  7. ProgreassBar 60秒走完,
  8. Kotlin的几个面试题
  9. 宜家通信- 会员管理 表结构搭建
  10. 如何利用大数据指导市场营销