Yabu.log

ITなどの雑記

Linuxのパフォーマンス計測ツールの違いとか

詳解システムパフォーマンス4章で学んだことや、直近で利用したツール等のざっくりしたまとめ。引用はすべて詳解システムパフォーマンスの4章のもの。

f:id:yuyubu:20190304163451p:plain

カウンタタイプ

カーネルは、イベントの回数を数えたカウンタ( counter )と呼ばれるさまざまな統計を管理し ている。

カウンタはデフォルトで有効になっており、カーネルによって継続的にメンテナンスされている ので、 「タダ」で使えると考えてよい。カウンタを使うときの唯一の追加コストは、ユーザーラン ドからの値の読み出しである(無視できる)。

カーネルはIOやCPU利用の実績を/sys/proc配下のファイルに書き込んでいる。これは標準でデフォルトになっているため、読み出しコストのみで参照することができる。多くのXstat系のツールはこの形式になっている。

カウンタタイプのツールとしては

  • vmstat
  • iostat
  • sar

などがある。個人的にはdstatというstat族のキメラ的なツールがあるでそちらを利用している。

トレーサタイプ

イベントごとのデータを集めてくるツールのこと。システムコール、ネットワークパケット、ディスクIOなどのイベント発生時の情報を収集します。頻度の高いイベントを対象にすると観測自体に負荷が高いため、それを考慮に入れること。またパフォーマンスの都合上、デフォルトで無効にされているものもあるため、利用した後は無効にするなどしてもとに戻すこと。

トレーシングはデータをキャプチャするために CPU にオーバーヘッドをかけ、保存のためにかなりの量のストレージを必要とすることがあるため、一般にデフォルトでは有効にされていない。

プロファイラ

ある実行バイナリに異常な時間がかかっているというときはコンパイルデバッグオプションでビルドした後、gprofで処理に時間がかかっている関数を調べることができる。

  • gprof:C++で関数ごとのCPU利用率を調べる。
  • perf:機能が多いので紹介は略。pert top,perf reportなどでシステムコールなどの統計が取れる

参考:gprofの使い方 https://minus9d.hatenablog.com/entry/20140112/1389502918

他:timeコマンドのvオプション

timeコマンドだけでもioの回数やswappingの発生、rssなどがわかる。

参考:https://kuenishi.hatenadiary.jp/entry/2016/11/02/131046

上記の重厚な?ツール群を試す前に/usr/bin/time -vを使ってみるのもいいかもしれない。

詳解システムパフォーマンスおすすめです。