**フレームグラフ 対 ツリーマップ 対 サンバースト(2017)**

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)を使用:

  • まず目で見たときに何がわかる? 大まかな比率(
    drivers
     50 % など)は把握しづらい。
  • マウスオーバーすると詳細情報が表示されますが、スクリーンショットではその点は伝えきれません。
  • ただし、左上に大きなファイル群(
    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)の階層に関するセクションを参照してください。

同じ日のほかのニュース

一覧に戻る →

2025/12/30 6:46

USPS(米国郵便公社)が切手印日付システムの変更を発表しました。

## Japanese Translation: > **概要:** > USPSは最終規則(FR Doc. 2025‑20740)を発行し、国内郵便マニュアルに「セクション 608.11 —『切手印と郵便保有』」を追加しました。この規則では、切手印の定義が正式に示され、該当する印記がリストアップされています。切手印は印付け日でUSPSがその物件を保有していることを確認しますが、必ずしもアイテムの最初の受理日と同一ではありません。USPSは通常業務で全ての郵便に切手印を貼らないため、切手印が欠落していても、その物件が未処理だったとは限りません。機械による自動切手印は、施設内で最初に行われた自動処理操作の日付(「date of the first automated processing operation」)を表示し、投函日ではなく、地域輸送最適化(RTO)や路線ベースのサービス基準により受理日より遅くなることがあります。切手印は小売ユニットからの輸送後やカレンダー日がまたがる場合に付けられることが多いため、郵送日を示す信頼できる指標ではありません。同一日の切手印を確保するには、小売窓口で手動(ローカル)切手印を依頼できます。小売窓口で料金を支払うと「Postage Validation Imprint(PVI)」が付与され、受理日が記録されます。また、郵便証明書、登録メール、または認定メールは提示日を裏付ける領収書として機能します。この規則の影響は税務申告において重要です。IRC §7502 は、文書が期限までに物理的に届けられなかった場合に、提出の適時性を判断する際に切手印の日付を使用しています。

2025/12/30 1:07

**Zig における静的割り当て** Zig のコンパイル時メモリ管理を使えば、実行時ではなくコンパイル時にストレージを確保できます。データ構造のサイズが事前に分かっている場合やヒープ割り当てを避けたいときに便利です。 ### 重要概念 - **コンパイル時定数** `const` や `comptime` の値を使い、コンパイラがコンパイル中に評価できるサイズを記述します。 - **固定長配列** リテラルサイズで配列を宣言します。 ```zig const buf = [_]u8{0} ** 128; // 128 バイト、すべてゼロ初期化 ``` - **静的フィールドを持つ構造体** 固定長配列やその他コンパイル時に決まる型を含む構造体を定義します。 ### 例 ```zig const std = @import("std"); // 静的サイズのバッファを持つ構造体 pub const Message = struct { id: u32, payload: [256]u8, // 256 バイト、コンパイル時に確保 }; // 静的割り当てを使う関数 fn process(msg: *Message) void { // ヒープ割り当ては不要;msg はスタック上またはグローバルに存在 std.debug.print("ID: {d}\n", .{msg.id}); } pub fn main() !void { var msg = Message{ .id = 42, .payload = [_]u8{0} ** 256, // すべてのバイトをゼロで初期化 }; process(&msg); } ``` ### 利点 - **決定的なメモリ使用量** – サイズはコンパイル時に分かる - **実行時割り当てオーバーヘッドがゼロ** – ヒープアロケータ呼び出しなし - **安全性** – コンパイラが境界と寿命を検証できる ### 使うべき場面 - 固定長バッファ(例:ネットワークパケット、ファイルヘッダー) - 短時間しか存続しない小規模補助データ構造 - 性能や決定的な動作が重要な状況 --- コンパイル時定数・固定配列・構造体定義を活用することで、Zig は最小限のボイラープレートで最大の安全性を保ちつつメモリを静的に割り当てることができます。

