IO benchmarking 测的是什么:冷缓存顺序读写基准如何评估存储性能
更新时间
IO benchmarking 测的是在给定存储卷和其下层文件栈上,大文件顺序读写能达到的最高吞吐量。CCSIO Benchmark 这类冷缓存顺序基准的做法是:遍历不同的 IO 缓冲块数量、块大小和缓存模式组合,找出吞吐率最高的那一组参数。它适合评估本地磁盘、网络共享、RAM 盘和加密文件容器等不同文件栈的真实读写上限;不适合用来模拟小文件随机读写或数据库类混合负载。
为什么同一块盘,速度可以差很多
读写文件的过程,本质上是把内存缓冲块交给操作系统,让它填入磁盘数据,或把缓冲内容写入文件。这个过程有三个关键变量:
- IO 缓冲块数量:同时有多少个缓冲块在参与读写
- IO 缓冲块大小:每个块有多大
- IO 缓存模式:无缓冲、无缓冲顺序、缓冲顺序(读/写)
这三个变量的组合构成一次测试运行。CCSIO 的页面说明指出,最优组合会随物理设备类型、设备与主机的连接方式以及文件栈组成而大幅变化——对 SSD 有效的参数,往往对 HDD 或虚拟磁盘无效,反之亦然。
页面给出的对比例子很直观(粗体为各设备的最大读取速度):
| 参数组合 | Samsung MZVPV512(NVMe) | SSD 上的 TrueCrypt 卷 |
|---|---|---|
| 8 × 512 KB | 2158.0 MBps | 317.5 MBps |
| 16 × 2 MB | 1974.1 MBps | 338.4 MBps |
同一块底层 SSD,经过加密卷这一层文件栈后,不仅绝对速度大幅下降,连“最佳参数组合”也换了。这说明单看一个参数下的跑分没有意义,要找的是该设备在该文件栈下的峰值。
冷缓存顺序读写意味着什么
“冷缓存”指测试尽量不让操作系统的页缓存替真实设备“作弊”,从而测出数据真正从存储介质读出或写入的速率;“顺序”指按连续地址读写大文件。两者结合,回答的是一个具体问题:把很大的文件从这个位置读出来或写进去,最快能有多快。这正对应备份、镜像分发、大文件拷贝、视频素材搬运这类批量 IO 场景。
反过来,如果你的场景是大量小文件、随机访问或并发混合读写,这个基准的结论不能直接套用。
一次基准跑多少测试、要多久
CCSIO 默认参数如下:
- 缓冲块大小:8K、16K、32K、64K、128K、256K、512K、1M、2M、4M、8M、16M(12 档)
- 缓冲块数量:1、2、4、8、16(5 档)
- IO 模式:无缓冲读/写、无缓冲顺序读/写、缓冲顺序读(仅读)
组合起来,单次基准包含 180 个读测试和 120 个写测试,共 300 个测试。每个测试时长 1 秒(软限制,可能略超),足以在空闲机器上得到较准确的速度估计。另有 64MB 的总缓冲空间上限,超过上限的测试会被跳过,测试数降至 285 个,总运行时间约 5 分钟。
怎么解读结果
- 看峰值,不看单点:报告里最有价值的数字是“该设备+该文件栈下达到的最大吞吐”,而不是某个固定块大小下的成绩。
- 对比要同条件:比较两块盘或两种配置时,用同一版本的基准、同样的空闲状态,并确认各自都跑到了峰值。
- 注意机器状态:1 秒的短测试在空闲机器上才可靠;后台有负载时结果会失真。
- 注意缓存条件:冷缓存结果反映的是介质与文件栈的真实能力,与日常带缓存的热读写体验可能不同,解读时别混用。
适用与不适用
适用:判断某块盘、某个网络共享、某个加密卷或 RAM 盘在大文件顺序读写上的上限;验证更换文件系统、加密层或连接方式后批量 IO 是否变快。
不适用:评估小文件性能、随机 IO、多线程并发负载,或直接推断应用(如数据库、虚拟机)的实际表现。这些场景需要另外的基准工具和方法。