クライアントPCから見た社内インフラのパフォーマンスを計測するためのツール、infraBench を公開しました。
。。。と言っても、フレームワークとプラグイン一本しかまだ登録されていないですが(汗。
社内のインフラのパフォーマンスって案外定量的に計測されておらず、計測されていたとしても各社独自の方法で行われているので、客観的に早いのか遅いのか、快適なのかそうでないのかを知る術がほとんどなかったりします。
また、インフラの計測といっても非常に多岐に渡り、スループットやレイテンシ、トラフィック、などなどいろいろな計測方法やツールがあります。しかし、これらの情報を適度にミックスしながら比較し、現場の「遅い」という体感を数値に表すのは至難の業です。
infraBench を使うことで多角的なベンチマークを手軽に行う環境を構築し、更に他の環境と比較することでどこに問題があのかをより簡単に把握することができる環境構築を目指します。
その環境を構築するためにも、実際に使ってベンチマークを取って頂ける方や、プラグインを開発して頂ける方の協力が必要です。よろしくおねがいします。
つかいかた
現状、githubで公開しています。 git pull した後に config.txt を必要に応じて書き換えて infraBench.py を実行するだけです。計測結果の表示は全く整形していないのでまだ非常に見づらいです。
config.txt のかきかた
config.txt は一行毎に実行するベンチマークの命令を記述します。
サンプルで登録されているものはこのようになっています。
fileStat(path = './tmp/1k' , size = 1024 , count = 10)
fileStat(path = './tmp/10k' , size = 10240 , count = 10)
fileStat(path = './tmp/100k' , size = 102400 , count = 10)
fileStat(path = './tmp/1000k', size = 1024000, count = 10)
filestat がプラグインの名前、そのあとの () で囲われた部分がこのプラグインを実行するときの引数になります。
この引数の内容はプラグイン毎に異なります。
この例では、fileStat プラグインが4回呼び出され、それぞれカレントディレクトリの下に 1KB/10KB/100KB/1MB のファイルを 10 個づつ作り、それぞれのファイルの情報を取得するのにかかった時間と CPU サイクル数を計測します。
プラグインアーキテクチャ
infraBench は非常に単純なプラグインアーキテクチャを採用し、ほとんど手間無く機能を追加することができるようになっています。
プラグインで必要な関数は 3 つで、 preProcess(), process(), postProcess() になります。
infraBench は実行の際、config.txt で指定された実行順序に preProcess() を全て実行し、次に process()、最後に postProcess() を実行します。
各関数はargs と valuesという引数を二つ取り、args は config.txt で設定された値を辞書として取ります。values は infraBench 全体で蓄積していく値のブロックを取ります。
各関数は必要に応じて値の追加や既存の値の加工、削除などを行ってその結果を返り値として返します。これにより、 infraBench 全体ではあたかもプラグインというノードを直列に繋いだノードのようなふるまいになり、最後の処理が終った時の返り値に全ての情報が入っていることになります。
詳しくは modules/fileStat.py を読んでみれば何をすべきなのかわかります。
さいごに
infraBench は基本になる骨組はできているものの、必要なプラグインは全く整っていない状態です。ぜひとも一緒に機能を増やし、より手軽に社内ネットワークの状況を把握できる環境を構築していきましょう!!ご協力おねがいします。