游戏卡顿白皮书 › 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)
- 确认手段
- 运维工具即可确认(无需游戏代码)
出处
- Designs, Lessons and Advice from Building Large Distributed Systems (LADIS 2009 keynote) Google
磁盘寻道一次 10 ms,从磁盘顺序读取 1 MB 需 20 ms - Exos X18 Data Sheet Seagate
7,200 rpm HDD 平均旋转延迟 4.16 ms,4K 随机读 170 IOPS - lsblk(8) — Linux manual page util-linux
-o 选择输出列,设备拓扑列中包含 ROTA(是否为旋转式设备) - ABI stable symbols Linux kernel
/sys/block/(磁盘)/queue/rotational:表示设备是旋转式还是非旋转式 - iostat(1) — Linux manual page sysstat
-x:r/s、w/s,r_await、w_await(每个请求的平均处理时间,包括在队列中等待的时间)
相关原因
同一层:L11 磁盘
其他层中同样导致“操作延迟”的原因
查看含图示和实验的原卡片