▼ カテゴリー「パフォーマンス」の記事(10件)

2026年10月12日(月)

大きなコピーが途中で急に遅くなるのはなぜか — txg.cと書き込みスロットルを読む

発表会の4K素材をhomenasにコピーしたとき、最初の数秒だけ速く、そこから一段遅くなって落ち着きました。txgを回すtxg.c、dirtyデータを数えるdsl_pool.c、書き込みを遅らせるdmu_tx.c(合わせて4,408行、公開パラメータ12個)を読むと、メモリにためておける量と、それに近づいたときに書き込みを1件ずつ眠らせる仕組みが書かれていました。txgの流れ、syncのきっかけ、締め切りの仕組み、dirtyデータの目盛り、遅延の曲線、書き込み1件が通る関所までを7枚の図にまとめます。

続きを読む »

投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 上級

2026年10月10日(土)

fsyncは何を待っているのか — zil.cを読んで、SLOGの答え合わせをする

SLOGを足したのに何も速くならなかった件は、当時「非同期書き込みだったから」で片付けていました。ZIL本体のmodule/zfs/zil.c(4,920行、公開パラメータ8個)を読むと、書き込みのたびに変更の記録が作られ、fsyncが来なければディスクに書かれないまま捨てられていました。fsyncが返るまでの道筋、ログブロック(lwb)の7つの状態、データをログに入れるかどうかの分かれ道、fsyncの相乗りの待ち方、ZILブロックの置き場所の順番までを8枚の図にまとめます。

続きを読む »

投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 上級

2026年10月01日(木)

日曜夜のscrubは、本当は遠慮していた — vdev_queue.cを読む

日曜21時のscrubが家族の動画配信とぶつかってカクついた件は、時間をずらして片付けたまま、なぜぶつかったのかは分かっていませんでした。OpenZFSのI/Oスケジューラmodule/zfs/vdev_queue.c(1,195行、公開パラメータ27個)を読むと、scrubはかなり慎重に通常のI/Oへ道を譲るように作られていました。9本のI/Oクラス、次のI/Oの選び方、非同期書き込みの上限の動き方、scrubの遠慮の仕組み、そしてmasterで入った「SSDはキューを通らない」変更までを図にまとめます。

続きを読む »

投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 上級

2026年09月29日(火)

arc.cを1万1千行読んで、あのL2ARCの失敗をやっと説明できた

RAM 32GBのhomenasに1TBのL2ARCを足して逆に遅くした件は、「L2ARCのヘッダがRAMを食うから」と説明してきました。ただ、それがコードのどこで起きているのかは見たことがありませんでした。OpenZFS masterのmodule/zfs/arc.c(11,841行・203関数)を通読し、ヘッダの7つの状態、arc_read()の骨格、退避と縮小の3者、2026年2月に書き直されたL2ARCのfeedまでを図にまとめます。

続きを読む »

投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 上級

2026年09月10日(木)

レンダーキャッシュを消した直後だけタイムラインがカクつく

homenasで4K素材を編集していて、DaVinci Resolveのキャッシュを掃除した直後だけタイムラインのスクラブがカクつくことに気づきました。犯人はasync destroyのバックログと、キャッシュ/プロキシファイルの高頻度な作成・削除によるプールの空き容量断片化でした。動画編集ワークロード特有のデータセット分離、recordsize設計、async destroyとの競合を避けるチューニングを整理します。

続きを読む »

投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 上級

2026年09月06日(日)

PostgreSQLのIOPSが計算通り出なかった理由がrecordsizeだった話

ワークロードのIOPS要件から逆算してディスク本数を決めたはずのPostgreSQLサーバーで、実際のIOPSが計算値の何分の1も出ていなかったことがあります。犯人はrecordsizeをデフォルトの128KiBのまま放置していたことでした。読み込み増幅の仕組み、なぜ後から変更しても既存データには効かないのか、そして圧縮アルゴリズムの選び方を図解つきで整理します。

続きを読む »

投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 中級

2026年09月04日(金)

スナップショット一括削除の直後にバックアップを繋げて原因調査に半日溶かした話

仕事の基盤チームで、古いスナップショットを一括削除する定期ジョブの直後にバックアップジョブを繋げていたら、原因不明の性能劣化に悩まされたことがあります。犯人はzfs destroy後もバックグラウンドで解放処理が続く非同期解放(async destroy)でした。仕組みとfreeingの監視方法、クローン削除を高速化するlivelist、削除運用でハマりがちな落とし穴を整理します。

続きを読む »

投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 上級

2026年08月17日(月)

SLOGを足したのに何も速くならなかった話、と後で気づいた本当の危険

自宅のhomenasでNFS共有を少し速くしたくて余っていたコンシューマ向けNVMeをSLOGにしたら、体感速度がまったく変わりませんでした。理由は単純で、そのとき動いていたのはほぼ非同期書き込みだったからです。もっと怖かったのは後から知ったPLP(電源損失保護)の話でした。ZILとSLOGの役割分担、SLOGが効く条件、そして「PLPなしSSDをSLOGにする」という最も危険な落とし穴を整理します。

続きを読む »

投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 中級

2026年08月07日(金)

L2ARCを足したら逆に遅くなった

homenasにRAM32GBのまま1TBのL2ARCを足したら、体感速度が足す前より悪化したことがあります。原因は、L2ARCの各エントリのヘッダ情報がARC(RAM)側に間借りしているという構造でした。ARCとL2ARCの関係、この見落としがちな制約、実務での判断フローを整理します。

続きを読む »

投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 中級

2026年08月06日(木)

容量は足りているのに遅い、というやつ

以前、新しいVM基盤の容量見積もりだけ済ませて本番投入し、稼働後に「遅い」と言われて青ざめたことがあります。原因は単純で、IOPS要件を誰も聞いていませんでした。この記事では、ワークロードのIOPS要件からZFSのvdevトポロジーを逆算する実務プロセスを、具体的な数値と自宅VMでの検証ログとともに解説します。

続きを読む »

投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 中級