这篇文章将为大家详细讲解有关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大页面。
复述,在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: 04:猫/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中使用与禁用透明大页的示例分析