欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

讓你的PHP7更快之Hugepage用法分析

 更新時(shí)間:2016年05月31日 10:45:12   作者:Laruence  
這篇文章主要介紹了讓你的PHP7更快之Hugepage用法,較為詳細(xì)的分析了php7中Hugepage的功能與具體的設(shè)置技巧,需要的朋友可以參考下

本文實(shí)例講述了讓你的PHP7更快之Hugepage用法。分享給大家供大家參考,具體如下:

PHP7剛剛發(fā)布了RC4, 包含一些bug修復(fù)和一個(gè)我們最新的性能提升成果(NEWS), 那就是”HugePageFy PHP TEXT segment”, 通過(guò)啟用這個(gè)特性,PHP7會(huì)把自身的TEXT段(執(zhí)行體)”挪“到Huagepage上,之前的測(cè)試,我們能穩(wěn)定的在Wordpress上看到2%~3%的QPS提升。

關(guān)于Hugepage是啥,簡(jiǎn)單的說(shuō)下就是默認(rèn)的內(nèi)存是以4KB分頁(yè)的,而虛擬地址和內(nèi)存地址是需要轉(zhuǎn)換的, 而這個(gè)轉(zhuǎn)換是要查表的,CPU為了加速這個(gè)查表過(guò)程都會(huì)內(nèi)建TLB(Translation Lookaside Buffer), 顯而易見(jiàn)如果虛擬頁(yè)越小,表里的條目數(shù)也就越多,而TLB大小是有限的,條目數(shù)越多TLB的Cache Miss也就會(huì)越高, 所以如果我們能啟用大內(nèi)存頁(yè)就能間接降低這個(gè)TLB Cache Miss,至于詳細(xì)的介紹,Google一搜一大堆我就不贅述了,這里主要說(shuō)明下如何啟用這個(gè)新特性, 從而帶來(lái)明顯的性能提升。

新的Kernel啟用Hugepage已經(jīng)變得非常容易了,以我的開(kāi)發(fā)虛擬機(jī)為例(Ubuntu Server 14.04,Kernel 3.13.0-45), 如果我們查看內(nèi)存信息:

$ cat /proc/meminfo | grep Huge
AnonHugePages:  444416 kB
HugePages_Total:    0
HugePages_Free:    0
HugePages_Rsvd:    0
HugePages_Surp:    0
Hugepagesize:    2048 kB

可見(jiàn)一個(gè)Hugepage的size是2MB, 而當(dāng)前并沒(méi)有啟用HugePages. 現(xiàn)在讓我們先編譯PHP RC4, 記得一定不要加: –disable-huge-code-pages (這個(gè)新特性是默認(rèn)啟用的, 你加了這個(gè)就關(guān)了)

然后配置opcache, 從PHP5.5開(kāi)始Opcache已經(jīng)是默認(rèn)啟用編譯的,但是是編譯動(dòng)態(tài)庫(kù)的, 所以我們還是要在php.ini中配置加載下。

zend_extension=opcache.so

這個(gè)新特性是做在Opcache里的,所以也要通過(guò)Opcache啟用這個(gè)特性(通過(guò)設(shè)置opcache.huge_code_pages=1), 具體的配置:

opcache.huge_code_pages=1

現(xiàn)在讓我們配置OS, 分配一些Hugepages:

$ sudo sysctl vm.nr_hugepages=128
vm.nr_hugepages = 128

現(xiàn)在讓我們?cè)俅螜z查內(nèi)存信息:

$ cat /proc/meminfo | grep Huge
AnonHugePages:  444416 kB
HugePages_Total:   128
HugePages_Free:   128
HugePages_Rsvd:    0
HugePages_Surp:    0
Hugepagesize:    2048 kB

可以看到我們分配的128個(gè)Hugepages已經(jīng)就緒了, 然后我們來(lái)啟動(dòng)php-fpm:

$ /home/huixinchen/local/php7/sbin/php-fpm
[01-Oct-2015 09:33:27] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[01-Oct-2015 09:33:27] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root

現(xiàn)在, 再次檢查內(nèi)存信息:

$ cat /proc/meminfo | grep Huge
AnonHugePages:  411648 kB
HugePages_Total:   128
HugePages_Free:   113
HugePages_Rsvd:    27
HugePages_Surp:    0
Hugepagesize:    2048 kB

說(shuō)到這里,如果Hugepages可用, 其實(shí)Opcache也會(huì)用Hugepages來(lái)存儲(chǔ)opcodes緩存, 所以為了驗(yàn)證opcache.huge_code_pages確實(shí)生效, 我們不妨關(guān)閉opcache.huge_code_pages, 然后再啟動(dòng)一次后看內(nèi)存信息:

$ cat /proc/meminfo | grep Huge
AnonHugePages:  436224 kB
HugePages_Total:   128
HugePages_Free:   117
HugePages_Rsvd:    27
HugePages_Surp:    0
Hugepagesize:    2048 kB

可見(jiàn)開(kāi)啟了huge_code_pages以后, fpm啟動(dòng)后多用了4個(gè)pages, 現(xiàn)在我們檢查下php-fpm的text大?。?/p>

$ size /home/huixinchen/local/php7/sbin/php-fpm
  text    data     bss     dec     hex   filename
