SlideShare a Scribd company logo
1 of 40
Download to read offline
Reading implementation of OPcache’s file-based cache
OPcacheの新機能

ファイルベースキャッシュ
の内部実装を読んでみた
第六回闇PHP勉強会(2015/11/22)

発表資料
自己紹介
❖ @hnw
❖ 所属:KLab株式会社
❖ カレーとバグが大好物
❖ 最近PHP7のプレゼンばかりしています
アジェンダ
❖ ファイルベースキャッシュの紹介
❖ キャッシュファイルを覗いてみる
❖ わきあがる疑問点
❖ まとめ
❖ ファイルベースキャッシュの紹介
❖ キャッシュファイルを覗いてみる
❖ わきあがる疑問点
❖ まとめ
OPcacheのおさらい
❖ OPcacheなしのPHP
Parser
Lexer
OpcodeCompiler
ZendVM
PHP
token
AST
opcode
OPcacheのおさらい
❖ OPcache拡張モジュールを使った場合
❖ キャッシュヒットすると前段の処理を省略できる
Parser
Lexer
OpcodeCompiler
ZendVM
Optimizer
PHP
token
AST
opcode
opcode
OpcodeCache
opcode
ファイルベースキャッシュ
❖ OPcacheの新機能
❖ PHP 7.0.0 alpha 1で実装
❖ まだexperimental扱い
❖ PHPのコンパイル結果をファイルにキャッシュする
❖ 従来は共有メモリにキャッシュしていた
ファイルベースキャッシュ
❖ ファイルベースキャッシュを有効にしたOPcache
Parser
Lexer
OpcodeCompiler
ZendVM
Optimizer
PHP
token
AST
opcode
opcode
FileCacheSHMCache
ファイルベースキャッシュの利点
❖ 共有メモリとファイルの両キャッシュを併用する場合
❖ 共有メモリにキャッシュが無いときの速度低下を最
低限に抑える(Webサーバ再起動直後など)
❖ ファイルキャッシュのみ使う場合
❖ コマンドラインやCGIなどでも速度が稼げる
ファイルベースキャッシュの利点
http://talks.php.net/tokyo15#/php7pcache1
❖ ファイルベースキャッシュの紹介
❖ キャッシュファイルを覗いてみる
❖ わきあがる疑問点
❖ まとめ
実際に試してみる
❖ opcache.file_cache!
❖ 未設定: ファイルベースキャッシュ無効(デフォルト)
❖ パスを設定: 共有メモリ・ファイル両方有効
opcache.enable=1!
opcache.enable_cli=1!
opcache.file_cache=/var/tmp/php/opcache
キャッシュファイルのパス
❖ /tmp/foo.phpのキャッシュを探してみた
/var/tmp/php/opcache/68359b54ec757c2697b328c10d7d44c2/
tmp/foo.php.bin
❖ フルパス+「.bin」にキャッシュされる
キャッシュファイルのパス
❖ /tmp/foo.phpのキャッシュを探してみた
/var/tmp/php/opcache/68359b54ec757c2697b328c10d7d44c2/
tmp/foo.php.bin
❖ フルパス+「.bin」にキャッシュされる
❖ このハッシュ値は何だ???
パス中のハッシュ値の正体
❖ このハッシュ値を作っているのは

ext/opcache/ZendAccelerator.c の accel_gen_system_id()
❖ PHPバージョン・ZTSが有効か・int型やlong型のサイ
ズなどを含んだ文字列のMD5値
❖ PHPをバージョンアップすると別のパスになる
/var/tmp/php/opcache/68359b54ec757c2697b328c10d7d44c2/

