Linuxのパフォーマンス計測ツールの違いとか
詳解システムパフォーマンス4章で学んだことや、直近で利用したツール等のざっくりしたまとめ。引用はすべて詳解システムパフォーマンスの4章のもの。
カウンタタイプ
カーネルは、イベントの回数を数えたカウンタ( counter )と呼ばれるさまざまな統計を管理し ている。
カウンタはデフォルトで有効になっており、カーネルによって継続的にメンテナンスされている ので、 「タダ」で使えると考えてよい。カウンタを使うときの唯一の追加コストは、ユーザーラン ドからの値の読み出しである(無視できる)。
カーネルはIOやCPU利用の実績を/sys
や/proc
配下のファイルに書き込んでいる。これは標準でデフォルトになっているため、読み出しコストのみで参照することができる。多くのXstat系のツールはこの形式になっている。
カウンタタイプのツールとしては
- vmstat
- iostat
- sar
などがある。個人的にはdstatというstat族のキメラ的なツールがあるでそちらを利用している。
トレーサタイプ
イベントごとのデータを集めてくるツールのこと。システムコール、ネットワークパケット、ディスクIOなどのイベント発生時の情報を収集します。頻度の高いイベントを対象にすると観測自体に負荷が高いため、それを考慮に入れること。またパフォーマンスの都合上、デフォルトで無効にされているものもあるため、利用した後は無効にするなどしてもとに戻すこと。
トレーシングはデータをキャプチャするために CPU にオーバーヘッドをかけ、保存のためにかなりの量のストレージを必要とすることがあるため、一般にデフォルトでは有効にされていない。
- ftrace カーネルトレーサ。呼び出しているカーネルのコードのスタックや引数などをトレースできる。
- gdb デバッガ。ソースコードや機械語の特定の行でのトレースを行う
- strace プロセスのシステムコール・シグナルをトレースする
プロファイラ
ある実行バイナリに異常な時間がかかっているというときはコンパイルでデバッグオプションでビルドした後、gprofで処理に時間がかかっている関数を調べることができる。
参考: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
を使ってみるのもいいかもしれない。
詳解システムパフォーマンスおすすめです。