# 衡量 NVMe 性能时不要自欺欺人 | SwissOctet 洞察 https://swissoctet.com/zh/insights/nvme-benchmark-methodology/ SwissOctet / 洞察 / 存储与恢复 存储与恢复 高级 · 6 分钟阅读 测量 NVMe 性能而不误导自己 在从磁盘测试得出应用程序结论之前,定义 I/O 模式、控制缓存效应并检查延迟分布。 作者 SwissOctet 编辑部 保存指南 复制链接 本页内容 01 从存储问题开始,而不是从分数开始 02 用可复现的方式描述工作负载 03 控制缓存,但不要假装它无关紧要 04 在关注吞吐量的同时查看延迟尾部 05 确保测试获得授权且非破坏性 06 用应用证据闭环验证 您的实用清单 来源与延伸阅读 返回资料库 直接答案 有用的存储测试会将操作大小、访问模式、并发性和持久性要求与应用相匹配。记录测试条件和延迟分布,然后用应用测量结果确认。 01 从存储问题开始,而不是从分数开始 在运行基准测试之前,先确定你需要了解什么。你可能是在调查数据库提交缓慢、文件分发吞吐量,还是会产生许多小文件的构建过程。这些工作负载对磁盘的要求并不相同。一次大型顺序复制可能看起来很亮眼,却几乎无法说明一个执行小型随机读取的服务所经历的延迟。 NVMe 是为非易失性介质和高效并行 I/O 设计的,但其协议名称并不能描述托管存储路径的每一部分。虚拟化、文件系统、资源争用和应用仍然很重要。写一个测试假设,例如存储延迟是否正在拖慢某个特定操作,而不是试图得出一个证明整个服务器都很快的数字。 02 用可复现的方式描述工作负载 记录操作大小、顺序或随机模式、读写比例、作业数量和队列深度。包括数据集大小和测试时长。fio 文档解释了这些工作负载控制项以及可用的 I/O 引擎。并非每个引擎或设置都能达到预期深度,因此既要阅读报告的行为,也要看你请求的配置。 在结果旁边保留一份测试说明的副本。记录操作系统、文件系统、挂载选项、服务活动和可用容量。如果比较不同配置,一次只改变一个相关条件。具有不同访问模式或并发性的测试不能公平地呈现为似乎只有存储介质发生了变化。 应用模式 要描述的测试维度 要检查的结果 大文件交付 顺序读取和并发客户端 持续吞吐量和 CPU 使用情况 记录查找 小型随机读取和代表性并发 延迟分布和已完成操作 持久事务 写入和同步要求 与提交相关的延迟,而不仅仅是缓冲写入速度 构建或解压 混合小文件操作 端到端作业时长和 I/O 等待 03 控制缓存,但不要假装它无关紧要 能放入内存的数据集在第一次遍历后可能主要测量的是缓存行为。如果应用通常受益于同一缓存,这可能有用,但不应将其标记为裸设备性能。要有意选择测试是检查热应用路径、较冷数据集,还是旨在减少操作系统缓冲影响的 I/O 模式。 直接 I/O 支持和对齐取决于平台和引擎。它也不会自动表达应用的持久性要求,或消除堆栈中的每一个缓存。清楚说明所选模式,并避免将缓冲测试与非缓冲测试进行比较,仿佛它们代表相同的工作。在有助于解读时,将预热区间和测量区间分开。 04 在关注吞吐量的同时查看延迟尾部 平均延迟可能掩盖影响真实请求的慢操作。检查报告的百分位数及其背后的样本数量。高百分位数描述的是在该测试期间,所述比例的已观察操作落在其下方的边界;它不是永久的服务保证。过短或不具代表性的运行对繁忙生产时段提供的证据有限。 更高的队列深度可以提高已完成吞吐量,同时增加等待时间。这种权衡可能适合批处理,却会损害交互式服务。在接近应用的并发性下比较结果,并同时监控 CPU 和 I/O 压力。在测试对共享环境的其他工作负载造成不必要干扰之前停止。 05 确保测试获得授权且非破坏性 使用专用测试目录或准备好的可丢弃卷,确保有足够可用空间和明确的清理计划。切勿将写入基准测试指向未经验证的裸设备或生产数据集。开始前检查工具的目标和写入行为,并从有限运行开始。合成 I/O 即使不覆盖有用文件,也可能消耗容量并干扰服务。 对于类生产评估,约定维护窗口并保留应用监控。尽可能使用虚构数据。不要从速度测试推断存储可靠性:完整性检查、备份和恢复是独立的任务。完成基准测试的设备仍然需要针对删除、软件错误或机器丢失的恢复策略。 06 用应用证据闭环验证 假设一个报表服务大部分时间都在等待随机读取。团队测试具有代表性的读取模式,然后针对可比数据重复实际报表。如果报表有所改善,而其他工作保持稳定,结果就支持存储假设。如果没有改善,就调查查询设计、内存或其他依赖项,而不是重复更广泛的合成测试。 Pulse NVMe 和选定的专用配置在 SwissOctet 目录中列出了 NVMe 存储。它们的标签是规格,不是已发布的应用基准。使用受控方法评估交付的环境,并将条件与发现一起保存。当存储测量和用户可见结果回答同一个问题时,决策会更有力。 将其转化为行动 您的实用清单。 ✓ 首先定义应用问题。 ✓ 记录模式、块大小、并发性和持续时间。 ✓ 说明缓存和 I/O 模式假设。 ✓ 既检查延迟百分位数,也检查吞吐量。 ✓ 使用经过验证的可丢弃目标,并限制初始负载。 ✓ 用应用测试确认发现。 下载清单 常见问题 重要细节。 顺序复制足以比较数据库存储吗? + 通常不够。数据库访问可能涉及小型随机读取、写入和同步。对相关模式建模,并验证实际应用。 直接 I/O 能证明持久写入吗? + 不能。缓冲和持久性是两回事。匹配应用所需的同步行为。 我可以发布一次测试作为有保证的计划速度吗? + 不能。发布其条件和范围。一次运行的测量结果不是服务级别保证或未来性能保证。 主要参考资料 前往来源。 这些参考资料支持本指南中的技术概念。在更改生产系统之前,请遵循当前文档。 fio:灵活的 I/O 测试工具文档 fio.readthedocs.io NVM Express:规范概览和常见问题 nvmexpress.org Linux 内核:压力停滞信息 docs.kernel.org 由 SwissOctet 提供编辑指导。示例仅作说明。服务规格、可用选项和合同条件必须单独核实。 连接知识 相关基础设施。 Pulse NVMe 瑞士 Metal Hyper 瑞士 Metal EPYC 瑞士 保持联系 您的下一份现场笔记。 探索所有指南 现场笔记 / 01 + 存储与恢复 基础 当 NVMe 对您的应用产生影响时 区分容量、延迟和吞吐量,让更快的存储标签能够回答真实的应用问题。 4 分钟阅读 阅读指南 现场笔记 / 02 + 存储与恢复 应用 快照与备份:选择你需要承受的故障 比较恢复点、故障边界和应用程序一致性,而不是假设快照和独立备份提供相同的保护。 4 分钟阅读 阅读指南 现场笔记 / 03 + 存储与恢复 基础 对象、文件或块存储:选择应用所需的接口 在将容量需求转化为应用架构之前,区分存储接口、访问语义和运营责任。 4 分钟阅读 阅读指南