tmp/foo.php.bin
キャッシュファイルの中身(1)
<?php phpinfo();
000000 4f 50 43 41 43 48 45 00 36 38 33 35 39 62 35 34 >OPCACHE.68359b54<!
000010 65 63 37 35 37 63 32 36 39 37 62 33 32 38 63 31 >ec757c2697b328c1<!
000020 30 64 37 64 34 34 63 32 e0 02 00 00 00 00 00 00 >0d7d44c2à.......<!
000030 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > ...............<!
000040 4f 48 50 56 00 00 00 00 12 19 ee 32 01 00 00 00 >OHPV......î2....<!
000050 c0 01 00 00 00 00 00 00 02 00 00 00 00 00 00 08 >À...............<!
……!
000330 01 00 00 00 06 06 00 00 f9 e0 f8 ab b5 d0 00 80 >........ùàø«µÐ..<!
000340 07 00 00 00 00 00 00 00 70 68 70 69 6e 66 6f 00 >........phpinfo.<
phpinfo.php
phpinfo.php.bin
なるほど、
わからん!
キャッシュファイルの中身(2)
❖ 意外とデカいぞ…?

(.php 17bytes → .php.bin 848bytes)
❖ 中身を調べよう!
キャッシュファイルの中身(3)
❖ 内部的なデータ構造をそのまま書き出している
❖ zend_file_cache_metainfo構造体
❖ zend_persistent_script構造体
❖ 固定文字列(zend_string)の配列
zend_file_cache_metainfo構造体
typedef struct _zend_file_cache_metainfo {!
char magic[8]; // "OPCACHE0"!
char system_id[32]; // accel_gen_system_id()!
size_t mem_size; // size of serialized script!
size_t str_size; // size of interned string!
size_t script_offset; // ?!
accel_time_t timestamp; // script->timestamp!
uint32_t checksum;!
} zend_file_cache_metainfo;
❖ メンバ system_id には先ほど見たハッシュ値が入る!
❖ キャッシュを読む際、これをチェックする
❖ 異なるバージョン間でキャッシュの使い回しはできない
zend_persistent_script構造体
typedef struct _zend_persistent_script {!
! zend_string *full_path;!
! zend_op_array main_op_array;!
! HashTable function_table;!
! HashTable class_table;!
……!
} zend_persistent_script;
❖ スクリプトのコンパイル結果を管理するOPcacheの構造体
❖ 共有メモリ上に置かれているキャッシュそのもの
固定文字列だけ別管理
❖ OPcacheの管理上、プログラム中の固定文字列は
zend_persistent_script構造体とは別管理になる
❖ 全プロセスで固定文字列を共有する仕組みがある

(interned string & そのキャッシュ)
❖ 別途取り出してファイルに書き出す
ポインタのシリアライズ(1)
❖ ファイルキャッシュの概要
❖ 構造体をそのままファイルに保存
❖ ファイルから構造体を復元
ポインタのシリアライズ(1)
❖ ファイルキャッシュの概要
❖ 構造体をそのままファイルに保存
❖ ファイルから構造体を復元
❖ 簡単そうに思えるが、自明でない点がある
❖ メモリアドレスは実行ごとに変わる
❖ 保存・復元のため「シリアライズ」する必要がある
ポインタのシリアライズ(2)
❖ 発想としては単純
#define SERIALIZE_PTR(ptr) do { !
! ! if (ptr) { !
! ! ! ZEND_ASSERT(IS_UNSERIALIZED(ptr)); !
! ! ! (ptr) = (void*)((char*)(ptr) - (char*)script->mem); !
! ! } !
! } while (0)!
#define UNSERIALIZE_PTR(ptr) do { !
! ! if (ptr) { !
! ! ! ZEND_ASSERT(IS_SERIALIZED(ptr)); !
! ! ! (ptr) = (void*)((char*)buf + (size_t)(ptr)); !
! ! } !
! } while (0)
ポインタのシリアライズ(2)
❖ 発想としては単純
❖ バッファ先頭からの相対値に変換する
❖ 全部のポインタ値が比較的小さい値になる
❖ ポインタ値が小さい=シリアライズ済と見なす
ポインタのシリアライズ(3)
❖ 仕組みは単純でも実際は面倒
❖ PHP配列の中の配列→ポインタの先にポインタ
❖ 全部のポインタを変換することになる
❖ 関連する全データ構造のシリアライズ・アンシリアライ
ズ関数が実装されている
❖ op_array、zval、配列、関数、AST
❖ 何か別の応用が可能かもしれない
❖ ファイルベースキャッシュの紹介
❖ キャッシュファイルを覗いてみる
❖ わきあがる疑問
❖ まとめ
わきあがる疑問
❖ Pythonでいう.pycを我々は手に入れたのか?
❖ 性能面でそこまで嬉しいのか?
❖ 他の応用はあるか?
❖ セキュリティ面は大丈夫か?
Pythonでいう.pycを我々は手に入れたのか?
❖ .pyc は互換性を考えて作られている
❖ 近いバージョンなら別サーバにもデプロイ可能
❖ コンパイル済みバイナリに準ずる扱い
❖ .php.bin は少しでもバージョンが変わると使えない
❖ 構造体をベタに保存しているので、構造体メンバの順
序を入れ替えただけで作り直しになる
❖ あくまでキャッシュ
性能面でそこまで嬉しいのか?
❖ CLIやCGIだとプロセス生成のコストの方が高い気が?
❖ 高負荷Webサービスでは、従来通りウォームアップ後
にロードバランサ配下に組み込む方が無難では?
❖ 個人的にはユースケースがイマイチ見えない…
他の応用はあるか?
❖ オススメしないが、なんちゃって難読化に使える
❖ .php.bin だけをデプロイ又は納品するなど
❖ 理屈上は逆コンパイルも可能、難読化とは呼べない
❖ 運用で死ぬ未来が見える
セキュリティ面は大丈夫か?
❖ ダメかも…
❖ キャッシュファイルはWebサーバ権限で書き込める
❖ 他の脆弱性を利用してキャッシュファイルを上書き&
再起動を待てば任意スクリプトが実行可能

