【协议】 SATA接口(AHCI协议)、PCIe 接口(NVMe 协议)|nvme ssd和普通ssd区别

NVMe SSD相较于传统的SATA SSD,提供了显著的性能提升,主要体现在更低的延迟、更高的IOPS和吞吐量。NVMe协议允许更大的队列深度和更多的并行操作,直接与CPU通信以减少延迟。此外,NVMe在能效方面也有所优化,具备自动功耗状态切换和动态能耗管理。在Linux系统中,可以使用`lsblk -d -o name,rota`命令检查是否安装了SSD。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

简略

nvme ssd和普通ssd区别

详细

其他

NVME的优势

查看 Linux 系统中是否有 SSD 盘


 bandaoyu@uestc,本文持续更新,连接:http://t.csdn.cn/vaucH

简略

nvme ssd和普通ssd区别

ssd是固态硬盘,普通的ssd配的是SATA口(AHCI协议),nvme ssd配的是PCIe口(nvme传输协议)

  1. HDD 和 SSD 早期, SATA 接口(接口协议:AHCI )满足性能需求,瓶颈在硬盘端,闪存技术的飞速发展,性能瓶颈由下层(硬盘)转移至上层(接口和协议),SSD 急需要更高效的接口和协议,由此,NVMe(Non Volatile Memory Express)横空出世。
  2. RDMA 技术
  3. NVMe over Fabrics

如果我们与 SATA SSD 相比,使用 NVMe,IOPS 并行执行,允许同时进行许多计算。大任务可以分成几个小任务独立处理。类似于多核 CPU,使用多个线程。每个 CPU 内核可以彼此独立工作以执行特定任务。
队列深度 (QD) 是 NVMe 相对于 AHCI 的另一个优势。虽然 ACHI 和 SATA 可以处理 32 个队列深度(1 个队列和 32 个命令),但 NVMe 可以处理高达 65K 的队列深度。这些是 65K 队列,其中每个队列可以容纳多达 65K 个命令。除了减少延迟外,这还提高了处理并发请求的繁忙服务器的性能。

  • SATA/SAS和 PCIe接口对比
AHCI(SATA/SAS)NVMe(PCIe)
背景为HDD而设计为SSD而设计
最大队列数量164k
最大队列深度3264k
延迟6ms2.8ms
通信与SATA控制器通信直接与CPU通信

详细

原文:NVMe over RoCE 初探 https://zhuanlan.zhihu.com/p/345609031

常见的 SSD 主要分为 SATA 接口(接口协议: AHCI)、 PCIe接口(NVMe 协议Non Volatile Memory Express)。相比于最原始的 ATA 协议,AHCI 有 2 个特点,第 1 个支持热插拔,第 2 个支持 NCQ(Native Command Queueing)技术,NCQ 最大深度为 32,则使用 fio 进行性能测试时,其 iodepth不得超过 32;

在 HDD 和 SSD 早期,AHCI 控制器接口协议和 SATA 硬盘传输接口足够满足系统的性能需求,性能的瓶颈在硬盘端,随着闪存技术的飞速发展,系统的性能瓶颈由下层(硬盘)转移至上层(接口和协议),SSD 急需要更高效的接口和协议。在此背景下,NVMe横空出世。

NVMe 全称为 Non-Volatile Memory Express,是非易失性存储器标准,运行在PCIe 接口之上的协议标准。

协议的层级关系为:NVMe <---事务层 <--- 数据链路层 <--- 物理层,NVMe作为命令层和应用层协议位于最上层,下面 3 层均为 PCIe。

NVMe协议实际是一个应用层的协议,PCIe规范定义了传输层(事务层)、数据链路层和物理层。

NVMe协议通常情况下是跑在PCIe协议栈上的。

pcie是接口,nvme是协议。

笔记本上pcie接口都是M.2的物理形态,但是M.2固态硬盘不一定都用nvme协议,可能是传统sata硬盘所用的ahci协议。

现在已经有走PCIe通道的M.2接口了,就需要确认有没有NVMe协议相关驱动即可,可以进BIOS看一下,有没有NVMe相关的字眼,比如我的电脑,进到BIOS里面后,会看到如下:
链接:https://www.zhihu.com/question/263723989/answer/1203340571
 

下面将从 SATA和 PCIe 接口对比、 AHCI 和 NVMe速率对比、SSD 外形尺寸 3 方面对比 NVMe 和 AHCI的不同之处。

  • AHCI 和 PCIe 接口对比
AHCI(SATA/SAS)NVMe(PCIe)
背景为HDD而设计为SSD而设计
最大队列数量164k
最大队列深度3264k
延迟6ms2.8ms
通信与SATA控制器通信直接与CPU通信
  • SATA 和 PCIe 速率对比

当前我们使用 Intel Purley 平台服务器,即 I/O 接口的速度分别 SATA 3.0 和 PCIe 3.0。预计2021 年中旬 Intel 量产Ice lake Xeon处理器,带来的变化之一是 I/O 由 PCIe 3.0 切换至 PCIe 4.0,服务器平台也将由 Purley 切换至 Whitley。

SATA 1.0SATA 2.0SATA 3.0
速率150 MB/s300 MB/s600 MB/s
类型理论单向速率(GT/s)传输方式实际单向速率(Gbps)单向带宽receive or transmit
PCIe 1.02.58 bit/10 bit2250 MB/s
PCIe 2.058 bit/10 bit4500 MB/s
PCIe 3.08128 bit/ 130 bit7.87985 MB/s(约等于 1GB/s)
PCIe 4.016128 bit/ 130 bit15.752016 MB/s(约等于 2GB/s)
  • SSD的外形尺寸

