ゲームラグ白書 › L11 ディスク
IOPS上限・キューの飽和 IOPS limit / queue saturation
原因ID dk-iops · 主担当 インフラチーム・サーバーインフラ · 副担当 ゲーム開発チーム・サーバー開発, インフラチーム・DBインフラ
図と実験のあるメインページでこのカードを開く →
ディスクが1秒間に処理できる要求数を超えると、キューが長くなって遅延が急増します。
なぜ 読み書きの要求がディスクの処理能力に近づく → すると キューが長くなる(たいてい利用率90%以上で急増) → 画面では 保存・ロードの遅延、同期呼び出しならフリーズ
- 症状
- 入力遅延, フリーズ
- 要因
- 遅延, ストール
- 誰に起きるか
- サーバー全体
- いつ
- 人が集中したとき, 夜のピーク時間帯
- 担当
- 主担当 インフラチーム・サーバーインフラ · 副担当 ゲーム開発チーム・サーバー開発, インフラチーム・DBインフラ
- ゲーム開発チームの対応
- 要求をまとめる、よく読むデータはキャッシュ、ゲームスレッドでディスクを待たないよう非同期に。
- インフラチームの対応
- サーバー機器・OS:より高速なディスク、インスタンスタイプごとのディスク帯域幅・IOPS上限の確認、ディスク利用率・キューのアラート、大きなファイルのコピーは空いている時間帯に。DBサーバー:DBのディスクもIOPS・スループット利用率のアラート、DBインスタンスのスペックごとのディスク上限の確認。
- 数値の目安
- HDDは約150、SATA SSDは数万、NVMeは数十万IOPS。クラウドの標準ディスク(AWS gp3)は3,000 IOPS、毎秒125MiBです。IOPSとは別にある毎秒の転送量の上限を大きなファイルのコピーが使い切ると、小さな書き込みまで詰まります。
- グラフでは
- 上限で頭打ち · IOPS、ディスクのキュー長
- 確認箇所
- iostat -x 1のr/s・w/s、rkB/s・wkB/s、aqu-sz、r_await・w_awaitを確認。クラウドはEBSのVolumeReadOps・VolumeWriteOps・VolumeQueueLengthと、上限超過の有無を示すVolumeIOPSExceededCheck・VolumeThroughputExceededCheck、インスタンス側のInstanceEBSIOPSExceededCheck・InstanceEBSThroughputExceededCheckを確認
- 該当する場合
- 毎秒の要求数や転送量が上限値で頭打ちになり、aqu-szとawaitが一緒に跳ね上がる。クラウドでは超過チェックのメトリクスが1
- 該当しない場合
- %utilが100%でもawaitが低ければ、まだ余裕があることもある。要求を並列に処理するSSD・RAIDでは、%utilは上限を意味しない。上限に達していないのにawaitだけが高いなら、ディスク自体の遅延(dk-hdd)かfsync(dk-fsync)
- 確認手段
- インフラのツールで確認(ゲームコード不要)
- もっと詳しく
- クラウドでは、ディスクの上限とは別に、サーバースペック(インスタンスタイプ)ごとにディスク帯域幅・IOPSの上限があります。高価なディスクを付けても、サーバーが小さければインスタンスの上限で頭打ちになります。
出典
- Exos X18 Data Sheet Seagate
7,200rpmのサーバー向けHDDの4Kランダム読み出し170 IOPS(QD16) - D3-S4520 SSD Solidigm
サーバー向けSATA SSDの4KBランダム読み出し・書き込み、最大92K/48K IOPS - Solidigm™ D7-P5520 and D7-P5620 Product Brief Solidigm
サーバー向けNVMe SSDのランダム読み出し・書き込み、1,000K/200K IOPS - Amazon EBS General Purpose SSD volumes AWS
gp3のベースライン性能は3,000 IOPSと125MiB/s、2つは別々に引き上げられる独立した上限 - Amazon EBS-optimized instance types AWS
インスタンスタイプごとに、EBSの帯域幅・スループット・IOPSのベースラインと最大の上限が別にある - iostat(1) — Linux manual page sysstat
-x:r/s・w/s、rkB/s・wkB/s、aqu-sz(旧名avgqu-sz)、r_await・w_await、%util。要求を並列に処理するRAID・最近のSSDでは、%utilは性能の上限を表さない - Amazon CloudWatch metrics for Amazon EBS AWS
VolumeIOPSExceededCheck・VolumeThroughputExceededCheck:ボリュームのIOPS・スループット上限を超えようとしたら1(Nitroインスタンス)、VolumeQueueLength - CloudWatch metrics that are available for your instances AWS
InstanceEBSIOPSExceededCheck・InstanceEBSThroughputExceededCheck:インスタンスのEBS IOPS・スループット上限を超えようとしたら1
あわせて読みたい原因
同じ層:L11 ディスク
同じ症状(入力遅延)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る