(発動条件が厳しめではあるが…)
❖ ファイルベースキャッシュの紹介
❖ キャッシュファイルを覗いてみる
❖ 疑問点
❖ まとめ
まとめ
❖ OPcacheのファイルベースキャッシュを調べました
❖ 共有メモリのキャッシュをシリアライズしてファイル
化するような仕組みでした
❖ 手元で生成してデプロイするにはあまり向いていない
❖ あくまでキャッシュと考えた方が良さそう
❖ 今後の動きを注視していきたい
ご静聴
ありがとう
ございました
…
以降、
補足スライド
ファイルの更新チェック
❖ opcache.validate_timestamps!
❖ 1: タイプスタンプのチェックを行う(デフォルト)
❖ .php と .php.bin 内部のタイムスタンプを比較し、
一致しなかったらキャッシュを捨てる
opcache.enable=1!
opcache.enable_cli=1!
opcache.file_cache=/var/tmp/php/opcache!
opcache.validate_timestamps=1
勘違いしやすい(?)設定
❖ opcache.file_cache_only!
❖ 1: 共有メモリキャッシュ無効・ファイルのみ
❖ 0: 共有メモリキャッシュ有効(デフォルト)
opcache.enable=1!
opcache.enable_cli=1!
opcache.file_cache=/var/tmp/php/opcache!
opcache.file_cache_only=1

More Related Content

What's hot

マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-Shinichiro Yoshida
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング佑哉 廣岡
 
詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2Sho Nakazono
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るYoshio Hanawa
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐりKazuyuki TAKASE
 
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...Tatsuya Watanabe
 
社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみたIosif Takakura
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
Webアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかWebアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかHiroshi Tokumaru
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようShohei Okada
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例kazuhcurry
 

What's hot (20)

マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 
Metaspace
MetaspaceMetaspace
Metaspace
 
詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
 
社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Webアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかWebアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいか
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例
 

Viewers also liked

Zend framework 3 と zend expressive の話
Zend framework 3 と zend expressive の話Zend framework 3 と zend expressive の話
Zend framework 3 と zend expressive の話Satoru Yoshida
 
SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策Akishige TAKEKOSHI
 
php7's ast
php7's astphp7's ast
php7's astdo_aki
 
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探るPHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探るYoshio Hanawa
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するYoshio Hanawa
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情Yoshio Hanawa
 
Laungage Update PHP編
Laungage Update PHP編Laungage Update PHP編
Laungage Update PHP編Yoshio Hanawa
 
