centos7 配置hugepage怎么管理

查看: 2524|回复: 45
请问使用HugePage性能提示明显吗?
论坛徽章:5
大内存的linux,比如64G,128G,使用HugePage和不使用对性能提升有多大呢?
现在的库都默认用的AMM,没感觉性能有多大的问题.
看到网上都说用HugePage好处多,有必要改成HugePage吗?
认证徽章论坛徽章:4
没必要,Oracle对巨页支持不好,我们优化先把它关了
论坛徽章:304
没必要,Oracle对巨页支持不好,我们优化先把它关了
你这说法,可遇上案例?
论坛徽章:116
do康解U 发表于
没必要,Oracle对巨页支持不好,我们优化先把它关了
晕…………第一次听说………
认证徽章论坛徽章:4
配置Hugepage需要先仔细阅读MOS上如下文档:
ALERT: Disable Transparent HugePages on SLES11, RHEL6, OL6 and UEK2 Kernels (Doc ID )
HugePages and Oracle Database 11g Automatic Memory Management (AMM) on Linux (Doc ID )
Hugepages Not Used when ASM is used (Doc ID )
ASM & Shared Pool (ORA-4031) (Doc ID )
Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (Doc ID )
HugePages on Oracle Linux 64-bit (Doc ID )
如果用了RedHat 6,则要禁掉Transparent HugePages
认证徽章论坛徽章:8
嗯,linux上用到较大内存,最好用hugepage,但存在一些限制,应该注意。
论坛徽章:5
嗯,linux上用到较大内存,最好用hugepage,但存在一些限制,应该注意。
AMM岂不是废了
到底该如何取舍呢?
AMM改ASMM+hugepage对性能提升的程度使用者能明显感觉到吗??
认证徽章论坛徽章:8
AMM岂不是废了
到底该如何取舍呢?
嗯,用hugepage就别用amm了,是否有性能提升,还得看你们服务器的负载,如果负载不重,配那么大内存也是负担,不如配置小点内存,内存配置不是越大越好。
有的场景会有较大改善,有的不明显,也有更麻烦。
论坛徽章:180
本帖最后由 lfree 于
12:14 编辑
配置Hugepage需要先仔细阅读MOS上如下文档:
ALERT: Disable Transparent HugePages on SLES11, RHEL6, OL ...
》Transparent HugePages
你理解错了,rh不建议用Transparent hugepage,而不是hugepage。
Transparent 表示 透明 的意思。
透明的; 清澈的; 易识破的; 显而易见的;
论坛徽章:180
AMM岂不是废了
到底该如何取舍呢?
AMM对于大用户系统实际上问题多多,特别是你应用不绑定,抖动很厉害,
导致性能问题,我自己就遇到,
这种模式跟趋向于小用户系统。
itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号:10 广播电视节目制作经营许可证:编号(京)字第1149号author:skate
linux的hugepage的配置
linux虽然没有aix,hp unix那么强悍,但linux也是非常优秀的,为了提升linux的性能,它采用了很多
io,memory的调度机制,linux使用内存的方式是采用vm的方式,即linux把物理内存和swap共同虚拟成
内存来对外提供,有时用户看似使用内存,可实际上是使用磁盘,那如何避免使用swap磁盘空间呢?
linux管理内存的单位是页(pages),一般情况下是4k的page,当我们使用的大内存时(&8G),管理这么大的内存
就会给系统造成很大的负担,再加上频繁的pagein/pageout,会成为系统的瓶颈。
<span style="color:#.hugepage介绍
2.实践配置
<span style="color:#.hugepage介绍
hugepage是在linux2.6内核被引入的,主要提供4k的page和比较大的page的选择
当我们访问内存时,首先访问”page table“,然后linux在通过“page table”的
mapping来访问真实物理内存(ram&#43;swap)。为了提升性能,linux在cpu中申请
固定大小的buffer,被称为TLB,TLB中保存有“page table”的部分内容,这也遵循
了,让数据尽可能的靠近cpu原则。在TLB中通过hugetlb来指向hugepage。这些被分配
的hugepage作为内存文件系统hugetlbfs(类&#20284;tmpfs)提供给进程使用。
普通4k page
启用hugepage
hugepage特点
linux系统启动,hugepage就被分配并保留,不会pagein/pageout,除非人为干预,如改变hugepage的配置等;
根据linux内核的版本和HW的架构,hugepage的大小从2M到256M不等。因为采用大page,所以也减少TLB
和page table的管理压力
为什么使用hugepage
对于大内存(&8G),hugepage对于提高在linux上的oracle性能是非常有帮助的
&1)Larger Page Size and Less of Pages:减少了HugeTLB 的工作量
&2)No Page Table Lookups:因为hugepage是不swappable的,所有就没有page table lookups。
&3)No Swapping: 在Linux下,hugepage是不支持swapping
&4)No 'kswapd' Operations:在linux下进程“kswapd”是管理swap的,如果是大内存,那pages的数量就非常大,
&&&&&&&&&&&&&&&&&&&&&&&&&& 那“kswapd”就会被频繁的调用,从而会影响性能。
2.实践配置
A. oracle10g配置
hw:x86_64
os:RHEL5.4
kernel: 2.6.18-164.el5
db:oracle10.2
<span style="color:#). 用root用户配置文件“/etc/security/limits.conf”,添加memlock,他的大小略小于总内存,例如:64GB,配置如下:
[root@skatedb ~]# vi /etc/security/limits.conf
##skate add
*&& soft&& memlock&&&
*&& hard&& memlock&&&
##skate add
<span style="color:#).用oracle重新登录,检查memlock的设置是否生效
[oracle@skatedb ~]$ ulimit -l
<span style="color:#).确定所有的oracle数据库实例都启动,包括asm实例,然后用如下脚本计算参数“vm.nr_hugepages&的大小
------------------hugepages_settings.sh----------------------------
#!/bin/bash
# hugepages_settings.sh
# Linux bash script to compute values for the
# recommended HugePages/HugeTLB configuration
# 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
from My Oracle Support
# Welcome text
This script is provided by Doc ID
from My Oracle Support
() where it is intended to compute values for
the recommended HugePages/HugeTLB configuration for the current shared
memory segments. Before proceeding with the execution please make sure
&* Oracle Database instance(s) are up and running
&* Oracle Database 11g Automatic Memory Management (AMM) is not setup
&& (See Doc ID )
&* The shared memory segments can be listed by command:
&&&& # ipcs -m
Press Enter to proceed...&
# 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}'`
# Initialize the counter
# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | awk '{print $5}' | grep &[0-9][0-9]*&`
&& MIN_PG=`echo &$SEG_BYTES/($HPG_SZ*1024)& | bc -q`
&& if [ $MIN_PG -gt 0 ]; then
&&&&& NUM_PG=`echo &$NUM_PG&#43;$MIN_PG&#43;1& | bc -q`
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
&& 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&
# 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& ;;
&&& *) echo &Unrecognized kernel version $KERN. Exiting.& ;;
-----------------------hugepages_settings.sh-----------------------
也可以手工计算nr_hugepages&=SGA_Target/Hugepagesize
然后把nr_hugepages追加写入文件“/etc/sysctl.conf”,假如这里计算的nr_hugepages=15000
[root@skatedb ~]# vi /etc/sysctl.conf
##skate add
vm.nr_hugepages=15000
##skate add
使其修改生效
[root@skatedb ~]# sysctl -p
<span style="color:#).停止oracle数据库,reboot服务器
<span style="color:#).检查hugepage是否生效
[root@skatedb ~]# grep HugePages /proc/meminfo
HugePages_Total: 15000
HugePages_Free:&& 4779
HugePages_Rsvd:&& 4676
如果HugePages_Total=HugePages_Free,说明HugePages配置没起作用。
B. oracle11g配置
hw:x86_64
os:RHEL5 (Taroon)
kernel: 2.6.18-194.el5
db:oracle 11.2.0.2.0
oracle11g的新特性是通过启用参数MEMORY_TARGET/MEMORY_MAX_TARGET,启用AMM的
oracle11g的所有SGA内存的分配方式都是通过在/dev/shm下创建文件,而已这种方
式分配的sga是不启用hugepage的,AMM和hugepage是不兼容的,因为/dev/shm是tmpfs
文件系统,而tmpfs文件系统是不支持AMM动态调整sga大小的,所以要想使用hugepage
的特性就要关闭AMM特性。两个如何取舍就看你了。
停止oracle11g的AMM
直接把MEMORY_MAX_TARGET和MEMORY_TARGET设置为‘0’,就抱如下的错误
ORA-00843: Parameter not taking MEMORY_MAX_TARGET into account
ORA-00849: SGA_TARGET
cannot be set to more than MEMORY_MAX_TARGET 0.
ORA-01078: failure in processing system parameters
如果只设置MEMORY_TARGET=0,hugepage是不起作用的。所以采用不设置这两个参数,
就可以关闭oracle11g的AMM了。创建pfile.ora文件,然后在文件里删除两个参数
&MEMORY_TARGET/MEMORY_MAX_TARGET&。就是因为这个关闭AMM的地方测试了半天,
停止了oracle11g的AMM后,在按着oracle10g的配置方法就可以启动hugepage了。
参考文档:
oracle:ID ,ID
------end------
本文已收录于以下专栏:
相关文章推荐
HugePages on Linux
&#160;&#160;HugePages是linux内核的一个特性,使用hugepage可以用更大的内存页来取代传统的4K页面。使用HugePage主要带来如下好处
&#160;&#160; 1,...
******************************************************************
今天遇到一个系统问题,系统内存不足,但是用VMSTAT 那些命令...
HugePage,就是指的大页内存管理方式。与传统的4kb的普通页管理方式相比,HugePage为管理大内存(8GB以上)更为高效。本文描述了什么是HugePage,以及HugePage的一些特性。&#160;...
好多地方都提示关闭这个,MongoDB 3.0提示T09:03:24.256+0800 I CONTROL
[initandlisten] ** WARNING: /sys/ke...
游标,映射在结果集中某一行数据的具体位置,类似于C语言中的指针。即通过游标方式定位到结果集中某个特定的行,然后根据业务需求对该行进行相应特定的操作……
查看HugePages情况:
cat /proc/meminfo&#160;
查看挂载情况
&#160;cat /proc/mounts
dpdk hugepage 配置(2.6.39内核为例)
1)内核配置
a、2M hugepage
title&#160;&#160;&#160;device&#160;
root&#160;&#160;&#160;&#160;(hd0,0)
kernel&#160;&#160;/b...
IBM的创始人Thomas J. Watson曾经说: “全世界只需要5台电脑就足够了”。
Microsoft的创始人Bill Gates曾在一次演讲中说:“个人用户的计算机内存只需640K&#160;”...
HugePages是通过使用大页内存来取代传统的4kb内存页面,使得管理虚拟地址数变少,加快了从虚拟地址到物理地址的映射以及通过摒弃内存页面的换入换出以提高内存的整体性能。尤其是对于8GB以上的内存以...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博客访问: 17921
博文数量: 2
博客积分: 72
博客等级: 民兵
技术积分: 30
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
==目标==在linux2.6.38之前,处理大容量内存工作集的高性能关键计算应用是运行在libhugetlbfs之上,必须依赖于hugetlbfs,。透明Hugepage支持是一种替代手段,它使用大内存页,并且虚拟内存页的大小可以动态变化,没有hugetlbfs的缺点。目前只适用于匿名内存映射,但未来可以扩展到tmpfs的papecache层。大内存页的优点:巨大的页面可以通过减少缺页提升性能(一次缺页分配大块的内存),还可以通过减少虚拟地址到物理地址的转换成本(减少转化次数),甚至可以避免地址转换。如果处理器必须转换一个虚拟地址,它必须通过多达四层页表。处理器保持一个“翻译后备缓冲器(TLB)的缓存的转换结果。TLB的容量很小,一般是128条指令转换、32条数据转换。非常容易被填满,从而必须进行大量的地址转换。例如:2m的页大小只需要一个tlb项,而4k的页大小就需要512个tlb项。通过内核地址使用大内存页,可以减少tlb的压力。基于以上原因,使用大内存页的程序会运行的很快。hugetlbfs 缺点:(1)巨页必须在内核启动时刻进行设置,并且需要应用程序显示映射。(2)更倾向于大的专有数据库管理系统==设计==&- “优雅的回退”:不具有透明hugepage的内存管理系统可以会退到不使用透明hugepage,而使用常规页面和各自的规则pmd/pte映射&- ,如果因为内存碎片导致大内存页分配失败,这时系统应该优雅的使用常规页代替,并将其写入到相同的vma中,并且没有任何故障、重大延迟或用户态通知。&- 如果有些任务结束,越来越多的大页面变成可用(无论是立即在伙伴系统或通过虚拟内存),常规页分配的物理内存应该通过khugepaged自动迁往大内存页.&&&- 它并不需要保留内存,只要有可能就会使用大页面。& (唯一可能保留的kernelcore = &避免不可移动的页面片段去分裂所有内存,但这样一个调整不特定于透明hugepage支持,它是一个通用的适用于所有的动态内存高阶分配)&- 这个最初只支持提供匿名内存区,但将来会扩展到tmpfs和pagecache&与hugetlbfs通过将不可用内存用来作为cache或者可移动的(或者甚至无法移动实体)的保留内存方式相比,透明Hugepage可以使空闲内存利最大化。它不需要保留内存,以防止大内存页分配。这对用户态是透明的。大内存页允许分页和所有其他的先进的虚拟技术,并且对用户是透明的,不需要修改应用程序来使用这些技术。应用可以更好的使用这些功能。例如可以避免有优化之前的malloc(4k)的mmap系统洪水。这种优化不是强制的,khugepaged会处理理那些不使用大内存的来处理大量内存的应用程序。在某些情况下,系统范围使用大页面,会导致应用分配更多的内存资源。例如应用程序MMAP了一大块内存,但是只涉及1个字节,在这种情况下,2M页面代替4K页的分配没有任何好处,这就是为什么禁用全系统大页面,而只针对MADV_HUGEPAGE区使用的原因。嵌入式系统仅仅在madvise区域使能大页面分配可以消除浪费内存的任何风险,并且程序运行的更快。== sysfs==透明Hugepage支持可以被完全禁用(多为调试目的)或只启用MADV_HUGEPAGE(以避免消耗更多的内存资源的风险)或启用系统范围。echo always &/sys/kernel/mm/transparent_hugepage/enabledecho madvise &/sys/kernel/mm/transparent_hugepage/enabledecho never &/sys/kernel/mm/transparent_hugepage/enabled它也可以限制在创造大页面的内存碎片整理的影响,他们不是立即对madvise区空闲或从未尝试碎片整理内存而使用规则页面,除非是立即可用。显然,我们使用CPU来碎片整理内存,希望获得的更多的大内存页,而不是普通页面。这并不是保证,但它更可能的情况下分配为MADV_HUGEPAGE区。echo always &/sys/kernel/mm/transparent_hugepage/defragecho madvise &/sys/kernel/mm/transparent_hugepage/defragecho never &/sys/kernel/mm/transparent_hugepage/defragkhugepaged会自动启动时当transparent_hugepage/enabled设置为“always”或“madvise",它会自动关机,如果它被设置为“never”。khugepaged通常在低频运行。echo 0 &/sys/kernel/mm/transparent_hugepage/khugepaged/defragecho 1 &/sys/kernel/mm/transparent_hugepage/khugepaged/defrag你还可以控制khugepaged每次扫描多少页。/sys/kernel/mm/transparent_hugepage/khugepaged/pages_to_scan扫描间隔(毫秒)/sys/kernel/mm/transparent_hugepage/khugepaged/scan_sleep_millisecs当分配大内存失败等待多少毫秒来压制下一个大内存页的分配尝试。/sys/kernel/mm/transparent_hugepage/khugepaged/alloc_sleep_millisecs可以看出,倒塌的内存页数量/sys/kernel/mm/transparent_hugepage/khugepaged/pages_collapsed每次扫描:/sys/kernel/mm/transparent_hugepage/khugepaged/full_scans==引导参数==你可以改变透明Hugepage的默认支持。通过内核命令行参数"transparent_hugepage=always" or"transparent_hugepage=madvise" or "transparent_hugepage=never"。==需要重新启动应用程序==transparent_hugepage/enabled 只影响未来行为。因此,使它们有效,你需要重新启动任何应用程序可以一直使用大页面。这也适用于注册khugepaged的内存区。== get_user_pages和follow_page ==get_user_pages和follow_page在hugepage上运行,将返回像往常一样的头或尾页(正如hugetlbfs所做的)。多数GUP用户只关心实际的物理页面地址和其I/O完成后的释放,所以他们将不会注意到的页面其实是巨页的。但如果驱动程序操作页面结构(如检查起始页、末尾页的page-&mapping或相关的其他位),它应去检查头页。注意:对GUP API没有新的约束,跟hugetlbfs具有相同的约束。所以任何在hugetlbfs中操作GUP的驱动可以在透明hugepage支持映射中运行的很多。如果你不能处理通过follow_page返回的混合页,FOLL_SPLIT位可以被指定为follow_page参数,这样它将会返回之前分离巨页。==优化应用程序==要保证内核立即映射到一个2M的页面在任何内存区域中,在mmap区域必须是hugepage对齐。 posix_memalign()可以提供这种保证。== Hugetlbfs ==您可以使用在配置透明巨页功能的内核中使用hugetlbfs。除了没有整体内存碎片外,其他没有区别。所有属于hugetlbfs的通用功能都保存并且不受影响。 libhugetlbfs也将像以前一样正常工作。==优雅的回退==查询pagetables的时候可以使用split_huge_page_pmd 检查pmd_offset返回的pmd。如果没有查询pagetables并且碰上一个物理hugepage但你不能在你的代码处理它本身,可以使用split_huge_page分离它。==了解hugepage代码的锁定==我们要尽可能知道hugepage代码,使用split_huge_page()或split_huge_page_pmd()有代价的。为了使查询页表时意识到 huge pmd,你需要做的是调用pmd_trans_huge 在pmd_offset返回后。您必须持有mmap_sem(读或写),确保huge pmd不能被khugepaged创建(khugepaged collapse_huge_page在获取mmap_sem和anon_vma lock在写模式下执行)。如果pmd_trans_huge返回false,就走旧代码路径。相反,如果pmd_trans_huge返回true,你必须要获取 page_table_lock和重新执行pmd_trans_huge。page_table_lock将防止将huge pmd转换成常规pmd(split_huge_page可以并行执行检查页表)。如果第二次pmd_trans_huge返回flase,你应该丢弃page_table_lock和执行以前的代码路径。否则你应该执行pmd_trans_splitting。pmd_trans_splitting返回true,这意味着split_huge_page已经在分裂页面中。因此,如果pmd_trans_splitting返回true,丢弃page_table_lock和执行wait_split_huge_page,然后执行旧的代码路径。当wait_split_huge_page返回时候,pmd不再是巨页的。如果pmd_trans_splitting返回false,就可以进行处理hugepmd和hugepage。一旦完成,你可以释放page_table_lock。== compound_lock,get_user_pages和put_page ==在从页结构清除所有PG_head/tai位之前,split_huge_page函数必须从头页到尾页设置refcounts值。对huge pmd映射的refcounts很容易做到。get_page和put_page运行在尾页的时候(仅在尾页),它们必须找到其各自的头页,然后减少头页和尾页的refcount。为了得到可靠的头页和在无竞争状态下减少refcount值,put_page必须串行获取每页锁compound_lock使用__split_huge_page_refcount。compound_lock。
阅读(8880) | 评论(0) | 转发(0) |
上一篇:没有了
相关热门文章
给主人留下些什么吧!~~
请登录后评论。让你的PHP7更快之Hugepage用法分析
作者:Laruence
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了让你的PHP7更快之Hugepage用法,较为详细的分析了php7中Hugepage的功能与具体的设置技巧,需要的朋友可以参考下
本文实例讲述了让你的PHP7更快之Hugepage用法。分享给大家供大家参考,具体如下:
PHP7刚刚发布了RC4, 包含一些bug修复和一个我们最新的性能提升成果(NEWS), 那就是”HugePageFy PHP TEXT segment”, 通过启用这个特性,PHP7会把自身的TEXT段(执行体)”挪“到Huagepage上,之前的测试,我们能稳定的在Wordpress上看到2%~3%的QPS提升。
关于Hugepage是啥,简单的说下就是默认的内存是以4KB分页的,而虚拟地址和内存地址是需要转换的, 而这个转换是要查表的,CPU为了加速这个查表过程都会内建TLB(Translation Lookaside Buffer), 显而易见如果虚拟页越小,表里的条目数也就越多,而TLB大小是有限的,条目数越多TLB的Cache Miss也就会越高, 所以如果我们能启用大内存页就能间接降低这个TLB Cache Miss,至于详细的介绍,Google一搜一大堆我就不赘述了,这里主要说明下如何启用这个新特性, 从而带来明显的性能提升。
新的Kernel启用Hugepage已经变得非常容易了,以我的开发虚拟机为例(Ubuntu Server 14.04,Kernel 3.13.0-45), 如果我们查看内存信息:
$ cat /proc/meminfo | grep Huge
AnonHugePages:
HugePages_Total:
HugePages_Free:
HugePages_Rsvd:
HugePages_Surp:
Hugepagesize:
可见一个Hugepage的size是2MB, 而当前并没有启用HugePages. 现在让我们先编译PHP RC4, 记得一定不要加: –disable-huge-code-pages (这个新特性是默认启用的, 你加了这个就关了)
然后配置opcache, 从PHP5.5开始Opcache已经是默认启用编译的,但是是编译动态库的, 所以我们还是要在php.ini中配置加载下。
zend_extension=opcache.so
这个新特性是做在Opcache里的,所以也要通过Opcache启用这个特性(通过设置opcache.huge_code_pages=1), 具体的配置:
opcache.huge_code_pages=1
现在让我们配置OS, 分配一些Hugepages:
$ sudo sysctl vm.nr_hugepages=128
vm.nr_hugepages = 128
现在让我们再次检查内存信息:
$ cat /proc/meminfo | grep Huge
AnonHugePages:
HugePages_Total:
HugePages_Free:
HugePages_Rsvd:
HugePages_Surp:
Hugepagesize:
可以看到我们分配的128个Hugepages已经就绪了, 然后我们来启动php-fpm:
$ /home/huixinchen/local/php7/sbin/php-fpm
[01-Oct-:27] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[01-Oct-:27] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
现在, 再次检查内存信息:
$ cat /proc/meminfo | grep Huge
AnonHugePages:
HugePages_Total:
HugePages_Free:
HugePages_Rsvd:
HugePages_Surp:
Hugepagesize:
说到这里,如果Hugepages可用, 其实Opcache也会用Hugepages来存储opcodes缓存, 所以为了验证opcache.huge_code_pages确实生效, 我们不妨关闭opcache.huge_code_pages, 然后再启动一次后看内存信息:
$ cat /proc/meminfo | grep Huge
AnonHugePages:
HugePages_Total:
HugePages_Free:
HugePages_Rsvd:
HugePages_Surp:
Hugepagesize:
可见开启了huge_code_pages以后, fpm启动后多用了4个pages, 现在我们检查下php-fpm的text大小:
$ size /home/huixinchen/local/php7/sbin/php-fpm
/home/huixinchen/local/php7/sbin/php-fpm
可见text段有个字节大小, 总共需要占用4.8个左右的2M的pages, 考虑到对齐以后(尾部不足2M Page部分不挪动), 申请4个pages, 正好和我们看到的相符。
说明配置成功! Enjoy !
但是有言在先, 启用此特性以后, 会造成一个问题就是你如果尝试通过Perf report/anno 去profiling的时候, 会发现符号丢失(valgrind, gdb不受影响), 这个主要原因是Perf的设计采用监听了mmap,然后记录地址范围, 做IP到符号的转换, 但是目前HugeTLB只支持MAP_ANON, 所以导致Perf认为这部分地址没有符号信息,希望以后版本的Kernel可以修复这个限制吧..
最后: 性能对比测试的任务就留给大家来试试了, 欢迎评论你们看到的变化!
希望本文所述对大家php程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 centos7 配置hugepage 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信