NVMe SSD外形接口形态有:PCIe card slot, M.2, and U.2,其中 U.2专为NVMe设计,有2.5英寸/3.5英寸标准尺寸固态硬盘驱动器。

  • 举个例子,S4510 1.92TB 和 P4610 1.6TB 参数对比
S4510 1.92TBP4610 1.6TB
光刻类型64-Layer TLC 3D NAND<--
接口类型SATA 3.0 6Gb/sPCIe 3.1 x4, NVMe
顺序读 (MB/s)5603200
顺序写 (MB/s)5102080
随机读(IOPS)97k643k
随机写(IOPS)35.5k199k
闲置功耗(W)1.15
典型功耗(W)3.214
硬件加密AES 256 bit<--

从上图可以直观看出,P4610 NVMe SSD 性能顺序和随机读/写性能明显优于 S4510 SATA SSD,具体数据为:顺序读约 5.7 倍、顺序写 3.7 倍、随机读约 6.6 倍、随机写约 5.6 倍。

其他

NVME的优势


NVME是硬盘新的传输标准,下一代协议,比现代的AHCI传输协议更加高级。

NVME的优势有以下几点:

1.更低的延时。NVME精简了调用方式,执行命令时不需要读取寄存器,而AHCI每条命令则需要读取4次寄存器,一共会消耗8000次CPU循环,从而造成2.5微秒的延迟。

2.更高的传输性能。性能不错的SATA接口的SSD,在队列深度上都可以达到32,这也是AHCI所能做到的极限。更高端的PCIe SSD其队列深度可达128,甚至是256才能发挥出最高的IOPS性能。而NVME标准下,最大的队列深度可达64000。此外,NVME的队列数量也从AHCI的1提高到了64000。

3.更低的能耗控制。升级版的NVME在能耗方面肯定会进行优化处理,能耗降低了有助于设备的节能使用,同时也会减少控制元件的工作负荷。NVME加入了自动功耗状态切换和动态能耗管理功能,SSD在闲置的时候可以快速的控制在极低的水平,从而降低整体的能耗。

查看 Linux 系统中是否有 SSD 盘

命令:

lsblk -d -o name,rota

rota 列为 0,则是 SSD 盘,为 1,则为传统机械硬盘。

说明:

要查看 Linux 系统中是否有 SSD 盘,你可以使用以下方法之一:

使用 lsblk 命令:lsblk 命令可以列出系统中的块设备信息,包括硬盘类型。你可以通过运行以下命令来查看硬盘类型:

lsblk -d -o name,rota
如果 rota 列显示为 0,则表示该硬盘是 SSD 盘,如果显示为 1,则表示为传统机械硬盘。

### Advanced Host Controller Interface (AHCI) 协议介绍 AHCI 是一种用于定义主机系统与串行 ATA(SATA)设备之间数据传输的标准接口规范[^1]。它提供了一种标准化的方式,使操作系统能够通过硬件驱动程序访问 SATA 设备。 #### AHCI 的组成结构 AHCI 架构主要由两部分构成: - **AHCI Host Device**: 这通常是指 HBA(Host Bus Adapter),即主机总线适配器。HBA 负责管理主机端的数据流并控制与客户端设备的交互过程。 - **AHCI Client Device**: 它可以指代任何支持 ATA 接口标准的存储装置,比如硬盘驱动器或光驱等。 这种设计使得 AHCI 成为了连接这两种不同类型的组件间桥梁的角色——既满足了现代计算机对于高效能储存解决方案的需求同时也保持良好的兼容性灵活性。 #### 数据通信机制 AHCI 使用命令列表结果表来处理来自操作系统的请求以及返回给它的响应信息。具体来说,在每次 I/O 操作之前都会创建一个名为 Port Command List Entry 的条目;当完成相应的读写动作之后,则会更新另一个叫做 FIS Data Structure 的区域以反映当前状态变化情况。 此外值得注意的是,由于采用了中断聚合技术以及其他优化措施,因此相比传统 IDE/PATA 方式而言,基于 AHCI 实现方案往往具备更低延迟特性的同时还能带来更高吞吐量表现。 ### AHCI 协议的具体实现方式 以下是关于如何在软件层面模拟或者开发针对某款特定平台下的简单 AHCI 控制逻辑示例: ```c #include <stdint.h> // 假设已经存在一些基础寄存器地址映射宏定义如下: #define REG_CAP (*(volatile uint32_t *)(0xdeadbeef)) // Capabilities Register #define REG_GHC (*(volatile uint32_t *)(0xdeadc0de)) // Global Host Control Register #define PORT_CMD_LIST ((uint8_t *)0xbadf00d0) // Base address of port command list entries array. void initialize_ahci() { uint32_t cap = REG_CAP; if (!(cap & 0x1)) { // Check if controller supports AHCI mode. return; // If not supported, exit early. } REG_GHC |= 0x1; // Enable AHCI Mode globally by setting bit 0 in GHC register. prepare_command_list(); // Initialize the command lists and other necessary structures here... } void submit_io_request(uint8_t port_num, void *buffer, size_t length){ struct ahci_port_cmd_entry* cmdEntryPtr; /* Locate correct entry within preallocated buffer */ cmdEntryPtr = (struct ahci_port_cmd_entry*)(PORT_CMD_LIST + sizeof(struct ahci_port_cmd_entry)*port_num); setup_fis_data_structure(cmdEntryPtr->prdt_base_addr, buffer, length); trigger_interrupt_for_completion(port_num); } ``` 上述代码片段展示了初始化 AHCI 控制器的过程以及提交 IO 请求的基本框架。实际应用中还需要考虑更多细节问题,例如错误恢复流程的设计、多队列并发执行的支持等等。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值