## Japanese Translation: > **概要:** > このプロジェクトは、Zigで書かれた軽量Redis互換のキー/バリューサーバー「kv」を構築し、最小限のコマンドセットで本番環境に適した設計を目指しています。コアデザインでは起動時にすべてのメモリを確保することで、実行中にダイナミックヒープを使用せず、レイテンシスパイクやユース・アフター・フリー(use‑after‑free)バグを回避します。接続は`io_uring`で非同期に処理され、システムは3つのプール(Connection、受信バッファプール、送信バッファプール)を事前確保し、デフォルトでは約1000件までの同時接続数をサポートします。各接続は設定パラメータから派生した固定サイズの受信/送信バッファを使用します。 > コマンド解析はRedisのRESPプロトコルのサブセットに従い、Zigの`std.heap.FixedBufferAllocator`を用いてゼロコピーで解析し、各リクエスト後にアロケータをリセットします。バッファサイズは`list_length_max`と`val_size_max`に依存します。 > ストレージは未管理型の`StringHashMapUnmanaged(Value)`を使用し、初期化時に`ensureTotalCapacity`で容量を確保します。キーと値は共有`ByteArrayPool`に格納され、マップはポインタのみを保持します。削除操作では墓石(tombstone)が残り、墓石数が増えると再ハッシュが必要になる場合があります。 > 設定構造体(`Config`)は `connections_max`、`key_count`、`key_size_max`、`val_size_max`、`list_length_max` などのフィールドを公開し、派生アロケーションで接続ごとのバッファサイズを決定します。デフォルト設定(総計約748 MB、2048エントリ)では `val_size_max` または `list_length_max` を倍増すると、割り当て量が約2.8 GBに上昇する可能性があります。 > 今後の作業としては、カスタム静的コンテキストマップ実装の改善、より良いメモリ利用を実現する代替アロケータの探索、境界検査(fuzz)テストの追加による限界確認、および墓石再ハッシュ処理への対応が挙げられます。

2025/12/30 4:12

**「ラスト・ビハインド:未来派フェチズム、備蓄主義と地球放棄(2019)」**

## Japanese Translation: --- ## 要約 この記事は、エリート主導の「プレッパー」プロジェクト―人気文化フランチャイズから高名な企業・政治イニシアチブまで―が、特権階級の脱出を優先しつつ社会全体の修復を無視する加速化されたサバイバリズムであると主張しています。 まず、ベストセラーのクリスチャン・ファンダメンタリストSFフランチャイズ「レフト バック(Left Behind)」シリーズ(LaHaye & Jenkins, 1995)を取り上げます。この作品は捕集(Rapture)を世界的災害として描き、ハイテク装備(銃、SUV、グルフストリームジェットなど)を紹介しています。フランチャイズはビデオゲーム・映画・商品展開へと拡大し、ニコラエ・カルパチアなどのキャラクターが登場します。 次に、9/11後に復活した現代米国プレッパー文化に移ります。バンカー建設や備蓄を含み、この傾向はリアリティ番組「ドゥームズデイ・プレッパーズ(Doomsday Preppers, 2011–2014)」によって広まりました。 右派民兵についても取り上げられ、ジョージア州のIII %セキュリティフォース―「三パーセント」の植民者神話に根ざし、銃所有と反政府感情を強調しています。記事はまた、「米国で最も武装した人」と称されるメル・バーンスタイン(Mel Bernstein)を紹介し、260エーカーのコロラドスプリングス拠点に4,000以上の兵器、ペイントボールパーク、モトクロスパーク、銃店、射撃場があると述べています。 その後、テック・エリートプロジェクトが同様のマインドセットを反映していることに焦点を当てます。イーロン・マスクのSpaceX、ビオスフィア 2(1990年代初頭のアーコロジー実験でエドワード・バースによって資金提供され、後にスティーブ・バノンが救済)、ハワイのHI‑SEAS(火星植民地シミュレーションは望遠鏡設置を巡る先住民抗議を無視したとして批判)などです。Appleの「スペースシップ」本社、Google/Facebook従業員住宅、NSAのスター・トレック風制御室も挙げられます。これらのプロジェクトは気候変動、資源枯渇、戦争に対処するために地球から逃れる試みと位置づけられています。 記事は、これらすべての例を「右派加速主義」という広範なイデオロギー的トレンドに結び付けます。加速主義は資本主義崩壊を促進し、「世俗捕集」またはポスト・キャピタリズム未来を実現することを提唱します。著者らは、エリート主導のプレッパー計画が少数特権層に対して生存優先を行い、多くの人々を置き去りにすると結論付けています。そして、このような自己完結型脱出プロジェクトへの継続的投資は、社会格差を深め、公的災害緩和からリソースを逸らし、閉鎖的な宇宙思考企業文化を強化し、社会崩壊を不可避とみなす過激派イデオロギーを正当化する恐れがあると警告しています。

**フレームグラフ 対 ツリーマップ 対 サンバースト(2017)** | そっか~ニュース