Linux perfで分散アプリケーションをプロファイリング:実践ガイド
成熟したアプリケーションを最適化するのは、干し草の山から針を探すようなものです。真のパフォーマンス・ボトルネックを特定する最善の方法は、直感ではなくデータに意思決定を任せることです。実際、最も時間を消費するコードは、往々にして最も明らかでないものです。
コードが遅いと疑ったとき、まず証拠を確認してから修正します。
プロファイリングは、その直感を測定可能な事実に変えます。市場には数十のプロファイラがありますが、マルチスレッドや分散システムに適したツールを選ぶのは困難です。Callgrindのような従来の命令カウント・プロファイラは、特に激しいミューテックス競合下では、ウォールクロック時間ではなく命令数を測定するため、タイミングを歪める可能性があります。
一方、統計的プロファイラは、低オーバーヘッドで実行中のプログラムをサンプリングするため、複雑な並行ワークロードに最適です。Linuxのperfは、このアプローチの代表的な例です。
以下は、perfとBrendan GreggのFlameGraphを組み合わせて、分散アプリケーションのホットスポットを特定するステップ・バイ・ステップのワークフローです。例は、RTI Connext 5.3.0のc/hello_dynamicサンプルを対象とします。
1. perfをインストール
Ubuntuでは:
sudo apt-get install linux-tools-common linux-tools-3.13.0-107-generic
2. FlameGraphをクローン
リポジトリを便利な場所(例:ホーム・ディレクトリ)にクローン:
git clone https://github.com/brendangregg/FlameGraph
3. サンプルをビルドrti_workspace/examples/cに移動し、デバッグ・シンボル付きでコンパイル:
export DEBUG=1 make -f makefile_Hello_x64Linux3gcc4.8.2プラットフォームに合うmakefile名に置き換えてください。
4. パブリッシャをプロファイリングしながら実行
サブスクライバをバックグラウンドで起動し、perfを起動:
objs/x64Linux3gcc4.8.2/Hello sub & sudo perf record -g objs/x64Linux3gcc4.8.2/Hello pub短いテスト期間後、
Ctrl+Cでパブリッシャを停止。perfがperf.outを生成します。
5. FlameGraph用にデータを変換
perf出力を折りたたみスタック・ファイルに変換:
perf script -f | ~/FlameGraph/stackcollapse-perf.pl > out.perf-folded炎グラフを生成:
~/FlameGraph/flamegraph.pl out.perf-folded > perf.svg
6. 結果を検査
Webブラウザでperf.svgを開きます。横軸は各関数で費やされた時間を示し、積み上げ棒はコール・スタックを表します。棒をクリックするとそのスタックにズームインします。サブスクライバなしでパブリッシャを実行すると、グラフの右側部分が消え、DDSがサブスクライバ存在時のみデータを送信することを確認できます。
perfには他にも多くのオプションがあります - サンプリング周波数の調整、カーネル・コードの除外、特定CPUへのフォーカスなど。ヒントや補完的なツールを発見したら、コメントで共有してください。
ハッピー・プロファイリング!
モノのインターネットテクノロジー
- 医療におけるAI:実証済みの実用的な5つの活用事例と具体例
- CNC木工ルーター:高品質家具などへの多用途・高精度対応
- Microchip、スケーラブルな宇宙ミッション向けArmベースMCUを発表 - COTSから耐放射線強化まで
- 誘導型近接センサー:回路設計、機能、実用応用
- アナログセンサーとデジタルセンサー:種類、応用、実例
- EthereumとGoogle Cloudで構築するハイブリッドブロックチェーン・クラウドアプリケーション
- React NativeとAWSで構築するスケーラブルなサーバーレスモバイルアプリ
- ZigBeeメッシュが不足する4つのアプリケーション:スター型トポロジーがより適するケース
- ローコードプラットフォームでITボトルネックを解消:デジタルトランスフォーメーションをシンプルに
- Ovo Energy、VChargeスマートグリッド買収で分散型エネルギー戦略を強化
- モリブデンは他元素と合金化できるか? 合金化と高温利用の専門的知見