searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

常见硬盘接口介绍

2023-04-23 05:37:13
59
0

从外形来看,硬盘主要有如下几种形态:

SATA PCIE这两个都是总线标准

串行ATA(Serial ATA: Serial Advanced Technology Attachment)是一种计算机总线,负责主板和大容量存储设备(如硬盘光盘驱动器)之间的数据传输。

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)

PCIe - Peripheral Component Interconnect Express

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

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

NVM Express或进一步缩写NVMe,全称Non-Volatile Memory Host
Controller Interface Specification(缩写NVMHCI),可译作「非易失性内存主机控制器界面规范」。

NVMe是与AHCI类似的,基于装置逻辑界面的总线传输协议规范,主要用于通过PCI Express(PCIe)总线与计算机连接的非易失性内存装置(例如,采用闪存的固态硬盘机)。

NVMe 发展史

主流的PCIe闪存卡性能要远高于SAS和SATA接口的固态硬盘,这是一个公认的观点,但是另一个问题是原生PCIe闪存卡就需要厂商为其开发专属的接口规范,以便PCIe能够与闪存实现更好的结合。但是市场要往前走就必须实现标准化,这时候NVMe出现了。

NVMe是一个可扩展的主机控制接口,主要为企业、数据中心以及客户端系统中应用PCIe接口的固态存储设备设计。这个接口规范在指令和执行路径上都做了优化,而且支持多个并行操作(单一I/O队列可以支持到64K命令)。此外,NVMe支持很多包括端到端数据保护(和T10DIF和DIX标准配套)这样的企业级功能。

早期基于PCIe的固态硬盘目前在主机控制器接口(HCI)没有统一的标准,这导致每一个固态硬盘厂商都需要为其固态硬盘提供专门的驱动程序,标准的缺乏使得基于PCIe的固态硬盘市场发展具有巨大的阻力,不论是NVMHCI工作组还是当下的NVMe联盟都在努力打破这个局面,其工作不仅确保了整个NVMe生态圈的全面协同发展,使客户可从开放的产业生态链中选购所需,对产业规模的提升和用户成本优化具有划时代意义。

Windows、Linux、Solaris、Unix、VMware、UEFI等系统都已经实现了对NVMe标准的支持,PCIe固态硬盘的验证周期和相应的成本都得到了极大的缩减。

最新的SATA接口带宽理论值为6Gbps(750MB/s),最新的SAS接口带宽为12Gbps,而PCIe每个通路支持1GB/s(PCIe Gen3 x1),并且拥有更好的可扩展性和更低的延迟(即将发布的PBlaze4 PCIe闪存卡可以做到4.0/2.5GB的读/写性能)。这样一个简单的对比说明若要闪存的性能优势充分发挥,PCIe接口是必须的。而NVMe则是将PCIe与闪存以及PCIe闪存卡与主机能够更好的协作。

上图简单展示了几种硬盘/闪存卡的延迟以及指令的路径,简单的说,PCIe从硬件接口的层面缩短了闪存与CPU之间的距离,响应延迟得到了缩短,而NVMe则通过优化从软件层面缩短了指令从CPU到SSD的路径。PCIe、闪存与NVMe 三者的结合像是将接口、存储介质以及接口的协议标准都重新定义了一次,形成了新的存储设备标准。

与AHCI相比,NVMe有四大优势:

1、低延时

2、IOPS大增

3、功耗更低

4、驱动适用性广

低延时和良好的并行性的优势就是可以让SSD的随机性能得到大幅度提升。

硬盘测试工具FIO介绍:

FIO是用于硬盘测试的一个开源工具,一般Linux系统是自带FIO的,如果没有或者版本太老,要自己从https://github.com/axboe/fio下载最新版本源代码编译安装。进入代码主目录,输入下列命令就编译安装好了。

./configure;make &&make install

帮助文档用下面命令查看:

man fio

线程,队列深度,Offset,同步异步,DirectIOBIO

使用FIO之前,首先要有一些SSD性能测试的基础知识。

线程指的是同时有多少个读或写任务在并行执行,一般来说,CPU里面的一个核心同一时间只能运行一个线程。如果只有一个核心,要想运行多线程,只能使用时间切片,每个线程跑一段时间片,所有线程轮流使用这个核心。Linux使用Jiffies来代表一秒钟被划分成了多少个时间片,一般来说Jiffies是1000或100,所以时间片就是1毫秒或10毫秒。