10114565   695200   131528   10941293   a6f36d   /home/huixinchen/local/php7/sbin/php-fpm

可見(jiàn)text段有10114565個(gè)字節(jié)大小, 總共需要占用4.8個(gè)左右的2M的pages, 考慮到對(duì)齊以后(尾部不足2M Page部分不挪動(dòng)), 申請(qǐng)4個(gè)pages, 正好和我們看到的相符。

說(shuō)明配置成功! Enjoy !

但是有言在先, 啟用此特性以后, 會(huì)造成一個(gè)問(wèn)題就是你如果嘗試通過(guò)Perf report/anno 去profiling的時(shí)候, 會(huì)發(fā)現(xiàn)符號(hào)丟失(valgrind, gdb不受影響), 這個(gè)主要原因是Perf的設(shè)計(jì)采用監(jiān)聽(tīng)了mmap,然后記錄地址范圍, 做IP到符號(hào)的轉(zhuǎn)換, 但是目前HugeTLB只支持MAP_ANON, 所以導(dǎo)致Perf認(rèn)為這部分地址沒(méi)有符號(hào)信息,希望以后版本的Kernel可以修復(fù)這個(gè)限制吧..

最后: 性能對(duì)比測(cè)試的任務(wù)就留給大家來(lái)試試了, 歡迎評(píng)論你們看到的變化!

希望本文所述對(duì)大家php程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 2017年最新PHP經(jīng)典面試題目匯總(上篇)

    2017年最新PHP經(jīng)典面試題目匯總(上篇)

    這篇文章主要介紹了2017年最新PHP經(jīng)典面試題目匯總(上篇),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • PHP中include與require使用方法區(qū)別詳解

    PHP中include與require使用方法區(qū)別詳解

    這篇文章詳細(xì)介紹了PHP中include與require使用方法的區(qū)別,有需要的朋友可以參考一下
    2013-10-10
  • Zend Framework上傳文件重命名的實(shí)現(xiàn)方法

    Zend Framework上傳文件重命名的實(shí)現(xiàn)方法

    這篇文章主要介紹了Zend Framework上傳文件重命名的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Zend Framework上傳文件重命名的具體操作步驟與配置、檢測(cè)、重命名操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-11-11
  • php針對(duì)cookie操作的隊(duì)列操作類實(shí)例

    php針對(duì)cookie操作的隊(duì)列操作類實(shí)例

    這篇文章主要介紹了php針對(duì)cookie操作的隊(duì)列操作類,以實(shí)例形式分析了設(shè)置cookie的常見(jiàn)方法,以及隊(duì)列操作cookie的方法,最后給出了針對(duì)常見(jiàn)問(wèn)題的總結(jié),需要的朋友可以參考下
    2014-12-12
  • PHP spl_autoload_register實(shí)現(xiàn)自動(dòng)加載研究

    PHP spl_autoload_register實(shí)現(xiàn)自動(dòng)加載研究

    spl_autoload_register()函數(shù)應(yīng)該是主流框架使用最多的也是非常核心的函數(shù)之一,可實(shí)現(xiàn)自動(dòng)注冊(cè)函數(shù)和類,實(shí)現(xiàn)類似__autoload() 函數(shù)功能,簡(jiǎn)化了類的調(diào)用與加載,提高了工作的效率
    2011-12-12
  • php控制反轉(zhuǎn)與依賴注入的實(shí)現(xiàn)介紹

    php控制反轉(zhuǎn)與依賴注入的實(shí)現(xiàn)介紹

    IOC-Inversion of Control,即控制反轉(zhuǎn)。它不是什么技術(shù),而是一種設(shè)計(jì)思想。這篇文章主要介紹了php控制反轉(zhuǎn)與依賴注入的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • mysql 中InnoDB和MyISAM的區(qū)別分析小結(jié)

    mysql 中InnoDB和MyISAM的區(qū)別分析小結(jié)

    InnoDB和MyISAM是在使用MySQL最常用的兩個(gè)表類型,各有優(yōu)缺點(diǎn),視具體應(yīng)用而定。基本的差別為:MyISAM類型不支持事務(wù)處理等高級(jí)處理,而InnoDB類型支持。MyISAM類型的表強(qiáng)調(diào)的是性能,其執(zhí)行數(shù)度比InnoDB類型更快,但是不提供事務(wù)支持,而InnoDB提供事務(wù)支持已經(jīng)外部鍵等高級(jí)數(shù)據(jù)庫(kù)功能。
    2008-04-04
  • 如何使用PHP中的字符串函數(shù)

    如何使用PHP中的字符串函數(shù)

    如何使用PHP中的字符串函數(shù)...
    2006-11-11
  • 詳解PHP使用OSS上傳文件

    詳解PHP使用OSS上傳文件

    這篇文章主要介紹了PHP使用OSS上傳文件,對(duì)OSS感興趣的同學(xué),可以參考并且實(shí)驗(yàn)一下
    2021-04-04
  • 利用php獲取服務(wù)器時(shí)間的實(shí)現(xiàn)代碼

    利用php獲取服務(wù)器時(shí)間的實(shí)現(xiàn)代碼

    本篇文章是對(duì)使用php獲取服務(wù)器時(shí)間的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06

最新評(píng)論