硬盘这东西其实是很好玩的,里面有很多的故事可以说。当然讲的过于高深就不太好,所以这里尽量就用通俗的语言去讲解。相信认真看的你一定可以看懂的。
首先,既然将接口与总线,就要明白这三个概念:
传输总线,传输接口,传输协议
1 什么是传输总线?
所谓总线,其实他就是一条通道,就像公路一样,只不过公路是走车的,而总线是用来走电信号的。那么公路的大小与车速,就决定了这条公路的车流量,同样的,总线的位宽大小与传输频率,也决定了在一次传输中能够提供的最大速度。常见的传输总线很多。
1.1 PCIE
PCIE大家都想到了吧。你可能会说,PCIE不是给显卡网卡用的吗?硬盘怎么会用?其实,PCIE是一切的根源。你的所有外设,比如显卡,网卡,声卡,USB,SATA,M2等等,其实都是由PCIE演化而来。可以说PCIE就是一切的根。PCIE如今已经更新了三代,分别是1.0,2.0,3.0。其速度如下表
1.2 SATA
我想这个大家很熟悉了吧,很多人都在用的SATA1.0,SATA2.0,SATA3.0,以及没什么人用的SATA Express,SATA各代速度如下图
1.3 PATA(ATA)
大名鼎鼎的IDE硬盘,其速度和名字非常紧密,分别是ATA-66,ATA-100,ATA-133,分别代指着66MB/S,100MB/S,133MB/S的传输速度。
1.4 SCSI
服务器领域中使用的传输总线,SCSI莫过于像是PATA的服务器版,因为SCSI已经很少人用了,就不多说了。
1.5 SAS
同样的民用领域有PATA到SATA,服务器领域也有SCSI到SAS。SAS同样也已经更新了三代了,SAS1.0 达到了3Gbps,每一代翻2倍。而SAS控制器是可以兼容SATA设备的(但SATA控制器不能兼容SAS设备)。
1.6 FC
FC接口,全称叫Fibre Channel。由于中文名会容易和光纤接口混淆就不说了。(Wiki成为网状通道)FC是一种基于网络传输协议下诞生的接口,这种接口可以说是稀缺的不行。FC起源于SCSI,但在速度上远超SCSI,最新的FC通道速度达到了16Gbps。
2 什么是传输接口?
我想这个大家肯定很容易懂了,接口就是你接入的那个插口。不过因为传输接口和传输总线很容易混在一起,所以要多加区分。如:
2.1 PATA接口(IDE接口)
你说IDE也对,说PATA也对,因为没有规范,所以怎么说都对。
2.2 SATA接口
这个大家在熟悉不过了。需要注意的是,常说的eSATA,mSATA,miniSATA实际上都只是SATA接口的变种而已。
2.3 SATA Express接口
传说中的没人用接口,自推出以后,就没有几个人在适用。在intel 9系主板存活了一段时间后灭亡了,即使存在,我敢说绝大部分人都把它当成两个SATA用对不对(请真诚的回答我)。
2.4 M.2接口
由于NVMe协议爆发而突然走红的接口,其特点适用于笔记本等轻薄设备。
2.5 U.2接口
多用于服务器的接口,也因为NVMe而走红。与M.2的本质区别不大。可以说它和M.2的关系就如SATA与mSATA的关系。
2.6 SCSI/SAS接口
这些都不用说了吧,服务器版的PATA/SATA。
SCSI接口
SAS接口
2.7 FC接口
为FC而生的接口,和SCSI很像。
3 什么是传输协议?
传输协议,也有时候回叫做传输规范,网上很多都会把它叫做传输标准。什么是传输协议?用一种简单的理解方法,就是数据传输的方法。
每当有数据到达控制器(比方说南桥吧),传输协议就规定着这个数据将会以怎么样的方法传输到硬盘上。比如,一次传输队列中携带多少的数据,一次传输的数据大小等等。传输协议限定着硬盘(准确的就是硬盘控制器,常说的主控)与控制器(南桥等)如何传输,如何沟通,他就像交通规则一样,规范着数据的传输规则。那么哪些是传输协议呢?这里列举几个非常常见的传输协议。
3.1 IDE
老牌的硬盘传输协议,很多人经常会和PATA,ATA搞混淆,其实你搞混淆是非常可以理解的,因为连百度,Wiki都没有能很好的定义他们之间的区别,而介于IDE早已被淘汰,我想后人也不关心他们的区分了。IDE作为非常老牌的传输协议,为计算机能够更轻松的操作硬盘数据起到了非常重要的作用。但是随着计算机对速度的需求,与其配备的传输总线(ATA-133)以及自身的功能都太少了。也渐渐被AHCI与SATA所淘汰。
Tips:实际上,PATA的出现是因为SATA的出现,而为了防止ATA与SATA混淆,所以把ATA改名为PATA。
3.2 AHCI
IDE过低的速度,以及老旧的协议,催生了AHCI传输协议,AHCI相比于IDE,其每次传输传输一个队列中,携带32条指令,同时优化了硬盘队列,通过NCQ技术,使硬盘能够快速顺畅的读取数据而减少磁头移动带来的时间浪费。而与AHCI相匹配的SATA接口,能够提供比ATA总线更高的传输速度。但是,AHCI终究是为了机械硬盘而产生的产物,随着SSD的普及,SSD的高响应速度与读写能力在压榨着传输总线与传输协议的最大速度。因此而诞生了为SSD而生的新协议。
3.3 NVMe
如上文所属,为了能够让SSD更好的发挥速度与读写能力。NVMe随之产生。相比于AHCI,NVMe单次提供64*1024个请求队列,而每个队列达到了64*1024个请求。远超AHCI单队列32个请求的规模。NVMe可以说完全释放了传输协议的限制,而为了能够与传输协议的速度匹配,使用NVMe的设备都直接连接到了PCIE总线上。更直接的总线为NVMe设备提供绝对强大的传输速度。
4 他们如何影响着硬盘的速度?
实际上,判断一个硬盘的性能好坏,就是两大基本因素。一个是持续读写,一个是4K读写。而由他们所诞生的下属性能(比如SSD垃圾回收性能)就不一一说了。
持续读写毫无疑问,是压榨传输总线速度的最好工具。而4K读写,则是压榨传输协议的最好工具。道理我想大家都应该明白。持续读写讲究吞吐量。4K读写讲究的是请求量。我用一个简单的例子帮助大家理解。
还是以公路的例子。而我们把公路入口的收费站当作请求。每辆车当作一个数据。收费站就是一个协议,协议规定一次放多少车进入。而公路就是总线,它原来设计能通过多少车流量。
当测试持续读写的时候,就是测试这个公路最大的车流量。正常来说,收费站都是一车一杆的。但我不,我一杆走32辆车,那么在一杆这个时间段(每一杆的时间长度是一样的),流过的车就会非常多。就相当于一个请求里请求了非常大的数据。那么尽可能让大量的车进入了公路,其走过的车流量,就是我们要测试的吞吐量,也就是持续读写。
而当测试4K读写时,我们回到原来的一杆一车的状态。那么一杆车过的快慢,就决定了车流量的大小。而由此得到了4K读写的速度。
由此我们得到的结论就是传输协议,限制着硬盘的4K读写能力,而传输总线限制着硬盘的持续读写能力。(当然啦,这是假设硬盘主控读写能力非常强的情况下)。
这也就是为什么,SATA SSD的4K能力,总是突破不了10KIOPS,原因就在于AHCI传输协议已经达到极限了。而SATA SSD的持续读写能力也超过不了550MB/S,原因就是SATA3.0总线只能提供最大6Gbps的速度(在干扰与纠错等各种情况综合下,最终只达到了550MB/S)
几年前的高端M6S早已开始压榨AHCI与SATA3.0的极限
5 那么谁最强?
这个毫无疑问,使用NVMe协议,并通过PCIE总线的设备无疑是最强的。
跑分狂魔960PRO轻松跑出40万IOPS,但里离压榨PCIE与NVMe还远着
接口只是一种展现形式而已。它并不会对你的速度造成绝对的影响。所以,而协议也往往与总线所挂钩,但与接口的关系挂钩,往往相对而言比较的松一点。
比如:
基于SATA3.0总线,我们只能使用AHCI协议,但我们可以使用M.2接口,我们也可以使用SATA接口。得到的速度依旧是最高6Gbps(实际约550MB/s)。
而基于PCIE总线,我们只能使用NVME协议,但我们可以使用M.2接口,也可以使用U.2接口,根据PCIE总线的宽带,我们能获得4GB/s的速度(基于PCIE3.0 X4)。
评判一个硬盘的性能,除了硬盘自身的性能以外,必不可少的当然是这些总线与协议的配合。可以说这两个因素就是在不断的推动对方。
而我们所处的时代,因为SSD的出现,压榨了AHCI的请求能力与SATA的速度极限,才因此诞生了NVMe。现在时代又回到了是硬盘自身性能不足以跑满总线的时代了。谁能知道什么时候是下一个跳跃点呢?