ゲームラグ白書 › L11 ディスク
HDDのシーク遅延 HDD seek latency
原因ID dk-hdd · 主担当 インフラチーム・サーバーインフラ · 副担当 インフラチーム・DBインフラ, ゲーム開発チーム・サーバー開発
図と実験のあるメインページでこのカードを開く →
HDDはヘッドがプラッタ上を移動する(シーク、seek)必要があるため、散らばったデータの読み書きに1回あたり10ms近くかかります。
なぜ 古いサーバーや低価格ストレージでHDDを使用 → すると ランダムな読み書きのたびに約10ms → 画面では 全体的な保存・ロードの遅延
- 症状
- 入力遅延
- 要因
- 遅延
- 誰に起きるか
- サーバー全体
- いつ
- 常に
- 担当
- 主担当 インフラチーム・サーバーインフラ · 副担当 インフラチーム・DBインフラ, ゲーム開発チーム・サーバー開発
- ゲーム開発チームの対応
- シーケンシャル書き込み中心の設計。
- インフラチームの対応
- サーバー機器・OS:SSDに交換(ランダムな読み書きが多い保存用ディスクから)。DBサーバー:ランダムな読み書きが最も多いDBディスクを先にSSDに交換。
- グラフでは
- 最初から常に高い · ディスクの読み書き遅延(r_await・w_await)
- 確認箇所
- lsblk -d -o NAME,ROTAで回転ディスク(HDD)かどうかを確認し、iostat -x 1のr/s・w/sとr_await・w_awaitを確認。仮想サーバーはクラウド・ストレージの仕様でディスクの種類を確認
- 該当する場合
- 回転ディスクで、毎秒の要求が数十〜100件あまりの水準なのに、r_await・w_awaitが常に数ms〜数十ms
- 該当しない場合
- SSDなのに遅延が高いなら、キューの飽和(dk-iops)かバーストクレジットの枯渇(dk-burst)側
- 確認手段
- インフラのツールで確認(ゲームコード不要)
出典
- Designs, Lessons and Advice from Building Large Distributed Systems (LADIS 2009 keynote) Google
ディスクシーク1回10ms、ディスクからの1MBシーケンシャル読み出し20ms - Exos X18 Data Sheet Seagate
7,200rpm HDDの平均回転待ち4.16ms、4Kランダム読み出し170 IOPS - lsblk(8) — Linux manual page util-linux
-oで出力する列を選択、デバイストポロジーの列にROTA(回転型かどうか)を含む - ABI stable symbols Linux kernel
/sys/block/(ディスク)/queue/rotational:デバイスが回転型か非回転型かを示す - iostat(1) — Linux manual page sysstat
-x:r/s・w/s、r_await・w_await(キューで待った時間を含む、要求あたりの平均処理時間)
あわせて読みたい原因
同じ層:L11 ディスク
同じ症状(入力遅延)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る