ツールの威力でPosgtreSQLのチューニングに成功!

 釈然としないまま合宿に参加し,喜連川PM(プロジェクト・マネジャ)との個別のミーティングで相談すると,キャッシュ・ミスのトップ10の累積度数のグラフがあるとわかりやすいという指摘を受けた。キャッシュ・ミスを起すたちの悪いロード(メモリー・アクセス)はごく一部で,そのごく一部がキャッシュ・ミスの大半を起しているはずである。それを発見すればいいだろうという。そこで急きょ,累積度数のグラフを作成し,PostgreSQLのキャッシュ・ミスの傾向について議論した。結論はすぐに出ず,正月休み返上でベンチマークと分析を行った。

図2●PostgreSQLのL1キャッシュ・ミスのグラフ。頻度上位1%(ロックのルーチン)で全体の約54%,頻度上位10%で約87%のキャッシュ・ミスが発生している
 その結果,ディスクI/Oのバンド幅が十分でないため,データの絶対量を減らしてベンチマークを繰り返さないといけないということがわかってきた。そこでデータ量を減らして再度計測してみると,レコードをロックするルーチン(LWLockRelease)でキャッシュ・ミスが多発していることが発見できた(図2[拡大表示])。ソースコードで言うと,通称スピン・ロックという部分である。メイン・メモリーにフラグを用意し,誰かがロックする場合はそのフラグを1にする。別の誰かがロックを確保したければフラグを監視し続け,0になった瞬間に1に変更しロックを確保する,といった仕組みがスピン・ロックだ。必ずメイン・メモリーにアクセスしにいくので非常にコストの高い操作になる。

 そこで,フラグへアクセスするループ(スピン・ループという)を2重化して,最初はメイン・メモリーにアクセスしにいくが,その後はキャッシュへのアクセスとしてループ(内側のスピン・ループ)を回り,キャッシュの値が0になったら,再度メイン・メモリーの値が0かどうかを確認し,0であったら1に変更してロックを確保するというアルゴリズムに変更した。その結果,キャッシュ・ミスが10数%減少し,実行速度も3~4%向上した!

 大成功である。コード上のどこでキャッシュ・ミスが多発しているかを見つけられるこのツールを使えば,効果的なチューニングができることが実証できたのだ。この時点で,ほぼメモリー・プロファイリング・ツールの目標は達成できた。ゴールが見えた。