一般电脑发送一个读写命令到SSD只需要几微秒,但是SSD要花几百微秒甚至几毫秒才能执行完这个命令。如果发一个读写命令,然后线程一直休眠,等待结果回来才唤醒处理结果,这种叫做同步模式。可以想象,同步模式是很浪费SSD性能的,因为SSD里面有很多并行单元,比如一般企业级SSD内部有8-16个数据通道,每个通道内部有4-16个并行逻辑单元(LUN,Plane),所以同一时间可以执行32-256个读写命令。同步模式就意味着,只有其中一个并行单元在工作,暴殄天物。

为了提高并行性,大部分情况下SSD读写采用的是异步模式。就是用几微秒发送命令,发完线程不会傻傻的在那里等,而是继续发后面的命令。如果前面的命令执行完了,SSD通知会通过中断或者轮询等方式告诉CPU,CPU来调用该命令的回调函数来处理结果。这样的好处是,SSD里面几十上百个并行单元大家都能分到活干,效率暴增。

不过,在异步模式下,CPU不能一直无限的发命令到SSD。比如SSD执行读写如果发生了卡顿,那有可能系统会一直不停的发命令,几千个,甚至几万个,这样一方面SSD扛不住,另一方面这么多命令会很占内存,系统也要挂掉了。这样,就带来一个参数叫做队列深度。举个例子,队列深度64就是说,系统发的命令都发到一个大小为64的队列,如果填满了就不能再发。等前面的读写命令执行完了,队列里面空出位置来,才能继续填命令。

一个SSD或者文件有大小,测试读写的时候设置Offset就可以从某个偏移地址开始测试。比如从offset=4G的偏移地址开始。

Linux读写的时候,内核维护了缓存,数据先写到缓存,后面再后台写到SSD。读的时候也优先读缓存里的数据。这样速度可以加快,但是一旦掉电缓存里的数据就没了。所以有一种模式叫做DirectIO,跳过缓存,直接读写SSD。

Linux读写SSD等块设备使用的是BIO,Block-IO,这是个数据结构,包含了数据块的逻辑地址LBA,数据大小和内存地址等

0条评论
0 / 1000
infrahw
7文章数
0粉丝数
infrahw
7 文章 | 0 粉丝
原创

常见硬盘接口介绍

2023-04-23 05:37:13
59
0

从外形来看,硬盘主要有如下几种形态:

SATA PCIE这两个都是总线标准

串行ATA(Serial ATA: Serial Advanced Technology Attachment)是一种计算机总线,负责主板和大容量存储设备(如硬盘光盘驱动器)之间的数据传输。

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)

PCIe - Peripheral Component Interconnect Express

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

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

NVM Express或进一步缩写NVMe,全称Non-Volatile Memory Host
Controller Interface Specification(缩写NVMHCI),可译作「非易失性内存主机控制器界面规范」。

NVMe是与AHCI类似的,基于装置逻辑界面的总线传输协议规范,主要用于通过PCI Express(PCIe)总线与计算机连接的非易失性内存装置(例如,采用闪存的固态硬盘机)。

NVMe 发展史

主流的PCIe闪存卡性能要远高于SAS和SATA接口的固态硬盘,这是一个公认的观点,但是另一个问题是原生PCIe闪存卡就需要厂商为其开发专属的接口规范,以便PCIe能够与闪存实现更好的结合。但是市场要往前走就必须实现标准化,这时候NVMe出现了。

NVMe是一个可扩展的主机控制接口,主要为企业、数据中心以及客户端系统中应用PCIe接口的固态存储设备设计。这个接口规范在指令和执行路径上都做了优化,而且支持多个并行操作(单一I/O队列可以支持到64K命令)。此外,NVMe支持很多包括端到端数据保护(和T10DIF和DIX标准配套)这样的企业级功能。

早期基于PCIe的固态硬盘目前在主机控制器接口(HCI)没有统一的标准,这导致每一个固态硬盘厂商都需要为其固态硬盘提供专门的驱动程序,标准的缺乏使得基于PCIe的固态硬盘市场发展具有巨大的阻力,不论是NVMHCI工作组还是当下的NVMe联盟都在努力打破这个局面,其工作不仅确保了整个NVMe生态圈的全面协同发展,使客户可从开放的产业生态链中选购所需,对产业规模的提升和用户成本优化具有划时代意义。

