한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

ゲームラグ白書 › L11 ディスク

fsyncの集中 fsync storms

原因ID dk-fsync · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ, インフラチーム・DBインフラ

図と実験のあるメインページでこのカードを開く →

データを「確実に」ディスクに書き込むよう要求すると、ディスクによっては1回に0.1ms〜数十msかかり、要求が集中するとキューが長くなります。

なぜ 定期保存・ログアウトラッシュで確実な書き込みの要求が集中 → すると ディスクのキューが長くなる → 画面では 保存のタイミングごとにラグ、ログアウト・チャンネル移動の遅延

症状
カクつき, 入力遅延
要因
ストール, 遅延
誰に起きるか
サーバー全体
いつ
一定の周期で, 人が集中したとき
担当
主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ, インフラチーム・DBインフラ
ゲーム開発チームの対応
保存をまとめて一度に(複数の保存を1回のfsyncで)、保存時刻の分散。
インフラチームの対応
サーバー機器・OS:電源保護機能のあるサーバー向けSSD、ディスクのキュー長・fsync遅延の監視。DBサーバー:保存先がDBなら、DBのログディスクも同様のSSDに、コミット遅延の監視。
数値の目安
1回にかかる時間は機器によって異なりますが、おおよそサーバー向けSSD(電源保護機能付き)で0.1ms、一般的なSSDで1〜数ms、クラウドディスクで1〜2ms、HDDで10ms以上です。1つのスレッドが1回ずつ待つと、HDDでは1秒に100回もこなせません。
グラフでは
周期的なスパイク · ディスクのキュー長、フラッシュ・書き込み遅延
確認箇所
iostat -x 1のf/s・f_await(ディスクが処理したフラッシュの数とかかった時間)、w/s・aqu-sz・w_awaitを定期保存・ログアウトの時刻と重ねて確認。古いsysstatはaqu-szをavgqu-szと表示する。クラウドディスクはEBSのVolumeQueueLength・VolumeAvgWriteLatencyを確認
該当する場合
保存時刻・ログアウトラッシュのたびにフラッシュ数とキュー長が一緒に跳ね上がり、w_await・f_awaitが普段の数倍になる。そのとき保存・チャンネル移動が遅れる
該当しない場合
保存・ログアウトと関係ない時刻にキューが跳ね上がるなら、バックアップ・圧縮(dk-backup)かIOPS上限(dk-iops)。フラッシュ数は変わらないのに遅くなるなら、バーストクレジットの枯渇(dk-burst)側
確認手段
インフラのツールで確認(ゲームコード不要)

出典

  1. fsync(2) — Linux manual page Linux man-pages
    fsyncはディスクキャッシュまでフラッシュし、デバイスが完了を通知するまでブロック
  2. Reliability (PostgreSQL Documentation) PostgreSQL
    一般的なSATAディスクと多くのSSDは停電で消える書き込みキャッシュを持つため、確実な書き込みにはバッテリー・電源保護付きのキャッシュが必要
  3. Amazon EBS General Purpose SSD volumes AWS
    クラウドの標準ディスク(gp3)の遅延は1桁ms台、io2 Block Expressは16KiBのI/Oで平均500µs未満
  4. Designs, Lessons and Advice from Building Large Distributed Systems (LADIS 2009 keynote) Google
    HDDのシーク1回で10ms
  5. iostat(1) — Linux manual page sysstat
    -x:f/s・f_await(ディスクが処理したフラッシュ要求の数と平均時間)、w/s、w_await、aqu-sz(旧名avgqu-sz)
  6. Amazon CloudWatch metrics for Amazon EBS AWS
    VolumeQueueLength(完了待ちの要求数)、VolumeAvgWriteLatency(1分平均の書き込み遅延、Nitroインスタンス)

あわせて読みたい原因

同じ層:L11 ディスク

同じ症状(カクつき)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る