zoukankan      html  css  js  c++  java
  • (转)科普:SATA、PCIe、AHCI、NVMe

    原文链接:https://forum.51nb.com/thread-1670848-1-1.html

    IT 界总喜欢发明新名词。而且同一个东西,可能有几个不同的名字。同一个名字,又可能指不同的东西。存贮设备,近年有许多新发展,因此新名词也层出不穷,造成不少混乱。这里班门弄斧整理一下,如有错误,欢迎指正。由于篇幅的关系,太旧的标准就不讨论了,如 IDE、PATA 等。这里主要讨论 SATA、PCIe、AHCI 和 NVMe。(关于 NGFF/M.2,那是物理尺寸标准,请参考 http://forum.51nb.com/thread-1669981-1-1.html)。

    SATA 和 PCIe 大家应该比较熟悉。这两个都是总线标准。它们是并列发展的关系,并不是谁取代谁的关系。

    SATA 由 IDE/ATA 标准发展而来,主要用途是把存贮设备(硬盘)连接到主机(主板)。SATA 经历了如下版本:
    SATA revision 1.0 (1.5 Gbit/s, 150 MB/s)
    SATA revision 2.0 (3 Gbit/s, 300 MB/s)
    SATA revision 3.0 (6 Gbit/s, 600 MB/s)
    SATA revision 3.1
    SATA revision 3.2 (16 Gbit/s, 1969 MB/s)

    在 IT 界,有一样很重要的东西叫“向下兼容”。SATA 在发展的过程中,也要考虑“向下兼容”因素。譬如,主板上 SATA-3 的接口,可以连接 SATA-2 的硬盘。向下兼容是为了保护用户已有的投资。但在另一方面,也造成很多掣肘,以致发展缓慢。

    出于向下兼容的考虑,SATA 可以工作在两种模式:传统模式和 AHCI 模式。传统模式是为了兼容以前的 IDE/PATA。AHCI 模式则比较新,支持 SATA 独有的功能,如热插拔、原生命令队列(NCQ)等。现在基本上所有 SATA 设备都是 AHCI 模式了。(Advanced Host Controller Interface)

    大家还记得 Windows 7 时代的 AHCI 问题吧?许多机器的 BIOS 中可以选择传统模式或 AHCI 模式。当时出于兼容性考虑,缺省是传统模式。许多人安装 Windows 7 (最初版)的时候,就是在传统模式下安装的,不需要特殊驱动。如果安装之后,进 BIOS 改成 AHCI 模式,Windows 7 就会蓝屏了,因为没有 AHCI 驱动。如果想在 AHCI 模式下安装,Windows 会找不到硬盘,因为没有驱动。这时候要加第三方驱动。后来 Windows 7 SP1 才在安装盘中加入原生 ACHI 驱动程序。历史总是不断重演,现在 NVMe 也面对同样的问题(下面会讨论)。

    --- 华丽分割线 ---

    PCIe - Peripheral Component Interconnect Express

    PCIe 是另一种总线标准,由 AGP、PCI、PCI-x 发展而来。上了年纪的同学都记得,这些总线的发展,主要的动力是显卡的发展。AGP 就是 Accelerated Graphics Port(加速图像端口)的缩写。由于显卡需要很大的带宽和速度,PCI 总线标准就不断升级来满足要求。当然,除了显卡外,PCI 总线还用于其他的扩展卡,如网卡(包括有线网卡、无线网卡、3G/4G卡等)。

    从上面 SATA 的不同版本可以看到,提速是一个主要任务(当然也有其他的改进)。但进入 SSD 时代后,SATA 的改版速度(由于要考虑向下兼容),已经跟不上传输速度的要求了。这时候,业界就考虑采用 PCIe 来连接存贮设备。但在驱动程序层面,仍然采用 AHCI。这是因为 AHCI 已经非常成熟,广泛被各种操作系统(如 Windows、Linux)所采用。

    以下是 PCIe 各版本的对比。注意在同一个版本中,也有不同的速率,取决于产品使用多少条通道(Lane)。

    --- 再来一条分割线 ---

    NVMe - Non-Volatile Memory Express

    前面说过,AHCI 是为了发挥 SATA 的潜能而设计的,当时算是“高大上”了。但当时仍然是机械硬盘统治市场,因此 AHCI 的设计是基于机械硬盘的特性(旋转式磁性盘片)。虽然 AHCI 也可以用于 SSD,但却不能发挥极致。因为 SSD 更像内存,而不像“盘片”。譬如说,机械硬盘,如果磁头错过了一个扇区,那就得等盘片转一圈回来才能访问。SSD 就不存在这个问题。因此,业界重新设计一个新的 NVMe 协议,希望发挥 SSD 的潜能。下面是 AHCI 和 NVMe 的对比:

    注意,NVMe 和 AHCI 一样,是逻辑(或者说软件、驱动程序)上的标准。而 SATA 和 PCIe 则更注重于物理层面(电流、电压、触脚等)。NVMe 比较新,Windows 7 没有原生驱动,因此安装的时候需要加第三方驱动。这个和当年 Windows 7 / AHCI 类似。


    --- 物理接口 ---

    说完了总线和协议,下面说说物理接口。无论采用什么总线和协议,主板总得连接到存贮设备上。这里所说的物理接口,指是是物理尺寸和形状,电气特征不作讨论。接口又分主机端和设备端。由于种类繁多,这里挑几个常见的。

    1. SATA 设备端。下图是大家所熟悉的 SATA 硬盘接口(设备端)。大部分 2.5" SSD 也是用这种接口。采用这种接口的,只能使用 SATA 总线。不能使用 PCIe 总线。

    2. M.2 接口。(以前叫 NGFF,现在统一叫 M.2 了,大家改改习惯吧)。采用这种接口的 SSD,可以使用 SATA 或者 PCIe 总线(取决于主板和SSD)。如果采用 PCIe 总线,又分 AHCI 和 NVMe 两种协议。因此总共有三种。下面是代表性产品:

    a) 三星 850 EVO M.2 接口,SATA 总线,AHCI 协议

     

    b) 三星 SM951 M.2 接口,PCIe 总线,AHCI 协议

    c) 三星 SM951 M.2 接口,PCIe 总线,NVMe 协议

     3. SATA Express 接口。SATA Express 使用的是 PCIe 总线,向下兼容 SATA 总线。设备端物理接口如下图。给眼神不好的同学提个醒:设备端的触脚是连在一起的,而不是 SATA 那样分成两部分。目前 T460/T560/X260/P50s 可以支持 SATA Express 的设备(东芝品牌的 SSD)。

    --- 总结 ---

    下图总结了目前不同标准/协议之间的组合。

    由于上图可见,AHCI 和 NVMe 是驱动程序层面的。顾名思义,NVMe 只适用于 SSD(SSD和主板也要支持 NVMe 才行)。AHCI 则适用于机械硬盘和SSD。

    在主板芯片层面,有 AHCI 控制器和 PCIe 控制器。有趣的是 AHCI 驱动程序“居然”可以使用 PCIe 控制器(中间那条橙色的线)。这个其实是个过渡方案,目的是在利用 PCIe 高带宽的同时,保持对上层软件的兼容性。目前在笔记本上,用这个方案的产品并不多。楼主也不觉得会成为主流。

    绿色那个框是主板上的物理接口。参见以上“物理接口”一节。注意即使是同样的物理接口,也可以选择不同的总线和协议(如果主机和设备支持的话)。因此不要以为买了 M.2 的盘就一定是高大上,买了 2.5" 的盘就一定是屌丝。

    左下角的 SATA 设备就不用多说了。大家都很熟悉。

    右下角的 PCIe SSD 设备则可以有两种不同的控制器(最下面的两个框):AHCI 和 NVMe。因此,同样是 PCIe 的 SSD,也可以有不同的传输效能。

    说了这么多,相信大家已经晕了。下面按传输效率做个排序,希望对大家有帮助。

    1. PCIe NVMe。
    这个是最高大上的。在笔记本市场,根据效能,可以再细分为两个等级:
    1A 是 M.2 尺寸的 NVMe(如三星 950 PRO)。可以有四条 PCIe 通道,速度最快。但由于电路板面积限制,容量和发热都是个问题。
    1B 是 2.5" 尺寸的 NVMe(如东芝 XG3),采用 SATA Express 接口,可以有两条 PCIe 通道,传输速率较低。由于 2.5" 体积较大,容量和发热比 M.2 要好。在 T460/T560/X260/P50s 上可用。

    2. PCIe AHCI。
    效能比 1 稍低,是由于 AHCI 协议的滞后性决定的。笔记本上只有 M.2 外形,没有 2.5" 外形。(如三星 SM951 AHCI 版)。

    3. SATA AHCI。
    效能最低,但兼容性最好,根据外形可分为两类。这两类的传输效能是一样的,无分高低。如果要便宜、容量,则选 2.5"。如果要轻薄,则选 M.2。
    3A 是 2.5" 外形的设备,如目前广泛使用的机械硬盘,固态硬盘等。
    3B 是 M.2 外形的设备,如三星 850 EVO 的 M.2 盘。

  • 相关阅读:
    out/host/linuxx86/obj/EXECUTABLES/aapt_intermediates/aapt 64 32 操作系统
    linux 查看路由器 电脑主机 端口号 占用
    linux proc进程 pid stat statm status id 目录 解析 内存使用
    linux vim 设置大全详解
    ubuntu subclipse svn no libsvnjavahl1 in java.library.path no svnjavahl1 in java.library.path no s
    win7 安装 ubuntu 双系统 详解 easybcd 工具 不能进入 ubuntu 界面
    Atitit.json xml 序列化循环引用解决方案json
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    Atitit.跨语言  文件夹与文件的io操作集合  草案
    Atitit.atijson 类库的新特性设计与实现 v3 q31
  • 原文地址:https://www.cnblogs.com/pxb2018/p/10418118.html
Copyright © 2011-2022 走看看