
2025/12/27 20:30
**フレームグラフ 対 ツリーマップ 対 サンバースト(2017)**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
概要:
Flame グラフ(SVG)はディスク使用量を高レベルで明確に示します。たとえば、Linux 4.9‑rc5 では
drivers ディレクトリが全容量の50%以上を占め、drivers/net サブディレクトリは約15%です。Tree マップ(macOS の GrandPerspective、Linux の Baobab)は非常に大きなファイルを素早く検出できますが、高レベルのラベルが欠けています;Baobab のツリー表示では各ディレクトリの横にミニバーグラフが表示されます。Sunburst(Baobab の極座標図)は視覚的に印象的ですが、角度で大きさを判断するため長さや面積よりも誤解しやすいです。他のツール―ncdu の ASCII バーと du -hs * | sort -hr ―はテキストベースで迅速なサマリーを提供しますが、同時に一階層のみ表示されます。
提案されたユーティリティは、これら三つの可視化(Flame グラフ(デフォルト)、Tree マップ、Sunburst)すべてを組み合わせるものです。Flame グラフは読みやすさ・印刷性・最小スペース使用量が優れているため、多数のサンプルファイルシステムでテストした後にデフォルトとして採用されます。このアプローチは、ディスク使用量を簡潔かつ印刷可能なスナップショットとして提供し、ユーザーや開発者がスペースを占有する項目をより効率的に検出できるよう支援します。アイデアは ACMQ の「The Flame Graph」記事と「A Tour through the Visualization Zoo」に引用された既存の研究に基づいています。
反映された主なポイント: flame グラフの高レベルビュー、Tree マップの大きなファイルを素早く検出できるがラベルが欠けている点、Sunburst の視覚的魅力とサイズ認識の問題、他ツールの制限、および提案ツールの三つのビュー(デフォルトは flame グラフ)と引用元への参照。
本文
昨日、ファイルシステムのフレームグラフについて投稿しました。ディスク容量がどこで消費されているかを可視化する方法として示しています。多くの方からは、du、ncdu、トリーマップ、サンバーストなど別のツールやビジュアライゼーションを好むといったご意見が寄せられました。このテーマに関心が高いこともあり、同じファイル(Linux 4.9‑rc5 のソース)をさまざまな形で可視化し、比較してみました。
フレームグラフ
FlameGraph(SVG)を使用:
- マウスオーバーするとツールチップが表示され、クリックでズームできます。
- 長くラベル付けされた長方形を見ると、それらの長さを比較するだけで一目で構造がわかります。最も長いものが先頭に来ます。
drivers ディレクトリは全体の約 50 % を占めているように見え、drivers/net は約 15 %。多くの小さな長方形は幅が薄くラベル付けできないため、全体としては重要度が低いです。フレームグラフを紙に印刷したり、スライドデッキにスクリーンショットを入れたりしても、多くのハイレベル情報をコンパクトに伝えることができます。
ツリーマップ
GrandPerspective(macOS)を使用:
- まず目で見たときに何がわかる? 大まかな比率(
50 % など)は把握しづらい。drivers - マウスオーバーすると詳細情報が表示されますが、スクリーンショットではその点は伝えきれません。
- ただし、左上に大きなファイル群(
以下)があることは一目でわかります。drivers/gpu/drm/amd
Baobab(Linux)を使用:
- 左側のツリーリストから
ディレクトリが明らかに大きいことが分かります。ミニバーグラフで長さ比較も行えます(◎)。drivers - サブディレクトリに入るにはクリックして展開する必要があります。
drivers/net のボックスをハイライトしました。最初から見ると全体の何%になるのでしょうか? 長さよりも面積で比較したほうが難しく、フレームグラフとは違った感覚になります。また、フレームグラフに比べてラベルが欠落しています(SpaceMonger など他のツリーマップではラベル付きです)。ツリーマップ全体の利点は垂直スペースを有効活用できることです。
サンバースト
Baobab(Linux)を使用:
- これはフレームグラフと同じく、極座標で描かれた逆アイシクルレイアウトのアダジャンクション図です。
- 見た目が美しく、「いつも感動させる」と言われています。サンバーストは新しい円グラフとも言えます。
深いスライスほど大きく見えて視覚的に膨張します。画像の小さいスライス 2 は 27.7 MiB、見た目で大きそうなスライス 1 は 25.6 MiB を表しています。この可視化は実際にはスライス 1 の方がスライス 2 よりも小さいことを示しますが、多くの人は逆に考えるでしょう。正しく理解するには角度(長さや面積ではなく)を比較する必要があり、より難しい知覚タスクです。
ncdu
/home/bgregg/linux-4.9-rc5 ----------------------------------------------- /.. 405.1 MiB [##########] /drivers 139.1 MiB [### ] /arch 37.5 MiB [ ] /fs 36.0 MiB [ ] /include 35.8 MiB [ ] /Documentation 32.6 MiB [ ] /sound 27.8 MiB [ ] /net 14.7 MiB [ ] /tools 7.5 MiB [ ] /kernel 6.0 MiB [ ] /firmware 3.7 MiB [ ] /lib 3.4 MiB [ ] /scripts 3.3 MiB [ ] /mm 3.2 MiB [ ] /crypto 2.4 MiB [ ] /security 1.1 MiB [ ] /block 968.0 KiB [ ] /samples [...]
ASCII のバーグラフで行長比較ができますが、ディレクトリ階層は一度に一レベルしか表示されません。
du
$ du -hs * | sort -hr 406M drivers 140M arch 38M fs 36M include 36M Documentation 33M sound 28M net 15M tools 7.5M kernel 6.1M firmware 3.7M lib 3.5M scripts 3.4M mm 3.2M crypto 2.4M security 1.2M block 968K samples [...]
読み取りが必要ですが、迅速で私の通常の出発点です。
どれを使うべきか?
ファイルシステム使用量ツールを設計する際、どの可視化手法を提供すべきでしょうか? 理想的にはフレームグラフ、ツリーマップ、サンバーストを全て用意し、同じデータセットを異なる方法で理解できるようにしたいです。デフォルトビューとしてはおそらくフレームグラフを選びますが、多数のサンプルファイルシステムでテストして、本当に最適か確認する必要があります。
フレームグラフについては、私の記事 The Flame Graph(CACM)をご覧ください。
異なる可視化手法については、Jeffrey Heer、Michael Bostock、Vadim Ogievetsky の ACMQ 記事 A Tour through the Visualization Zoo(CACM)の階層に関するセクションを参照してください。