遊戲 Lag 白皮書 › L11 磁碟
IOPS 上限與佇列飽和 IOPS limit / queue saturation
原因 ID dk-iops · 主要負責 基礎設施團隊(伺服器基礎設施) · 協同 遊戲開發團隊(伺服器開發), 基礎設施團隊(DB 基礎設施)
在含圖解與實驗的完整版中開啟卡片 →
請求數超過磁碟每秒能處理的數量時,佇列會變長,延遲急遽增加。
為什麼 讀寫請求接近磁碟的處理能力 → 於是 佇列變長(通常在使用率 90% 以上時急遽增加) → 畫面上 存檔、載入變慢;若是同步呼叫則會定格
- 症狀
- 輸入延遲, 定格
- 因素
- 延遲, 停滯
- 誰會遇到
- 整個伺服器
- 何時
- 人潮湧入時, 晚間尖峰時段
- 負責單位
- 主要負責 基礎設施團隊(伺服器基礎設施) · 協同 遊戲開發團隊(伺服器開發), 基礎設施團隊(DB 基礎設施)
- 遊戲開發團隊要做的事
- 合併請求、經常讀取的資料放進快取、改為非同步,讓遊戲執行緒不必等待磁碟。
- 基礎設施團隊要做的事
- 伺服器設備/OS:換用更快的磁碟、確認各執行個體類型的磁碟頻寬與 IOPS 上限、設定磁碟使用率與佇列警示、大檔案複製排在離峰時段。DB 設備:DB 磁碟也設定 IOPS 與處理量使用率警示,確認 DB 執行個體規格的磁碟上限。
- 數值參考
- HDD 約 150 IOPS、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,兩者是可以分別調高的獨立上限 - 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 磁碟
同一症狀(輸入延遲)在其他層的原因
查看含圖解與實驗的完整版卡片