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

游戏卡顿白皮书 › L11 磁盘

HDD 寻道延迟 HDD seek latency

原因 ID dk-hdd · 主责 运维团队·系统运维 · 配合 运维团队·数据库运维, 研发团队·服务器开发

在含图示和实验的完整版中打开此卡片 →

HDD 的磁头必须在盘片上移动(寻道,seek),读写分散的数据每次要花将近 10 ms。

起因 老旧服务器或低价存储使用 HDD → 结果 每次随机读写约 10 ms → 画面表现 存盘、加载普遍变慢

症状
操作延迟
因素
延迟
谁会遇到
全服
何时出现
一直
负责方
主责 运维团队·系统运维 · 配合 运维团队·数据库运维, 研发团队·服务器开发
研发团队要做的事
以顺序写为主的设计。
运维团队要做的事
服务器/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。虚拟机在云平台或存储的规格说明里确认磁盘类型
确认依据
是机械硬盘,每秒请求只有几十到一百多个,r_await、w_await 却总在几 ms 到几十 ms
排除依据
是 SSD 但延迟高,看“IOPS 上限/队列饱和”(dk-iops)或“云盘突发积分耗尽”(dk-burst)
确认手段
运维工具即可确认(无需游戏代码)

出处

  1. Designs, Lessons and Advice from Building Large Distributed Systems (LADIS 2009 keynote) Google
    磁盘寻道一次 10 ms,从磁盘顺序读取 1 MB 需 20 ms
  2. Exos X18 Data Sheet Seagate
    7,200 rpm HDD 平均旋转延迟 4.16 ms,4K 随机读 170 IOPS
  3. lsblk(8) — Linux manual page util-linux
    -o 选择输出列,设备拓扑列中包含 ROTA(是否为旋转式设备)
  4. ABI stable symbols Linux kernel
    /sys/block/(磁盘)/queue/rotational:表示设备是旋转式还是非旋转式
  5. iostat(1) — Linux manual page sysstat
    -x:r/s、w/s,r_await、w_await(每个请求的平均处理时间,包括在队列中等待的时间)

相关原因

同一层:L11 磁盘

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

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