家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそうYoshio Hanawa
 
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るPHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るYoshio Hanawa
 
PHP7はなぜ速いのか
PHP7はなぜ速いのかPHP7はなぜ速いのか
PHP7はなぜ速いのかYoshio Hanawa
 
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちはYoshio Hanawa
 
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイントPHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイントYoshio Hanawa
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)ZFConf Conference
 
Inside pixiv's infrastructure〜application cluster side〜
Inside pixiv's infrastructure〜application cluster side〜Inside pixiv's infrastructure〜application cluster side〜
Inside pixiv's infrastructure〜application cluster side〜Tatsuhiko Kubo
 
PHPのキャッシュを使いこなせ!
PHPのキャッシュを使いこなせ!PHPのキャッシュを使いこなせ!
PHPのキャッシュを使いこなせ!Kentaro Ohkouchi
 
Sinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPythonSinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPythonkuroneko1988
 
ZF2 for the ZF1 Developer
ZF2 for the ZF1 DeveloperZF2 for the ZF1 Developer
ZF2 for the ZF1 DeveloperGary Hockin
 
Efficient Code Organisation
Efficient Code OrganisationEfficient Code Organisation
Efficient Code OrganisationSqueed
 

Viewers also liked (20)

Zend framework 3 と zend expressive の話
Zend framework 3 と zend expressive の話Zend framework 3 と zend expressive の話
Zend framework 3 と zend expressive の話
 
SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策
 
php7's ast
php7's astphp7's ast
php7's ast
 
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探るPHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
 
PHPNGの動向
PHPNGの動向PHPNGの動向
PHPNGの動向
 
PHP 5.5 Zend OPcache
PHP 5.5 Zend OPcachePHP 5.5 Zend OPcache
PHP 5.5 Zend OPcache
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
 
Laungage Update PHP編
Laungage Update PHP編Laungage Update PHP編
Laungage Update PHP編
 
家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう
 
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るPHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作る
 
PHP7はなぜ速いのか
PHP7はなぜ速いのかPHP7はなぜ速いのか
PHP7はなぜ速いのか
 
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
 
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイントPHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイント
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
 
Inside pixiv's infrastructure〜application cluster side〜
Inside pixiv's infrastructure〜application cluster side〜Inside pixiv's infrastructure〜application cluster side〜
Inside pixiv's infrastructure〜application cluster side〜
 
PHPのキャッシュを使いこなせ!
PHPのキャッシュを使いこなせ!PHPのキャッシュを使いこなせ!
PHPのキャッシュを使いこなせ!
 
Sinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPythonSinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPython
 
ZF2 for the ZF1 Developer
ZF2 for the ZF1 DeveloperZF2 for the ZF1 Developer
ZF2 for the ZF1 Developer
 
Efficient Code Organisation
Efficient Code OrganisationEfficient Code Organisation
Efficient Code Organisation
 

Similar to OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた

php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方do_aki
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12Ryuji Yamashita
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)Rui Hirokawa
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西Shinichi Kozake
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方Ryo Tomidokoro
 
コード読経会報告書
コード読経会報告書コード読経会報告書
コード読経会報告書Masahiko Toyoshi
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
WebサーバのチューニングYu Komiya
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料Junichi Ishida
 
誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築Hiroshi Yamato
 
Re: WebServer BenchMarking
Re: WebServer BenchMarkingRe: WebServer BenchMarking
Re: WebServer BenchMarkingRyo Tomidokoro
 
Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache maruyama097
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会Yuji Otani
 
Alfrescoクラスタリング入門
Alfrescoクラスタリング入門Alfrescoクラスタリング入門
Alfrescoクラスタリング入門Ashitaba YOSHIOKA
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門irix_jp
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門Mahito Ogura
 
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話侑弥 濱田
 

Similar to OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた (20)

php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方
 
コード読経会報告書
コード読経会報告書コード読経会報告書
コード読経会報告書
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
 
誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築
 
Php5.4
Php5.4Php5.4
Php5.4
 
