游戏卡顿白皮书 › L11 磁盘
IOPS 上限/队列饱和 IOPS limit / queue saturation
原因 ID dk-iops · 主责 运维团队·系统运维 · 配合 研发团队·服务器开发, 运维团队·数据库运维
在含图示和实验的完整版中打开此卡片 →
请求超过磁盘每秒能处理的数量后,队列变长,延迟暴涨。
起因 读写请求接近磁盘的处理能力 → 结果 队列变长(利用率超过 90% 时通常暴涨) → 画面表现 存盘、加载变慢,同步调用时会卡住
- 症状
- 操作延迟, 卡住
- 因素
- 延迟, 停顿
- 谁会遇到
- 全服
- 何时出现
- 人多的时候, 晚高峰
- 负责方
- 主责 运维团队·系统运维 · 配合 研发团队·服务器开发, 运维团队·数据库运维
- 研发团队要做的事
- 合并请求,常读的数据放缓存,改成异步,不让游戏线程等磁盘。
- 运维团队要做的事
- 服务器/OS:换更快的磁盘,确认各实例类型的磁盘带宽和 IOPS 上限,为磁盘利用率和队列设告警,大文件复制放到空闲时段。DB 服务器:DB 磁盘也要为 IOPS、吞吐量利用率设告警,确认 DB 实例规格的磁盘上限。
- 数值参考
- HDD 约 150 IOPS,SATA SSD 数万,NVMe 数十万。云上默认磁盘(AWS gp3)为 3,000 IOPS、每秒 125 MiB;吞吐量上限与 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 高,是磁盘自身的延迟或 fsync,看“HDD 寻道延迟”(dk-hdd)、“fsync 风暴”(dk-fsync)
- 确认手段
- 运维工具即可确认(无需游戏代码)
- 深入了解
- 在云上,除了磁盘本身的上限,每种服务器规格(实例类型)还有自己的磁盘带宽和 IOPS 上限。就算挂了昂贵的磁盘,服务器规格小,也会受限于实例上限。
出处
- Exos X18 Data Sheet Seagate
7,200 rpm 服务器级 HDD 的 4K 随机读为 170 IOPS(QD16) - D3-S4520 SSD Solidigm
服务器级 SATA SSD 4 KB 随机读/写最高 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 和 125 MiB/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 磁盘
其他层中同样导致“操作延迟”的原因
查看含图示和实验的原卡片