学会デビューの後,ついに完成!

 情報処理学会の主催で,「プログラムシンポジウム(http://www.ipsj.or.jp/prosym/44/program.html)」というのが毎年正月に箱根で開催されている。今年で第44回ということだから老舗のシンポジウムである。「未踏」とは直接関係はなかったが,勉強も兼ねて発表を行うことにした。オジサンのくせに,実はこれが学会デビューである。せっせと論文も書いた。

 シンポジウムでは,デモをする機会も得た。地味なツールなので不安だったが,少なくとも数名の方には質問を受けた。

 最初は学会発表ということで,学生のように緊張していた。しかし終わってみると実のところ夜の宴会の印象しか残っていない。わたしがシンポジウムをなめすぎているのか,はたまたこれも年齢とともに身に付けた図々しさのせいなのか…。

 こうして学会発表を終えた2月末,ツールはほぼ完成し,「未踏」の契約を終えるときが来た。「間に合わない」と思った3カ月前の不安はどこへやら。最終報告の合宿では,余裕たっぷりで発表できた。ほかの開発者と会うのも三度目なので気心が知れていたということもあっただろう。

 そこでわたしは,あらためてメモリー・プロファインリグ・ツールに課題がいろいろあることを認識した。一番の課題は,キャッシュ・ミスの問題を発見した後の解決策の提示だ。PostgreSQLの場合は,たまたま解決方法を思い付けたが,誰もがそうできるとは限らない。火事を発見できても,火消しの方法がわからないのでは,簡単に利用できない。

 また,メモリー・プロファイリング・ツールを利用して,劇的に性能向上させた実例もほしくなった。「このツールのおかげで性能が☆倍に向上しました!」という威勢のいい例である。キラー・アプリケーションのようなものだ。

 そのほか,分析結果をビジュアル化したり,グラフ化するようなツールの使い勝手の向上なども必要だと思った。だが,いずれもこれからのテーマである。

 3月,電子情報通信学会の第14回データ工学ワークショップ(http://www.ieice.org/iss/de/DEWS/DEWS2003/)で発表する機会があった。プログラミングシンポジウムでは間に合わなかった,PosgreSQLのチューニング結果も発表した。学会発表は2回目ということもあり,リラックスしてできたと思う。そのせいか座長推薦をもらい,日本データベース学会のDBSJ Lettersという学会誌に論文が掲載されるという名誉も受けた。

未踏プログラマとして

 さて,最後に今回の手記をまとめた動機を記しておこう。最初の動機は,(ちょっと格好付けて聞こえるかもしれないが)国民の税金によって支援を受けた以上,ある種の説明責任を果たしたいと強く思ったからである。税金を使うからには,その使い道を公開し,多くの人にそれが適切であったかそうでなかったかを広く問いたいと思ったのだ。

図3●メモリー・プロファイリング・ツール(hardmeter)についてのWebサイト(http://sourceforge.jp/projects/
hardmeter
)。もちろんツールは自由にダウンロードでき,自由に利用,変更,再配布できる
 開発した成果そのものは,すでにオープンソース・ソフトウエアとして公開している。ツールの名前は「hardmeter」とした(図3[拡大表示])。名前の由来? それは想像にお任せする。ぜひ,自由に利用していただきたい。

 開発中にわたしが得た知見,例えばメモリー・プロファイリング・ツールを利用してLinuxカーネルのスケジューラの問題を発見し,それがキャッシュ・コンフリクトによる性能劣化であると指摘したことや,PostgreSQLのロックの実装上の問題を発見し修正し評価したことなどは,それぞれ論文として発表した。それらも,せんえつながら成果と呼んで差し支えないだろう。

 しかし,わたしがこの手記で本当に書きたかったことは,そのような結果ではなくて,そこに至るプロセスである。わたしという人間がなぜ「未踏」にチャレンジして,どのような問題をどう解決したか。そしてそのプロセスでわたしは何を学び,わたしはそれをどう楽しんだか,それを記したかったのである。

 喜連川先生という世界的権威にPMとしていろいろご指導をいただいた。これは非常に刺激的な経験であった。合宿での議論によってツールの方向性,完成度が目に見えて向上した。また久保さんというきわめて優秀なプログラマと一緒に仕事をすることによって,オープンソース開発のイロハを実地に経験することができた。あらためて感謝をしたい。またIPAの「未踏ソフトウエア創造事業」という制度によって,わたしは約半年間,自分が長年あたためてきた夢を実現することができた。この制度のおかげである。深く感謝する。

 一人の未踏プログラマとして,何を考え,どのようなアプローチで問題に取り組んだかは,確かに一つのケース・スタディに過ぎない。普遍的に適用可能だとか,誰にでも応用可能などとはけっして言わない。それでも,こういった経緯を残すことによって,自分自身で問題を整理しより深く理解することができた。さらに他の人がそのプロセスから何かを学び,さらにより良いものを,より素晴しいものを作る時のベンチマークとして利用できるとするなら,このような手記を書くことはあながち無駄とは言えないと思う。これをきっかけに一人でも「未踏」に挑戦してくれれば幸いである。

 これは,わたしにしか書けない,わたしのストーリーであり,それがわたしにとっての未踏プロジェクトであった。

ツール開発より怖い税金処理

 「未踏」では,ツールが完成して「おめでとう!」で終わりではない。契約上は,成果報告書の提出,各種費用の精算などがある。成果報告書は,書きためたメモを整理して書いたのでそれほど工数はかからない。問題は確定申告であった。

 「未踏」の人件費は,プロジェクト管理組織からわたし個人へ「事業費」として振り込まれる。「未踏」以前は会社から給与を支給されていたので,当然ながら給与所得と,「未踏」の事業所得があることになる。言ってみれば個人事業主である。

 各種必要経費はすでに別枠で実費精算しているので,わたしの人件費たる「事業費」というのには,実質的にほとんど経費というのは発生しない。ということはそれがまるまる所得ということになる。サラリーマンの場合,収入に対してみなしでいろいろ控除があって,所得金額は収入に比べて低めに抑えられているという事実を,わたしはこのとき初めて知った。

 また,個人事業主というのは,いろいろ必要経費で落とせるので税法上有利であるというような風説をよく耳にするが,こと「未踏」の場合,個人事業主として人件費を「事業費」として受け取る限り,それは難しい。どどーんと税金を引かれるのである。

 それでも青色申告をすれば,いろいろ節税ができるらしい。だが,青色申告をするためには前年に届け出をしていないとダメなわけで,そんなことを3月の確定申告をする時に知っても,時すでに遅しであった…トホホ。


IPA Spring 2003での出展

写真A●IPA Spring 2003の展示会場ブースにて
 2003年5月20日から23日まで,お台場にある東京ビックサイトでIPA Spring 2003という展示会がビジネスシヨウに併設という形で開催された。「未踏」の開発者たちも出展する機会を与えられた。ビジネスシヨウと違って,「未踏」の展示は,学会のポスター・セッションみたいな感じで,一コマのブースにポスターとデモ用機材,ディスプレイ1台という構成である。わたしも後半2日間出展した(写真A)。

 わたしのツールは非常に地味なので,どのくらいの人がブースに足を運んでくれるか,ふたを開けてみるまでちょっと不安だったが,ビジネスシヨウから流れてくる人で意外とにぎわった。わたしが日ごろお付き合いのある分野からちょっと広がった方たちが,話を聞いてくれた感じがした。

 また,ほぼ同時にLinux World Expoも開催されており,知人も足を運んでくれた。論文や成果報告書などを100部コピーして持参したが,2日目の夕方にすべてなくなったので,延べ約100人の方にわたしのツールをじっくりご説明したことになる。2日間立ちっぱなしだったので正直オジサンには辛かったものの,なかなかいい経験をさせてもらった。