Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ソースコードから理解するPreloadとJITの話/preload_and_jit

 ソースコードから理解するPreloadとJITの話/preload_and_jit

preloadとJITの話をなるべくわかり易く、それでいて深く書いてみました。

Ryo Tomidokoro

December 12, 2020
Tweet

More Decks by Ryo Tomidokoro

Other Decks in Programming

Transcript

  1. @hanhan1978 • 富所 亮 • 職業 ◦ Webアプリケーションエンジニア ◦ 雑用係

    • ブログ ◦ https://blog.hanhans.net • Yokohama North AM ◦ https://anchor.fm/yokohama-north-am
  2. 歴代の中間コードキャッシュ XCache 〜PHP5.6 eAccelarator 〜PHP5.6 Alternative PHP Cache (APC) PHP5.4

    Zend Opcache PHP5.5〜 ※これらのツールを同居させると ShareMemory戦国時代になりSegFault
  3. Zend/zend_execute_API.c - L1419 zend_fetch_class_by_name が未解決のクラス名に対して コールされる - zend_hash_findでコンパイル済みのクラスが発見されれば、それを 使う(preload) -

    それ以外は、autoloaderを使ってクラスの解決が行われて、ファイル が見つかればコンパイルされる ※要するにpreloadされるとautoloaderまで処理がいかずに解決できる
  4. Laravelの30秒ベンチマーク OPCache − ◯ ◯ Preload − − ◯ Req

    / Sec 111.55 680.42 774.14 ※preload有効化によって、処理速度は約 14%向上
  5. Laravelの30秒ベンチマーク OPCache − ◯ ◯ Preload − − ◯ Req

    / Sec 111.55 680.42 774.14 Req / Sec (JIT) − 696.57 812.93 ※JIT有効化によって、処理速度は約 2.5〜5%向上
  6. 円周率計算のベンチマーク OPCache − ◯ Sec 9.74 8.96 Sec (JIT) −

    5.20 ※JIT有効化によって、処理速度は約 42%向上 100,000,000回試行の処理時間