【VPS 硬件选型指南 (存储 篇) 05】IOPS 与为什么 NVMe 快 5–10 倍(原理深潜篇)

便宜 VPS 标着 NVMe 实测却只有 2–3 万 IOPS?本篇只做「IOPS / 队列深度 / 延迟 / 吞吐」的工程原理深潜:拆解 NVMe 多队列、并行提交、PCIe 通道为何比 SATA 单队列 32 命令快 5–10 倍,讲清队列深度如何放大并发,以及商家 IOPS 限速(QoS)的本质。

这一篇是「原理深潜篇」,只做一件事:把存储性能的工程原理讲透。三种介质的基础概念(NVMe / SATA SSD / HDD 差在哪)请移步 01 原理篇;怎么用 fio 跑实测、识别假 NVMe 看 02 方法论篇;各商家磁盘实情横向盘点看 03 厂商篇;不同业务体感与避坑看 04 场景篇;数据库建站实战看 06 实战篇。本篇不重复那些内容,只回答一个核心问题:IOPS、队列深度、延迟、吞吐到底是什么,以及 NVMe 凭什么比 SATA 快 5–10 倍。

延伸阅读

更多相关攻略推荐:Ollama AI系列(2):VPS上的AI推理与API应用Ollama AI系列(2):VPS上的AI推理与API应用ARM / Ampere 席卷 VPS:性价比真香还是兼容陷阱?【VPS 硬件选型指南 (内存 篇) 02】大内存 VPS 能干嘛?2026 独立站 PCI-DSS 自查清单:SAQ A 还是 A-E

一、四个指标:IOPS、队列深度、延迟、吞吐

评价一块盘,至少有四个维度,很多人把它们混为一谈。我们一个一个拆开。

IOPS(Input/Output Operations Per Second):存储设备每秒能「完成」的读或写操作次数。注意是「完成」不是「发起」。它是随机小 I/O 场景的命门——数据库、缓存、容器层吃的就是它。

吞吐 / 带宽(Throughput / Bandwidth):每秒能搬动多少字节,单位通常是 MB/s。它和 IOPS 的关系是:吞吐 ≈ IOPS × 单次块大小。例如 4KB 块、10 万 IOPS,吞吐就是约 390MB/s;换成 1MB 大块、同样 10 万 IOPS,吞吐就是约 100GB/s(当然现实中 IOPS 会随块变大而下降)。所以「高 IOPS」不等于「高带宽」,必须一起看:数据库要 IOPS,拷大文件看带宽。

延迟(Latency):一次 I/O 从「发起」到「完成」花了多久,单位微秒(μs)到毫秒(ms)。延迟分两类:一是介质本身的「命令处理 + 寻道 / 闪存读写」时间(设备延迟);二是从应用视角看到的「完成延迟 clat / 端到端延迟」。延迟越低,单线程应用越顺滑。

队列深度(Queue Depth,简称 QD):同一时刻「在途、尚未完成」的 I/O 请求数量。QD=1 表示一次只发一个、等它回来再发下一个(串行);QD=32 表示一口气挂起 32 个请求让盘并行处理(并发)。这是理解「为什么盘能这么快」的钥匙。

二、队列深度如何放大吞吐:并发的本质

