発表会の4K素材をhomenasにコピーしたとき、最初の数秒だけ速く、そこから一段遅くなって落ち着きました。txgを回すtxg.c、dirtyデータを数えるdsl_pool.c、書き込みを遅らせるdmu_tx.c(合わせて4,408行、公開パラメータ12個)を読むと、メモリにためておける量と、それに近づいたときに書き込みを1件ずつ眠らせる仕組みが書かれていました。txgの流れ、syncのきっかけ、締め切りの仕組み、dirtyデータの目盛り、遅延の曲線、書き込み1件が通る関所までを7枚の図にまとめます。
続きを読む »
投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 上級
SLOGを足したのに何も速くならなかった件は、当時「非同期書き込みだったから」で片付けていました。ZIL本体のmodule/zfs/zil.c(4,920行、公開パラメータ8個)を読むと、書き込みのたびに変更の記録が作られ、fsyncが来なければディスクに書かれないまま捨てられていました。fsyncが返るまでの道筋、ログブロック(lwb)の7つの状態、データをログに入れるかどうかの分かれ道、fsyncの相乗りの待ち方、ZILブロックの置き場所の順番までを8枚の図にまとめます。
続きを読む »
投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 上級
日曜21時のscrubが家族の動画配信とぶつかってカクついた件は、時間をずらして片付けたまま、なぜぶつかったのかは分かっていませんでした。OpenZFSのI/Oスケジューラmodule/zfs/vdev_queue.c(1,195行、公開パラメータ27個)を読むと、scrubはかなり慎重に通常のI/Oへ道を譲るように作られていました。9本のI/Oクラス、次のI/Oの選び方、非同期書き込みの上限の動き方、scrubの遠慮の仕組み、そしてmasterで入った「SSDはキューを通らない」変更までを図にまとめます。
続きを読む »
投稿者: 宮田 | カテゴリー: パフォーマンス | 難易度: 上級