DHAT - 動的ヒープ 分析ツール チートシート
DHAT - 動的ヒープ 分析ツール チートシート
DHAT(動的ヒープ 分析ツール)はValgrind ツールは最も メモリー プロファイラーから異なるクエスチョンに回答:ただ「メモリー いくら割り当てたか」、それはメモリーが実際にどのように使用されたレポート:割り当てされてされた決して読み、書かれた一度および決して触れられていない、非常に短命割り当て、および割り当てされた多くより大きいバイト実際にアクセス。その使用ビューはサイズのみプロファイラー が見ることができない無駄をしばしば示す。
インストール
| Platform | Command |
|---|---|
| Debian/Ubuntu | sudo apt install valgrind |
| Fedora/RHEL | sudo dnf install valgrind |
| Arch Linux | sudo pacman -S valgrind |
| macOS | 制限サポート;LinuxをLinux を好む |
| Verify | valgrind --tool=dhat --version |
有用なスタック トレース用
-gでプログラムをビルド。DHATはValgrind下で実行し、かなりの遅くなりを予期—これは分析ツール、本番プロファイラーではありません。
DHAT実行
valgrind --tool=dhat ./my-program
# → dhat.out.<pid>を生成
| Option | Purpose |
|---|---|
--dhat-out-file=FILE | 出力パス |
--mode=heap | デフォルト ヒープ プロファイリング |
--mode=copy | プロファイル メモリー コピー(memcpyなど) |
--mode=ad-hoc | カスタム計測ポイント |
--num-callers=N | レポートのスタック 深さ |
結果を表示
DHAT出力はJSON、バンドルHTMLビューアーで表示:
# ビューアーを開きdhat.out.<pid>をロード
firefox /usr/libexec/valgrind/dh_view.html
| UI element | Shows |
|---|---|
| Tree of allocation points | コール スタック グループ化 |
| Total / max bytes | サイト毎ボリューム |
| Reads / writes | メモリーが実際にアクセスされた量 |
| Lifetimes | ブロックが生きた長さ |
| Sorting | 最悪いのを見つけるため任意メトリック |
重要なメトリック
| Metric | Reveals |
|---|---|
| Total bytes | このサイトからの全体割り当てボリューム |
| Max bytes | ピーク同時使用 |
| Reads / writes | アクセス強度 |
| Reads = 0 | 割り当てが決して読まれた—純粋な無駄 |
| Writes = 0 | 決して初期化—可能バグまたは無駄 |
| Short lifetimes | チャーン;スタック/プーリング候補 |
| Access ratio | アクセスされたバイト対割り当てられたバイト |
「読み取り = 0」ケースは古典的なDHAT検出:メモリー プログラムそれぞれ割り当て、埋める、解放するもの何も決して読むなし。
共通検査結果と修正
| Finding | Likely fix |
|---|---|
| Many tiny short-lived allocations | スタック 割り当て、アリーナ、またはオブジェクト プール |
| Large block, tiny accessed portion | のみ割り当て使用;遅延ロード |
| Never-read allocations | 作業まるごと削除 |
| Repeated alloc/free of same size | バッファー再利用 |
| Oversized containers | 正確な容量予約 |
コピー モード
valgrind --tool=dhat --mode=copy ./my-program
コピー モードプロファイルmemcpy/memmoveボリューム コール サイト—プロファイリング コピーで時間示し、どのコードが責任を知る必要がある有用。
アドホック モード
アドホック モードはコード注釈DHAT クライアント リクエスト任意イベントをカウント、DHATを汎用「どのコール スタックはこれをほとんどする」カウンター に変える。
DHAT対関連ツール
| Aspect | DHAT | massif | heaptrack | Bytehound |
|---|---|---|---|---|
| Focus | メモリー使用方法 | ピーク使用時間 | 割り当てプロファイリング | インタラクティブ 探索 |
| Overhead | 高い(Valgrind) | 高い(Valgrind) | 低い | 低い |
| Unique insight | 読みたくない/使用されていない ブロック | ピーク スナップショット | チャーン +リーク | 豊か フィルタリング |
| Best for | 無駄作業検出 | ピーク 削減 | 高速現実的 実行 | ディープ インタラクティブ 分析 |
現実的 実行低オーバーヘッド プロファイリングheaptrackまたはBytehoundを使用;メモリーが割り当てされたかどうか実際に使用されたことを知ることを望む場合DHATに到達。