Re: WebServer BenchMarking
Re: WebServer BenchMarkingRe: WebServer BenchMarking
Re: WebServer BenchMarking
 
Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache 
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
Alfrescoクラスタリング入門
Alfrescoクラスタリング入門Alfrescoクラスタリング入門
Alfrescoクラスタリング入門
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門
 
PHP With Windows binary
PHP With Windows binaryPHP With Windows binary
PHP With Windows binary
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門
 
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話
 

More from Yoshio Hanawa

自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみたYoshio Hanawa
 
Zend VMにおける例外の実装
Zend VMにおける例外の実装Zend VMにおける例外の実装
Zend VMにおける例外の実装Yoshio Hanawa
 
Zend VMにおける例外の実装
Zend VMにおける例外の実装Zend VMにおける例外の実装
Zend VMにおける例外の実装Yoshio Hanawa
 
ぼくのかんがえる
さいきょうの銀行振込
ぼくのかんがえる
さいきょうの銀行振込ぼくのかんがえる
さいきょうの銀行振込
ぼくのかんがえる
さいきょうの銀行振込Yoshio Hanawa
 
「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」Yoshio Hanawa
 
浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話Yoshio Hanawa
 
PHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったことPHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったことYoshio Hanawa
 
GitHubからお金をもらった話
GitHubからお金をもらった話GitHubからお金をもらった話
GitHubからお金をもらった話Yoshio Hanawa
 
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べたiOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べたYoshio Hanawa
 
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話Yoshio Hanawa
 
PHPの正規表現と最長一致
PHPの正規表現と最長一致PHPの正規表現と最長一致
PHPの正規表現と最長一致Yoshio Hanawa
 
zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみたYoshio Hanawa
 
浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版Yoshio Hanawa
 
Testing PHP extension on Travis CI
Testing PHP extension on Travis CITesting PHP extension on Travis CI
Testing PHP extension on Travis CIYoshio Hanawa
 
php-timecopを実戦投入してみた
php-timecopを実戦投入してみたphp-timecopを実戦投入してみた
php-timecopを実戦投入してみたYoshio Hanawa
 
PHPエクステンションの開発tips
PHPエクステンションの開発tipsPHPエクステンションの開発tips
PHPエクステンションの開発tipsYoshio Hanawa
 
PHPで時間旅行をする方法
PHPで時間旅行をする方法PHPで時間旅行をする方法
PHPで時間旅行をする方法Yoshio Hanawa
 

More from Yoshio Hanawa (17)

自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた
 
Zend VMにおける例外の実装
Zend VMにおける例外の実装Zend VMにおける例外の実装
Zend VMにおける例外の実装
 
Zend VMにおける例外の実装
Zend VMにおける例外の実装Zend VMにおける例外の実装
Zend VMにおける例外の実装
 
ぼくのかんがえる
さいきょうの銀行振込
ぼくのかんがえる
さいきょうの銀行振込ぼくのかんがえる
さいきょうの銀行振込
ぼくのかんがえる
さいきょうの銀行振込
 
「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」
 
浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話
 
PHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったことPHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったこと
 
GitHubからお金をもらった話
GitHubからお金をもらった話GitHubからお金をもらった話
GitHubからお金をもらった話
 
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べたiOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
 
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話
 
PHPの正規表現と最長一致
PHPの正規表現と最長一致PHPの正規表現と最長一致
PHPの正規表現と最長一致
 
zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみた
 
浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版
 
Testing PHP extension on Travis CI
Testing PHP extension on Travis CITesting PHP extension on Travis CI
Testing PHP extension on Travis CI
 
php-timecopを実戦投入してみた
php-timecopを実戦投入してみたphp-timecopを実戦投入してみた
php-timecopを実戦投入してみた
 
PHPエクステンションの開発tips
PHPエクステンションの開発tipsPHPエクステンションの開発tips
PHPエクステンションの開発tips
 
PHPで時間旅行をする方法
PHPで時間旅行をする方法PHPで時間旅行をする方法
PHPで時間旅行をする方法
 

Recently uploaded

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (10)

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた