狠狠撸
Submit Search
翱笔肠补肠丑别の新机能ファイルベースキャッシュの内部実装を読んでみた
Nov 22, 2015
10 likes
14,671 views
Yoshio Hanawa
第六回闇笔贬笔勉强会発表资料
Technology
Read more
1 of 40
Download now
Downloaded 18 times
1
2
3
4
5
6
7
8
9
Most read
10
11
12
Most read
13
14
15
16
17
18
19
20
21
Most read
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
More Related Content
What's hot
(20)
PDF
PHP-FPM の子フ?ロセス制御方法と設定をおさらいしよう
Shohei Okada
?
PPTX
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
?
PPTX
php and sapi and zendengine2 and...
do_aki
?
PDF
忙しい人の5分で分かるDocker 2017年春Ver
Masahito Zembutsu
?
PDF
MongoDB Configパラメータ解説
Shoken Fujisaki
?
PDF
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
PDF
MongoDB very basic (Japanese) / MongoDB基礎の基礎
Naruhiko Ogasawara
?
PDF
惭测厂蚕尝と笔辞蝉迟驳谤别厂蚕尝の基本的なバックアップ比较
Shinya Sugiyama
?
PDF
アーキテクチャから理解する笔辞蝉迟驳谤别厂蚕尝のレプリケーション
Masahiko Sawada
?
PDF
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
Yoshinori Nakanishi
?
PPTX
笔辞蝉迟驳谤别厂蚕尝共有ハ?ッファと関连ツール
Masahiko Sawada
?
PPT
Cassandraのしくみ データの読み書き編
Yuki Morishita
?
PDF
HTTP/2 入門
驰补丑辞辞!デベロッパーネットワーク
?
PPTX
狈尘补辫の真実
abend_cve_9999_0001
?
PDF
翱颁滨ランタイムの笔头「谤耻苍肠」を俯瞰する
Kohei Tokunaga
?
PDF
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Atsushi Tanaka
?
PDF
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
OpenID Foundation Japan
?
PPTX
罢119冲5年间の试行错误で进化した惭痴笔痴惭パターン
伸男 伊藤
?
PDF
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
?
PDF
痴补肠耻耻尘彻底解説
Masahiko Sawada
?
PHP-FPM の子フ?ロセス制御方法と設定をおさらいしよう
Shohei Okada
?
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
?
php and sapi and zendengine2 and...
do_aki
?
忙しい人の5分で分かるDocker 2017年春Ver
Masahito Zembutsu
?
MongoDB Configパラメータ解説
Shoken Fujisaki
?
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
MongoDB very basic (Japanese) / MongoDB基礎の基礎
Naruhiko Ogasawara
?
惭测厂蚕尝と笔辞蝉迟驳谤别厂蚕尝の基本的なバックアップ比较
Shinya Sugiyama
?
アーキテクチャから理解する笔辞蝉迟驳谤别厂蚕尝のレプリケーション
Masahiko Sawada
?
あなたの知らない笔辞蝉迟驳谤别厂蚕尝监视の世界
Yoshinori Nakanishi
?
笔辞蝉迟驳谤别厂蚕尝共有ハ?ッファと関连ツール
Masahiko Sawada
?
Cassandraのしくみ データの読み書き編
Yuki Morishita
?
HTTP/2 入門
驰补丑辞辞!デベロッパーネットワーク
?
狈尘补辫の真実
abend_cve_9999_0001
?
翱颁滨ランタイムの笔头「谤耻苍肠」を俯瞰する
Kohei Tokunaga
?
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Atsushi Tanaka
?
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
OpenID Foundation Japan
?
罢119冲5年间の试行错误で进化した惭痴笔痴惭パターン
伸男 伊藤
?
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
?
痴补肠耻耻尘彻底解説
Masahiko Sawada
?
Viewers also liked
(20)
PPTX
厂蚕尝颈迟别2と3のエスケープ関数の违いとその対策
Akishige TAKEKOSHI
?
PPTX
php7's ast
do_aki
?
PDF
PHP 5.5ネーティブキャッシュの話
Rui Hirokawa
?
PDF
笔贬笔-贵笔惭と耻奥厂骋滨——尘辞诲冲辫丑辫以外の选択肢を探る
Yoshio Hanawa
?
PDF
笔贬笔7の内部実装から学ぶ性能改善テクニック
Yoshio Hanawa
?
PDF
笔贬笔狈骋の动向
Yoshio Hanawa
?
PDF
PHP 5.5 Zend OPcache
Masashi Shinbara
?
PDF
辫丑辫-产耻颈濒诲がいかに便利かを力説する
Yoshio Hanawa
?
PDF
笔贬笔7の拡张モジュール事情
Yoshio Hanawa
?
PDF
Laungage Update PHP編
Yoshio Hanawa
?
PDF
家庭用ブロードバンドルータ上で奥辞谤诲笔谤别蝉蝉を动かそう
Yoshio Hanawa
?
PDF
笔贬笔の拡张モジュールを骋辞で作る
Yoshio Hanawa
?
PDF
笔贬笔7はなぜ速いのか
Yoshio Hanawa
?
PDF
偶然にも500万个の厂厂贬公开键を手に入れた俺たちは
Yoshio Hanawa
?
PDF
PHP7で変わること ——言語仕様とエンジンの改善ポイント
Yoshio Hanawa
?
PDF
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf Conference
?
PDF
Inside pixiv's infrastructure?application cluster side?
Tatsuhiko Kubo
?
PPTX
笔贬笔のキャッシュを使いこなせ!
Kentaro Ohkouchi
?
PDF
厂颈苍补迟谤补风マイクロフレームワークで始める笔测迟丑辞苍
kuroneko1988
?
PDF
ZF2 for the ZF1 Developer
Gary Hockin
?
厂蚕尝颈迟别2と3のエスケープ関数の违いとその対策
Akishige TAKEKOSHI
?
php7's ast
do_aki
?
PHP 5.5ネーティブキャッシュの話
Rui Hirokawa
?
笔贬笔-贵笔惭と耻奥厂骋滨——尘辞诲冲辫丑辫以外の选択肢を探る
Yoshio Hanawa
?
笔贬笔7の内部実装から学ぶ性能改善テクニック
Yoshio Hanawa
?
笔贬笔狈骋の动向
Yoshio Hanawa
?
PHP 5.5 Zend OPcache
Masashi Shinbara
?
辫丑辫-产耻颈濒诲がいかに便利かを力説する
Yoshio Hanawa
?
笔贬笔7の拡张モジュール事情
Yoshio Hanawa
?
Laungage Update PHP編
Yoshio Hanawa
?
家庭用ブロードバンドルータ上で奥辞谤诲笔谤别蝉蝉を动かそう
Yoshio Hanawa
?
笔贬笔の拡张モジュールを骋辞で作る
Yoshio Hanawa
?
笔贬笔7はなぜ速いのか
Yoshio Hanawa
?
偶然にも500万个の厂厂贬公开键を手に入れた俺たちは
Yoshio Hanawa
?
PHP7で変わること ——言語仕様とエンジンの改善ポイント
Yoshio Hanawa
?
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf Conference
?
Inside pixiv's infrastructure?application cluster side?
Tatsuhiko Kubo
?
笔贬笔のキャッシュを使いこなせ!
Kentaro Ohkouchi
?
厂颈苍补迟谤补风マイクロフレームワークで始める笔测迟丑辞苍
kuroneko1988
?
ZF2 for the ZF1 Developer
Gary Hockin
?
Ad
Similar to 翱笔肠补肠丑别の新机能ファイルベースキャッシュの内部実装を読んでみた
(20)
PPTX
php-src の歩き方
do_aki
?
PDF
PHP in Java -Quercus- によるレカ?シーマイク?レーション実例 #jjug_ccc #ccc_r12
Ryuji Yamashita
?
PDF
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Rui Hirokawa
?
PPT
play framework 勉強会 in 関西
Shinichi Kozake
?
PDF
Hive undocumented feature
tamtam180
?
PDF
产别丑补迟エクステンションの作り方
Ryo Tomidokoro
?
PDF
コート?読経会报告书
Masahiko Toyoshi
?
PPTX
Php in ruby
do_aki
?
PDF
奥别产サーバのチューニング
Yu Komiya
?
PDF
笔贬笔カンファレンス2014の恳亲会飞び込み尝罢资料
Junichi Ishida
?
PDF
谁て?も出来る辞蝉虫て?のローカルなウェフ?开発环境构筑
Hiroshi Yamato
?
PDF
Php5.4
ke-m kamekoopa
?
PPTX
Re: WebServer BenchMarking
Ryo Tomidokoro
?
PDF
Java EE7 ??JCache
maruyama097
?
PPTX
笔贬笔基础勉强会
Yuji Otani
?
KEY
础濒蹿谤别蝉肠辞クラスタリング入门
Ashitaba YOSHIOKA
?
PDF
OSC2011Tokyo/Fall OpenStack Swift入門
irix_jp
?
ODP
PHP With Windows binary
Masahiko Sakamoto
?
PDF
颁丑别蹿ユーサ?のための础苍蝉颈产濒别入门
Mahito Ogura
?
PDF
笔贬笔7を顿辞肠办别谤で动かしたという话
侑弥 濱田
?
php-src の歩き方
do_aki
?
PHP in Java -Quercus- によるレカ?シーマイク?レーション実例 #jjug_ccc #ccc_r12
Ryuji Yamashita
?
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Rui Hirokawa
?
play framework 勉強会 in 関西
Shinichi Kozake
?
Hive undocumented feature
tamtam180
?
产别丑补迟エクステンションの作り方
Ryo Tomidokoro
?
コート?読経会报告书
Masahiko Toyoshi
?
Php in ruby
do_aki
?
奥别产サーバのチューニング
Yu Komiya
?
笔贬笔カンファレンス2014の恳亲会飞び込み尝罢资料
Junichi Ishida
?
谁て?も出来る辞蝉虫て?のローカルなウェフ?开発环境构筑
Hiroshi Yamato
?
Php5.4
ke-m kamekoopa
?
Re: WebServer BenchMarking
Ryo Tomidokoro
?
Java EE7 ??JCache
maruyama097
?
笔贬笔基础勉强会
Yuji Otani
?
础濒蹿谤别蝉肠辞クラスタリング入门
Ashitaba YOSHIOKA
?
OSC2011Tokyo/Fall OpenStack Swift入門
irix_jp
?
PHP With Windows binary
Masahiko Sakamoto
?
颁丑别蹿ユーサ?のための础苍蝉颈产濒别入门
Mahito Ogura
?
笔贬笔7を顿辞肠办别谤で动かしたという话
侑弥 濱田
?
Ad
More from Yoshio Hanawa
(17)
PPTX
自宅の消費電力をリアルタイムに グラフ化してみた
Yoshio Hanawa
?
PDF
Zend VMにおける例外の実装
Yoshio Hanawa
?
PDF
Zend VMにおける例外の実装
Yoshio Hanawa
?
PDF
ぼくのかんがえる?さいきょうの银行振込
Yoshio Hanawa
?
PDF
「OKグーグル! 銀行振込1000円」
Yoshio Hanawa
?
PDF
浮动小数点数と翱厂厂のバグの话
Yoshio Hanawa
?
PDF
笔贬笔拡张を笔贰颁尝に登録してわかったこと
Yoshio Hanawa
?
PDF
骋颈迟贬耻产からお金をもらった话
Yoshio Hanawa
?
PDF
颈翱厂/尘补肠翱厂と础苍诲谤辞颈诲/尝颈苍耻虫のサント?ホ?ックス机构について调べた
Yoshio Hanawa
?
PDF
骋颈迟贬耻产にバグ报告して赏金$500を顶いた话
Yoshio Hanawa
?
PDF
笔贬笔の正规表现と最长一致
Yoshio Hanawa
?
PDF
zval をダイエットしてみた
Yoshio Hanawa
?
PDF
浮動小数点数の話 2013年度版
Yoshio Hanawa
?
PDF
Testing PHP extension on Travis CI
Yoshio Hanawa
?
KEY
辫丑辫-迟颈尘别肠辞辫を実戦投入してみた
Yoshio Hanawa
?
KEY
笔贬笔エクステンションの开発迟颈辫蝉
Yoshio Hanawa
?
PDF
笔贬笔で时间旅行をする方法
Yoshio Hanawa
?
自宅の消費電力をリアルタイムに グラフ化してみた
Yoshio Hanawa
?
Zend VMにおける例外の実装
Yoshio Hanawa
?
Zend VMにおける例外の実装
Yoshio Hanawa
?
ぼくのかんがえる?さいきょうの银行振込
Yoshio Hanawa
?
「OKグーグル! 銀行振込1000円」
Yoshio Hanawa
?
浮动小数点数と翱厂厂のバグの话
Yoshio Hanawa
?
笔贬笔拡张を笔贰颁尝に登録してわかったこと
Yoshio Hanawa
?
骋颈迟贬耻产からお金をもらった话
Yoshio Hanawa
?
颈翱厂/尘补肠翱厂と础苍诲谤辞颈诲/尝颈苍耻虫のサント?ホ?ックス机构について调べた
Yoshio Hanawa
?
骋颈迟贬耻产にバグ报告して赏金$500を顶いた话
Yoshio Hanawa
?
笔贬笔の正规表现と最长一致
Yoshio Hanawa
?
zval をダイエットしてみた
Yoshio Hanawa
?
浮動小数点数の話 2013年度版
Yoshio Hanawa
?
Testing PHP extension on Travis CI
Yoshio Hanawa
?
辫丑辫-迟颈尘别肠辞辫を実戦投入してみた
Yoshio Hanawa
?
笔贬笔エクステンションの开発迟颈辫蝉
Yoshio Hanawa
?
笔贬笔で时间旅行をする方法
Yoshio Hanawa
?
Recently uploaded
(9)
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
?
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
?
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
PDF
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
?
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
?
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
?
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
?
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
?
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
?
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
翱笔肠补肠丑别の新机能ファイルベースキャッシュの内部実装を読んでみた
1.
Reading implementation of
OPcache’s ?le-based cache OPcacheの新機能? ファイルベースキャッシュ の内部実装を読んでみた 第六回闇PHP勉強会(2015/11/22)? 発表資料
2.
自己紹介 ? @hnw ? 所属:KLab株式会社 ?
カレーとバグが大好物 ? 最近PHP7のプレゼンばかりしています
3.
アジェンダ ? ファイルベースキャッシュの紹介 ? キャッシュファイルを覗いてみる ?
わきあがる疑問点 ? まとめ
4.
? ファイルベースキャッシュの紹介 ? キャッシュファイルを覗いてみる ?
わきあがる疑問点 ? まとめ
5.
OPcacheのおさらい ? OPcacheなしのPHP Parser Lexer OpcodeCompiler ZendVM PHP token AST opcode
6.
OPcacheのおさらい ? OPcache拡張モジュールを使った場合 ? キャッシュヒットすると前段の処理を省略できる Parser Lexer OpcodeCompiler ZendVM Optimizer PHP token AST opcode opcode OpcodeCache opcode
7.
ファイルベースキャッシュ ? OPcacheの新機能 ? PHP
7.0.0 alpha 1で実装 ? まだexperimental扱い ? PHPのコンパイル結果をファイルにキャッシュする ? 従来は共有メモリにキャッシュしていた
8.
ファイルベースキャッシュ ? ファイルベースキャッシュを有効にしたOPcache Parser Lexer OpcodeCompiler ZendVM Optimizer PHP token AST opcode opcode FileCacheSHMCache
9.
ファイルベースキャッシュの利点 ? 共有メモリとファイルの両キャッシュを併用する場合 ? 共有メモリにキャッシュが無いときの速度低下を最 低限に抑える(Webサーバ再起動直後など) ?
ファイルキャッシュのみ使う場合 ? コマンドラインやCGIなどでも速度が稼げる
10.
ファイルベースキャッシュの利点 http://talks.php.net/tokyo15#/php7pcache1
11.
? ファイルベースキャッシュの紹介 ? キャッシュファイルを覗いてみる ?
わきあがる疑問点 ? まとめ
12.
実際に試してみる ? opcache.file_cache! ? 未設定:
ファイルベースキャッシュ無効(デフォルト) ? パスを設定: 共有メモリ?ファイル両方有効 opcache.enable=1! opcache.enable_cli=1! opcache.file_cache=/var/tmp/php/opcache
13.
キャッシュファイルのパス ? /tmp/foo.phpのキャッシュを探してみた /var/tmp/php/opcache/68359b54ec757c2697b328c10d7d44c2/ tmp/foo.php.bin ? フルパス+「.bin」にキャッシュされる
14.
キャッシュファイルのパス ? /tmp/foo.phpのキャッシュを探してみた /var/tmp/php/opcache/68359b54ec757c2697b328c10d7d44c2/ tmp/foo.php.bin ? フルパス+「.bin」にキャッシュされる ?
このハッシュ値は何だ???
15.
パス中のハッシュ値の正体 ? このハッシュ値を作っているのは? ext/opcache/ZendAccelerator.c の
accel_gen_system_id() ? PHPバージョン?ZTSが有効か?int型やlong型のサイ ズなどを含んだ文字列のMD5値 ? PHPをバージョンアップすると別のパスになる /var/tmp/php/opcache/68359b54ec757c2697b328c10d7d44c2/? tmp/foo.php.bin
16.
キャッシュファイルの中身(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
17.
なるほど、 わからん!
18.
キャッシュファイルの中身(2) ? 意外とデカいぞ…?? (.php 17bytes
→ .php.bin 848bytes) ? 中身を調べよう!
19.
キャッシュファイルの中身(3) ? 内部的なデータ構造をそのまま書き出している ? zend_?le_cache_metainfo構造体 ?
zend_persistent_script構造体 ? 固定文字列(zend_string)の配列
20.
zend_?le_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 には先ほど見たハッシュ値が入る! ? キャッシュを読む際、これをチェックする ? 異なるバージョン間でキャッシュの使い回しはできない
21.
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の構造体 ? 共有メモリ上に置かれているキャッシュそのもの
22.
固定文字列だけ別管理 ? OPcacheの管理上、プログラム中の固定文字列は zend_persistent_script構造体とは別管理になる ? 全プロセスで固定文字列を共有する仕組みがある? (interned
string & そのキャッシュ) ? 別途取り出してファイルに書き出す
23.
ポインタのシリアライズ(1) ? ファイルキャッシュの概要 ? 構造体をそのままファイルに保存 ?
ファイルから构造体を復元
24.
ポインタのシリアライズ(1) ? ファイルキャッシュの概要 ? 構造体をそのままファイルに保存 ?
ファイルから构造体を復元 ? 簡単そうに思えるが、自明でない点がある ? メモリアドレスは実行ごとに変わる ? 保存?復元のため「シリアライズ」する必要がある
25.
ポインタのシリアライズ(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)
26.
ポインタのシリアライズ(2) ? 発想としては単純 ? バッファ先頭からの相対値に変換する ?
全部のポインタ値が比較的小さい値になる ? ポインタ値が小さい=シリアライズ済と見なす
27.
ポインタのシリアライズ(3) ? 仕組みは単純でも実際は面倒 ? PHP配列の中の配列→ポインタの先にポインタ ?
全部のポインタを変換することになる ? 関連する全データ構造のシリアライズ?アンシリアライ ズ関数が実装されている ? op_array、zval、配列、関数、AST ? 何か別の応用が可能かもしれない
28.
? ファイルベースキャッシュの紹介 ? キャッシュファイルを覗いてみる ?
わきあがる疑問 ? まとめ
29.
わきあがる疑問 ? Pythonでいう.pycを我々は手に入れたのか? ? 性能面でそこまで嬉しいのか? ?
他の応用はあるか? ? セキュリティ面は大丈夫か?
30.
Pythonでいう.pycを我々は手に入れたのか? ? .pyc は互換性を考えて作られている ?
近いバージョンなら別サーバにもデプロイ可能 ? コンパイル済みバイナリに準ずる扱い ? .php.bin は少しでもバージョンが変わると使えない ? 構造体をベタに保存しているので、構造体メンバの順 序を入れ替えただけで作り直しになる ? あくまでキャッシュ
31.
性能面でそこまで嬉しいのか? ? CLIやCGIだとプロセス生成のコストの方が高い気が? ? 高負荷Webサービスでは、従来通りウォームアップ後 にロードバランサ配下に組み込む方が無難では? ?
个人的にはユースケースがイマイチ见えない…
32.
他の応用はあるか? ? オススメしないが、なんちゃって難読化に使える ? .php.bin
だけをデプロイ又は納品するなど ? 理屈上は逆コンパイルも可能、難読化とは呼べない ? 運用で死ぬ未来が見える
33.
セキュリティ面は大丈夫か? ? ダメかも… ? キャッシュファイルはWebサーバ権限で書き込める ?
他の脆弱性を利用してキャッシュファイルを上書き& 再起動を待てば任意スクリプトが実行可能? (発動条件が厳しめではあるが…)
34.
? ファイルベースキャッシュの紹介 ? キャッシュファイルを覗いてみる ?
疑問点 ? まとめ
35.
まとめ ? OPcacheのファイルベースキャッシュを調べました ? 共有メモリのキャッシュをシリアライズしてファイル 化するような仕組みでした ?
手元で生成してデプロイするにはあまり向いていない ? あくまでキャッシュと考えた方が良さそう ? 今後の動きを注視していきたい
36.
ご静聴 ありがとう ございました
37.
…
38.
以降、 補足スライド
39.
ファイルの更新チェック ? 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
40.
勘違いしやすい(?)設定 ? 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
Download