バグベアードを利用したプロファイリング

今現在、バグベアードを利用してプロファイリングをやろうなどと、輪をかけて馬鹿なことを考えているとこなんですが、実際のところ、いまのバグベアードに一切手を入れなくてもバグベアードによって出力されたログを解析するツールを用意するだけでプロファイリングできないことはないんですよね。

最初はバグベアードによるオーバーヘッドがかなりあるだろうからプロファイリングの為にはもう一ひねり必要かなとも考えていたのですが、市販のプロファイリングツールであってもプロファイラの為にシステムリソースがなんらかの形で喰われることには変わりが無く、結局のところ影響の程度問題の差に過ぎないんですよね。

で、実は今、お仕事のほうで弄ってるプログラムでテラ単位クラスのボリュームのデータを処理するものがあるんだけど、このプログラム、数十GiBクラスのデータなら特に問題ないんだけど、数百GiBクラス以上のボリュームのデータを処理してると極端にパフォーマンスが落ちちゃうんですよ。で、まぁ、パフォーマンスの問題ですから、まず最初にやるべきことはプロファイラでどこでなにがネックになっているのか調査するのが先決なんですがプロファイリングのデータが膨れ上がり過ぎてプロファイラがコケやがるんですよ。orz

そこで、話がバグベアードに戻るわけですがもっと出力する情報量を絞ったロガークラスとパイプへの出力を行うライタークラス、そしてそのデータを受け取ってプロファイリングデータを生成するプログラムを作れば結構イケてるものに仕上がるじゃないかなぁと。バグベアードによるオーバーヘッド分をどうするのかって問題はありますが、その点については簡潔主義に倣い最初はオーバーヘッドに対する処置は一切なしで様子を見てみようかと。

まぁ、お仕事のほうの問題は早急に片付けにゃならんので、測定用のコードをちまちまと手作業で埋め込むことでお茶を濁さざるを得ないんですが、バグベアードベースのプロファイラは今後の為にも用意しておこうかなと。