Windows、Linux、Solaris、Unix、VMware、UEFI等系统都已经实现了对NVMe标准的支持,PCIe固态硬盘的验证周期和相应的成本都得到了极大的缩减。

最新的SATA接口带宽理论值为6Gbps(750MB/s),最新的SAS接口带宽为12Gbps,而PCIe每个通路支持1GB/s(PCIe Gen3 x1),并且拥有更好的可扩展性和更低的延迟(即将发布的PBlaze4 PCIe闪存卡可以做到4.0/2.5GB的读/写性能)。这样一个简单的对比说明若要闪存的性能优势充分发挥,PCIe接口是必须的。而NVMe则是将PCIe与闪存以及PCIe闪存卡与主机能够更好的协作。

上图简单展示了几种硬盘/闪存卡的延迟以及指令的路径,简单的说,PCIe从硬件接口的层面缩短了闪存与CPU之间的距离,响应延迟得到了缩短,而NVMe则通过优化从软件层面缩短了指令从CPU到SSD的路径。PCIe、闪存与NVMe 三者的结合像是将接口、存储介质以及接口的协议标准都重新定义了一次,形成了新的存储设备标准。

与AHCI相比,NVMe有四大优势:

1、低延时

2、IOPS大增

3、功耗更低

4、驱动适用性广

低延时和良好的并行性的优势就是可以让SSD的随机性能得到大幅度提升。

硬盘测试工具FIO介绍:

FIO是用于硬盘测试的一个开源工具,一般Linux系统是自带FIO的,如果没有或者版本太老,要自己从https://github.com/axboe/fio下载最新版本源代码编译安装。进入代码主目录,输入下列命令就编译安装好了。

./configure;make &&make install

帮助文档用下面命令查看:

man fio

线程,队列深度,Offset,同步异步,DirectIOBIO

使用FIO之前,首先要有一些SSD性能测试的基础知识。

线程指的是同时有多少个读或写任务在并行执行,一般来说,CPU里面的一个核心同一时间只能运行一个线程。如果只有一个核心,要想运行多线程,只能使用时间切片,每个线程跑一段时间片,所有线程轮流使用这个核心。Linux使用Jiffies来代表一秒钟被划分成了多少个时间片,一般来说Jiffies是1000或100,所以时间片就是1毫秒或10毫秒。

一般电脑发送一个读写命令到SSD只需要几微秒,但是SSD要花几百微秒甚至几毫秒才能执行完这个命令。如果发一个读写命令,然后线程一直休眠,等待结果回来才唤醒处理结果,这种叫做同步模式。可以想象,同步模式是很浪费SSD性能的,因为SSD里面有很多并行单元,比如一般企业级SSD内部有8-16个数据通道,每个通道内部有4-16个并行逻辑单元(LUN,Plane),所以同一时间可以执行32-256个读写命令。同步模式就意味着,只有其中一个并行单元在工作,暴殄天物。

为了提高并行性,大部分情况下SSD读写采用的是异步模式。就是用几微秒发送命令,发完线程不会傻傻的在那里等,而是继续发后面的命令。如果前面的命令执行完了,SSD通知会通过中断或者轮询等方式告诉CPU,CPU来调用该命令的回调函数来处理结果。这样的好处是,SSD里面几十上百个并行单元大家都能分到活干,效率暴增。

不过,在异步模式下,CPU不能一直无限的发命令到SSD。比如SSD执行读写如果发生了卡顿,那有可能系统会一直不停的发命令,几千个,甚至几万个,这样一方面SSD扛不住,另一方面这么多命令会很占内存,系统也要挂掉了。这样,就带来一个参数叫做队列深度。举个例子,队列深度64就是说,系统发的命令都发到一个大小为64的队列,如果填满了就不能再发。等前面的读写命令执行完了,队列里面空出位置来,才能继续填命令。

一个SSD或者文件有大小,测试读写的时候设置Offset就可以从某个偏移地址开始测试。比如从offset=4G的偏移地址开始。

Linux读写的时候,内核维护了缓存,数据先写到缓存,后面再后台写到SSD。读的时候也优先读缓存里的数据。这样速度可以加快,但是一旦掉电缓存里的数据就没了。所以有一种模式叫做DirectIO,跳过缓存,直接读写SSD。

Linux读写SSD等块设备使用的是BIO,Block-IO,这是个数据结构,包含了数据块的逻辑地址LBA,数据大小和内存地址等

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0