关键直觉:一块盘的理论最大 IOPS,约等于「1 ÷ 单次 I/O 延迟」× 队列深度。这正是排队论里的利特尔法则(Little's Law)在存储上的投影:并发数 ≈ 吞吐 × 延迟。

举例:某 SSD 处理一次随机读的真实设备延迟是 0.05ms(50μs)。如果只允许 QD=1(串行),那么每秒最多完成 1 ÷ 0.00005 = 20000 IOPS——哪怕盘的物理能力是百万级,你只能榨出 2 万。把 QD 提到 32,在途请求并行铺开,IOPS 就能逼近 20000 × 32 的量级(再受控制器与协议上限约束)。这就是「IOPS × 队列深度 ≈ 并发能力」的含义:单请求延迟是天花板,队列深度是把天花板撑满的网络通道。

但这里有个反直觉的代价:抬高 QD 会掩盖延迟,却会推高每个请求的完成延迟。QD=1 时用户感知延迟≈设备延迟(很低);QD=32 且盘已饱和时,每个请求要排队,clat(完成延迟)会显著高于设备延迟。所以测延迟要看「平均」更看「p99 / p99.9 尾延迟」——平均好看、尾延迟爆雷,正是超售盘的典型特征(详见第六节「怎么读数」)。

结论先行:SATA/AHCI 的硬伤不是「闪存慢」,而是协议把队列深度和并发通道卡死了,让你根本铺不开那么多在途请求;NVMe 的快,本质是「把路修宽、把闸口拆掉」,让高 QD 真正生效。

三、为什么 NVMe 快 5–10 倍:协议内部解剖

3.1 SATA + AHCI:为机械盘设计的单车道

SATA SSD 走 Serial ATA 接口 + AHCI 协议。AHCI 诞生于 2004 年,那时的主角还是机械盘,设计目标只是「别让硬盘饿着」。它的两个致命天花板:

第一,只有 1 个命令队列,队列深度上限 32 条命令。所有 CPU 核心、所有进程都挤在这唯一的队列里排队。第二,提交命令要走软件锁 + 单「门铃」寄存器,一次只能通知控制器一条,伴随大量上下文切换和 CPU 开销。换句话说,AHCI 的瓶颈在「指挥系统」而非「闪存」——百万级 IOPS 的颗粒被一个 32 深度的单队列死死勒住。再加上 SATA III 总线带宽封顶约 550MB/s,顺序读写也先撞网络封锁。

3.2 NVMe:为闪存量身定制的多车道高速

NVMe(Non-Volatile Memory Express)2011 年为闪存量身设计,直接跑在 PCIe 通道上,绕过 SATA 控制器、和 CPU 对话。它的设计亮点:

多命令队列(Multi-Queue):支持最多 65535 个队列,每个队列可挂 65536 条命令。现代驱动会给每个 CPU 核心分配独立队列(per-core queue),彻底消除多核抢锁——这是相比 AHCI「1 队列 × 32 命令」 parallelism 提升几千倍的根源。

并行提交与完成(Parallel Submission/Completion):每个队列有独立的「门铃」寄存器(doorbell),核心提交命令几乎无锁;完成事件用 MSI-X 中断精确投递到对应核心,甚至支持轮询模式(poll)进一步压低延迟。命令处理延迟从 AHCI 的约 6μs 降到约 2.8μs。

PCIe 通道提供带宽与并行度:NVMe 通常占 4 条 PCIe 通道(x4)。带宽随代际翻倍:Gen3 x4 ≈ 3500MB/s,Gen4 x4 ≈ 7000MB/s,Gen5 x4 ≈ 14000MB/s;而 SATA III 封顶仅 550MB/s。通道多 + 队列多,意味着海量小 I/O 可以真正「同时在飞」。

一句话总结「快 5–10 倍」从哪来:随机 4K 读写最吃「队列深度 + 并发通道 + 低 CPU 开销」三项,而这恰恰是 AHCI 的三处死穴。NVMe 把它们全解开,于是随机 IOPS 相对 SATA SSD 提升 5–10 倍(顺序带宽约 6 倍)。若换 HDD,随机维度差距是几千倍。

四、协议 / 接口 / 队列 / 带宽 / 典型 IOPS 对照表

一张表看清差异(「典型 IOPS」指消费级 / 共享 VPS 实测量级,非厂商上限):

介质 / 协议接口命令队列理论带宽典型随机 4K 读 IOPS典型延迟
HDD(7200 转)SATA III单队列~100–160MB/s75–2005–10ms
SATA SSDSATA III + AHCI1 队列 × 32 命令~550MB/s共享实测 5k–5 万0.1–0.2ms
NVMe SSDPCIe x4(Gen3/4/5)65535 队列 × 65536 命令3500–14000MB/s共享实测 2 万–10 万+,企业级百万级0.02–0.05ms

读表要点:带宽列决定了「拷大文件」上限(NVMe 靠 PCIe 碾压),队列列决定了「随机小 I/O」上限(NVMe 靠多队列碾压)。SATA SSD 的闪存颗粒本身不慢,慢的是它身后那条 AHCI 单车道。

五、为什么标称 NVMe 实测只有 2–3 万 IOPS:QoS 与限速

很多读者困惑:明明买的是 NVMe,fio 一跑 4K 随机读却只有 2–3 万 IOPS,和上面「10 万+」对不上。这不是 NVMe 骗你,而是物理介质上限 ≠ 你被分配到的上限。原因有三:

其一,超售与邻居争用(Noisy Neighbor)。一台物理机上的 NVMe 可能被切成几十上百个 VPS 共享,盘的总 IOPS 是固定的,谁抢到算谁的。晚高峰大家一起随机读,你分到的自然被摊薄。

其二,QoS / IOPS 配额限速。成熟商家会按套餐给每个 VM 设 IOPS 上限(公平调度),防止个别租户把整块盘打满。这个配额常落在 2–3 万 IOPS 区间,于是无论盘的颗粒多强,你都被「阀门」卡住。这属于正常商业行为,不代表盘是假的。

其三,虚拟化开销与队列映射。虚拟机里的多队列要经 hypervisor 映射到物理队列,映射不当或 vCPU 不足时,per-core 队列优势发挥不出来,并发铺不开,IOPS 上不去。

所以「标 NVMe 实测低」要分两种情况:若是稳定的 2–3 万且无剧烈尾延迟,多半是 QoS 配额;若 IOPS 极低(<5000)且 p99 延迟飙到几百毫秒,才更像严重超售或共享 SATA 总线争用。各商家真实配额与体感,横向盘点请看 03 厂商篇

六、怎么读测出来的数(不讲怎么跑,只讲怎么看)

fio 怎么装、命令怎么写,留给 02 方法论篇。这里只教你「看到输出怎么判断」:

IOPS:随机读场景的主指标。看它是稳定值还是大幅抖动——抖动大说明在和邻居抢盘。

BW(bandwidth):顺序大块读写的吞吐,对应「拷文件」速度,和 IOPS 不是一回事。

lat / clat(完成延迟):单次 I/O 从完成角度看花多久。平均延迟会骗人,必须看 p99 / p99.9 尾延迟:平均 0.1ms、p99 却 20ms 的盘,体验会「偶尔卡一下」,这正是 QoS 限速或争用的指纹。

判定口径(仅作读数的参考线):4K 随机读 IOPS 超过 20 万且 p99 < 1ms,是无忧级 NVMe;8 万–20 万多数负载够用;2–5 万多半是 QoS 配额内的共享 NVMe(正常);低于 5000 且尾延迟爆表,要警惕超售或假 NVMe。

#VPS #NVMe #IOPS #队列深度 #存储原理

💡 延伸阅读:关于架构与基础设施的更多深潜指南,请前往 VPS 主题导读中心 (Hub) 获取全盘策略;数据库实战对比见 06 实战篇