ホームページ  >  記事  >  バックエンド開発  >  PHP7 を高速化するための Hugepage の使用状況分析、php7hugepage_PHP チュートリアル

PHP7 を高速化するための Hugepage の使用状況分析、php7hugepage_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:51:00920ブラウズ

PHP7 を高速化するための Hugepage の使用法の分析、php7hugepage

この記事では、PHP7 を高速化するための Hugepage の使用法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

PHP7 は、いくつかのバグ修正と最新のパフォーマンス改善 (ニュース) の 1 つである「HugePageFy PHP TEXT セグメント」を含む RC4 をリリースしました。この機能を有効にすることで、PHP7 は「独自の TEXT セグメント (実行本体) を移動」します。 「Huagepage に関して言えば、以前のテストでは、WordPress で 2% ~ 3% の QPS 改善が確実に確認できました。

Hugepage とは何かというと、簡単に言うと、デフォルトのメモリは 4KB 単位でページングされており、仮想アドレスとメモリアドレスを変換する必要があり、この変換にはテーブル検索処理を高速化するためにテーブル検索が必要です。 CPU には TLB (Translation Lookaside Buffer) が組み込まれており、仮想ページが小さいほどテーブル内のエントリ数が多くなり、エントリが多いほど TLB サイズが制限されることは明らかです。 TLB のキャッシュミスが発生するので、有効にすることができれば、ラージメモリページは間接的にこの TLB キャッシュミスを減らすことができます。詳しい紹介については、Google でいろいろ調べたので割愛します。ここでは有効にする方法を中心に説明します。この新機能により、パフォーマンスが大幅に向上します。

メモリ情報を確認すると、開発仮想マシン (Ubuntu Server 14.04、カーネル 3.13.0-45) を例にすると、新しいカーネルで Hugepage を有効にすることが非常に簡単になりました。 リーリー

Hugepage のサイズは 2MB で、HugePages は現在有効になっていないことがわかります。まず PHP RC4 をコンパイルしましょう。 –disable-huge-code-pages を追加しないでください (この新しい機能はデフォルトで有効になっています)。 、これを追加します 閉店しています)

次に、opcache を設定します。PHP5.5 以降、Opcache はデフォルトでコンパイルが有効になっていますが、動的ライブラリのコンパイルに使用されるため、php.ini で設定してロードする必要があります。

リーリー

この新機能は Opcache に実装されているため、この機能は Opcache (opcache.huge_code_pages=1 を設定することにより) を通じて有効にする必要があります。特定の設定:

リーリー

次に、OS を設定して、いくつかの Hugepage を割り当てましょう:

リーリー

ここでもう一度メモリ情報を確認してみましょう:

リーリー

割り当てた 128 個の Hugepage の準備ができていることがわかり、php-fpm を開始します。 リーリー

ここで、メモリ情報をもう一度確認してください:

リーリー

そういえば、Hugepages が利用可能な場合、Opcache は実際に Hugepages を使用してオペコード キャッシュを保存します。そのため、opcache.huge_code_pages が実際に効果的であることを確認するには、opcache.huge_code_pages を閉じて、再度起動して確認することもできます。メモリ情報:

リーリー huge_code_pages をオンにすると、fpm の開始後にさらに 4 ページが使用されることがわかります。次に、php-fpm のテキスト サイズを確認してみましょう。 リーリー

テキストセグメントのサイズは 10114565 バイトで、アライメントを考慮すると (2M ページ未満の末尾部分は移動されません)、合計約 4.8 ページを占める必要があることがわかります。ページが申請されており、これは私たちが見たものと一致しています。

設定が成功したことを示します。楽しむ!

しかし、最初に言っておきますが、

この機能を有効にした後、Perf レポート/anno を通じてプロファイリングしようとすると、シンボルが失われることがわかります (valgrind、gdb は影響を受けません)。その理由は、Perf が mmap を使用してアドレス範囲を記録し、IP をシンボルに変換するように設計されているためです。ただし、HugeTLB は現在 MAP_ANON のみをサポートしているため、Perf はアドレスのこの部分にはシンボル情報がないと考えています。カーネルの将来のバージョンでこの制限が修正されることを願っています...

最後に: パフォーマンス比較テストのタスクは、皆さんに試していただき、変更点についてコメントしてください。

この記事がphpプログラミング設計に携わるすべての人に役立つことを願っています。

http://www.bkjia.com/PHPjc/1133041.html

www.bkjia.com

本当http://www.bkjia.com/PHPjc/1133041.html技術記事 PHP7 を高速化するための Hugepage の使用法の分析、php7hugepage この記事では、PHP7 を高速化するための Hugepage の使用法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです: PHP7 がリリースされたばかりです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。