为什么 NVMe 比 ATA 更​​好?

som*_*ega 22 pci-express ssd nvme m2-connector

SATA M.2 SSD 在物理层使用 SATA,并使用 ATA 作为数据传输的软件协议。

NVMe M.2 SSD在物理层使用PCIe,并使用NVMe作为数据传输的软件协议。

在这个问题中我被告知。

当然,PCIe 比 SATA 更​​快,因此 NVMe SSD 的速度更高。

但为什么需要新的软件协议呢?为什么我们不能让 PCIe M.2 SSD 与 ATA 通信?(*)

我认为更高的速度来自 PCIe,而不是来自 NVMe 协议。为什么我们需要 NVMe?

(*) 我认为 AHCI 不是必需的,因为 SSD 可以通过其 PCI 地址来寻址。ATA 还可以传输元数据,例如磁盘大小。

use*_*686 32

虽然我找不到参考资料,但我记得的一个具体区别是 NVMe 被设计为高度并行。我可能记错了,但是:

\n
    \n
  • 通过旧版 IDE 的 ATA 根本不支持并行命令。

    \n
  • \n
  • ATA 通过 AHCI 支持 NCQ,最多允许发出 32 个命令(可以按任何顺序返回数据),但并非所有命令都是“可排队的”。SCSI 还支持“标记队列”,最多允许发出 16 个命令。

    \n

    如果我理解正确的话,这意味着对于固态磁盘(没有“寻道时间”),这些数字足够低,甚至可以立即处理最大大小的队列,并且磁盘返回到不执行任何操作,直到主机注意到并且发出更多请求。

    \n
  • \n
  • 另一方面,NVMe 的设计允许最多 64,000 个排队命令,允许 SSD 在需要时保持持续忙碌。

    \n
  • \n
\n

类似的比较可以在Phison(SSD控制器制造商)的博客中找到,具体是这个表,其中写道:

\n
    \n
  • AHCI仅支持单个命令队列;NVMe 支持多个并行队列。
  • \n
  • AHCI 对连接到同一控制器的所有端口使用单个中断;NVMe 允许多个中断。
  • \n
  • 据我了解,这意味着单个 CPU 核心必须处理连接到 AHCI 控制器的所有磁盘的所有 I/O,而 NVMe 允许不同核心同时读取或写入数据。(但也许大多数 NVMe 磁盘自带控制器也有帮助,而 AHCI 控制器通常每个系统一个,很少有两个。)
  • \n
\n

也可以看看:

\n\n
\n

为什么我们不能让 PCIe M.2 SSD 与 ATA 通信?(*)

\n

(*) 我认为 AHCI 不是必需的,因为 SSD 可以通过其 PCI 地址来寻址。

\n
\n

即使 SSD 自带控制器(一些早期的 NVMe 之前的 SSD 实际上就是这么做的!),您仍然需要 AHCI 之类的东西,因为它定义了如何通过 PCI 地址等来访问磁盘。AHCI 已经与获取磁盘特定信息 \xe2\x80\x93 无关,而这些信息始终通过 ATA“IDENTIFY DEVICE”和类似命令来完成。但是需要就如何将这些命令提交到磁盘以及如何接收响应(特别是 DMA 和队列等)\xe2\x80\x93 达成一致,这就是 AHCI 的目的。

\n

当然,SSD 可以将 ATA 与 AHCI 以外的其他设备一起使用,只要操作系统有相应的驱动程序(就像AHCI 存在之前的许多驱动程序一样),但最终此类“非标准”设备将趋向于新的标准协议,无论是被命名为 NVMe 或其他名称。

\n

(虽然 ATA 已经可以在没有 AHCI 的情况下通过传统的 PCI IDE 接口或通过 AoE(以太网上的 ATA)等网络使用,但对于此类用途,它不像 SCSI 那样流行 \xe2\x80\x93也可以在 SAS、FireWire、Infiniband 和 iSCSI 等不同传输上使用;最后,NVMe 可以使用 NVMe-oF 在网络上使用。)

\n

  • “为什么我们不能让 PCIe M.2 SSD 与 ATA 通信?” > 我们可以而且我们已经做到了!苹果过去常常集成支持 ATA/AHCI 的 PCIe SSD,这导致了支持 AHCI 协议的 M.2 PCIe SSD 的出现。 (7认同)
  • 除此之外,NVMe 在通常使用的带宽方面击败了 ATA。“经典”SATA-3 的有效带宽峰值约为 600 MB/s。目前,SATA Express 的峰值速度约为 1.9 GB/s(但这在消费类设备中从未真正起飞,因此在这里并不是非常相关)。NVMe 通常用于 PCI-e x4 连接,在 PCIe 3.0 上的峰值约为 3.94 GB/s,在 PCIe 5.0 上的峰值约为 15.76 GB/s。 (4认同)