BINARY HACKS
高林さんに献本(Binary Hacks)をいただく。本日到着しました。ありがとうございました。
昨年12月にあったBinary 2.0カンファレンスをきっかけにできあがった書籍である。素晴しい。わたしも高林さんのブログでBinary 2.0カンファレンスを知り、早速申し込んだ口であるが、無理矢理すべりこむため(だって、あっと言う間に満員で登録締切になってしまったから)、持ネタのCache Pollution Aware Patchを5分でプレゼンをした。
Binary 2.0で発表。
ライトニングトーク
Binary 2.0
先日、Gree主催のオープンソーステクノロジ勉強会で鵜飼さんの「プログラムが main()にたどりつくまで」を聞いたのだが、その宴会で高林さんからBINARY HACKSを送りますよ〜というありがたいお言葉。
さて、第6章プロファイラ・デバッガHackである。#87〜#89の例が残念ながらショボイ。人工的すぎてリアリティがない。やはり、rubyのキャッシュミスを測定するくらいの実アプリを意識した例になっていたらと思う。(おしい)
もちろんだからと言って本書の価値がそこなわれているわけではない。
#89でoprofileを有効にする場合のカーネルの設定でCONFIG_PROFILINGおよびCONFIG_OPROFILEをオンにしておくというのがあるが、コールグラフを計測するには、それに加え、Kernel HackingのCONFIG_FRAME_POINTERをオンにしておく必要があると思う。このフラグをオンにしていないのがデフォルトなので、結構はまるところである。
キャッシュミスを検出する(337ページ)でeventとしてBSQ_CACHE_REFERENCEを、マスクとして0x10fをあたえている。BSQ_CACHE_REFERENCEというのは、Pentium 4ないしXeonのイベントなので、PentiumIII以前や最近のCoreプロセッサでは当然違うイベントになるし、それらの情報については、IA-32 Intel Architecture Software Developer's Manual Volume 3B, System Programming Guide, Appendix Aの表を見よという情報がないと、わけがわからないと思う。#91「ハードウェアのデバッグ機能を使う」では上記のリファレンスが載っているので#89は若干不親切な気がする。
イベントマスクの0x10fなのであるが、当該マニュアルを見ると
Bit
0: RD_2ndL_HITS
1: RD_2ndL_HITE
2: RD_2ndL_HITM
3: RD_3rdL_HITS
4: RD_3rdL_HITE
5: RD_3rdL_HITM
8: RD_2ndL_MISS
9: RD_3rdL_MISS
10: WR_2ndL_MISS
となっているので、0x10fはRD_2ndL_MISS/RD_3rdL_HITS/RD_2ndL_HITM/RD_2ndL_HITE/RD_2ndL_HITSがオンだという事を示している。ということはL2キャッシュミス(RD_2ndL_MISS)だけではなく、L3キャッシュヒット(RD_3rdL_HITS)およびL2キャッシュヒット(RD_2ndL_HITM/RD_2ndL_HITE/RD_2ndL_HITS)も同時に計測しているような気がする。(いかがだろうか?)
#94「プロセッサのメモリオーダリングに注意」の例のプログラムだが、これはメモリオーダリングの例ではなくてアトミックな交換(xchg)が出来ていない例なのではないだろうか?
アプリケーションレベルでメモリオーダリングに注意しなければいけない例というのはあまり思いつかなかったのでもし適切な例があればご教示いただきたいところである。
以上重箱の隅をつつきまくったが、つつきたくなるほど素晴しい本である。通勤電車の行き帰り、没頭して乗り過す危険性が高い本でもある。この第二版の企画があったらぜひcrashダンプの読み方、kprobe/djprobeやsystemtapなどの話も追記してほしいところである。
高林さんのブログ
Binary Hacks が届きました/いやなブログ
小飼弾さんのブログ
Binary Hacks/404 Blog Not Found
Rubyのプロファイリングをするお話などは下記を参考。




プロファイラのところ書いたものです。不親切ということと、 BSQ_CACHE_REFERENCE が間違ってる、というのは正しいご指摘のように思います。追試をしてみて、正誤表に入れてもらうようお願いしようかと思います。
経緯としては、最初に http://people.redhat.com/wcohen/OProfileTutorial.txt あたりで見て、このフラグとかは後で調べよう…と思ってたのですが空白期間があったのですっかり忘れてたというような感じで、全く申し訳ないことです。
あと、個人的にはツールの紹介だけ、という感じの文章の場合は、無味乾燥とした例の方が好みだったりします。基本は示した、後は自分で考えられるよね、というような。もちろん講演とかですとリアルな例の方が面白いですけど。
投稿: shinh | 2006年11月 9日 (木) 16:28
shinh さん、コメントありがとうございます。なるほど、参考にした文書がもとから間違っていたのですね。
oprofileの日本語の文書がほとんどないのでBINARY HACKSは、非常にいい紹介記事になると思います。
キャッシュミスとか簡単に測定できますし、いろいろ便利な技を今後もご紹介ください。どうもありがとうございました。
投稿: hyoshiok | 2006年11月10日 (金) 07:01
>>CONFIG_FRAME_POINTER
そうか、それが原因だったのかぁ〜
投稿: oprofile-beginner | 2006年11月10日 (金) 17:40
oprofile-beginnerさん、コメントありがとうございます。
お役に立ちましたか?call graphの分析をして何かがわかりましたか?ぜひ、発表してください。
投稿: hyoshiok | 2006年11月11日 (土) 12:46