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

游戏卡顿白皮书 › 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 上限。就算挂了昂贵的磁盘,服务器规格小,也会受限于实例上限。

出处

  1. Exos X18 Data Sheet Seagate
    7,200 rpm 服务器级 HDD 的 4K 随机读为 170 IOPS(QD16)
  2. D3-S4520 SSD Solidigm
    服务器级 SATA SSD 4 KB 随机读/写最高 92K/48K IOPS
  3. Solidigm™ D7-P5520 and D7-P5620 Product Brief Solidigm
    服务器级 NVMe SSD 随机读/写 1,000K/200K IOPS
  4. Amazon EBS General Purpose SSD volumes AWS
    gp3 基准性能为 3,000 IOPS 和 125 MiB/s,两者是可以分别提高的独立上限
  5. Amazon EBS-optimized instance types AWS
    每种实例类型的 EBS 带宽、吞吐量、IOPS 各有基准上限和最大上限
  6. 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 并不反映性能上限
  7. Amazon CloudWatch metrics for Amazon EBS AWS
    VolumeIOPSExceededCheck、VolumeThroughputExceededCheck:尝试超过卷的 IOPS、吞吐量上限时为 1(Nitro 实例),VolumeQueueLength
  8. CloudWatch metrics that are available for your instances AWS
    InstanceEBSIOPSExceededCheck、InstanceEBSThroughputExceededCheck:尝试超过实例的 EBS IOPS、吞吐量上限时为 1

相关原因

同一层:L11 磁盘

其他层中同样导致“操作延迟”的原因

查看含图示和实验的原卡片