Linux中使用与禁用透明大页的示例分析

  介绍

这篇文章将为大家详细讲解有关Linux中使用与禁用透明大页的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强>引言

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

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

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

癓inux中使用与禁用透明大页的示例分析"

复述,在Linux中启动时通常会报“<代码>警告你有透明的巨大的页面(THP)支持启用您的内核代码”的警告信息,意思是:你使用的是透明大页,可能导致复述,延迟和内存使用问题。

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

透明的巨大的页面(THP)在RHEL 6对于所有应用程序中默认启用。内核试图尽可能地分配hugepages和任何Linux进程将会收到2 mb页如果mmap地区是2 mb自然对齐。主要的内核地址空间本身与hugepages映射,减少TLB内核代码的压力。对于一般信息> [root@getlnx06  ~] #, more /etc/问题   ,   Red  Hat  Enterprise  Linux  Server  release  6.6,(圣地亚哥)   ,   Kernel  \ r 提醒an  \ m   ,   (root@getlnx06  ~) #, cat /sys/kernel/mm/redhat_transparent_hugepage/启用   ,   (总是),madvise 没有

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

[root@getlnx06  ~] #, cat /sys/kernel/mm/transparent_hugepage/启用   ,   always  madvise (永远)   ,   [root@getlnx06  ~) #

使用命令查看时,如果输出结果为(总是)表示透明大页启用了。(永远)表示透明大页禁用,(madvise)表示

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

[root@getlnx06  ~] #, grep 小姐;HugePages_Total /proc/meminfo    ,   HugePages_Total: 0

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

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

<>强禁用,启用透明大页功能

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

[root@getlnx06  ~] #, vi /etc/grub.conf   #,grub.conf  generated  by 蟒蛇   #   #,Note  that 你do  not  have 用rerun  grub  after  making  changes 用却;能够文件   #,注意:,你have  a /boot 分区只却;能够means    #,,,,,all  kernel 以及initrd  paths 断开连接;relative 用/boot/,如。   #,,,,,root  (hd0, 0)   #,,,,,kernel /vmlinuz-version  ro 根=/dev/mapper/VolGroup——LogVol0-LogVol01   #,,,,,initrd /initrd -通用- version.img   # boot=/dev/sda   默认=0   超时=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 根=/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 安静   ,,,/initramfs - 2.6.32 initrd  504. - el6.x86_64.img   transparent_hugepage=从未

Linux中使用与禁用透明大页的示例分析