有一段时间没写博客了,要解释的话可以找一万种借口……曾经坚持写博客的习惯,如今随着年龄的增长也是“时过境迁”,只能说人在某个阶段认定铁打的事情,随着生活的磨砺有可能被自己推翻并自我嘲讽……

好吧,别跑题了,今天的主题是聊存储不是聊人生,你既然点了我的文章链接进来了,那就证明您是带着问题或者学习的目的来的,我也不能让你们失望而归。下面就进入正题吧:

 

IT技术的发展一年比一年快,传统的IT基础架构三剑客:”计算,存储,网络”,随着云计算、虚拟化、容器技术的快速发展和应用也发生了翻天覆地的改变。但是话又说回来,万变不离其宗,不论是新瓶装老酒还是老瓶装新酒,咱门底层的原理可不能忘记,特别是对于刚接触存储的朋友或者是接触存储已经有一段时间但是希望对存储有个连续贯穿有层次的理解的话,那么这篇文章你算读对了。

 

存储是个应用很广的技术,无论是从手机终端,智能嵌入式系统到笔记本电脑、PC再到服务器只要有数据交换就离不开存储,存储这个话题我们分两大类来聊一聊:第一大类是个人电脑(包括笔记本和台式机),第二大类是服务器。今天就先俩聊个人电脑上的存储。

 

个人电脑的存储

太久远的存储技术,如穿孔纸带,软盘,等我们在这里不聊,我们就聊聊现在主流的和我们日益相关的技术。在日常生活中你是不是被什么SATA,eSATA,SAS,NvMe,M2,PCIE,PCI,PCIE,SATA2.0,SATA3.0,SATA接口固态硬盘,M.2接口固态硬盘,PCIe固态硬盘等技术搞得抓不到头绪呢,那么下面先看一下这张图:

老技新谈之存储那些事-1_存储协议

如果我们先按照上图所述的,在弄清这些术语之前,我们先把“协议”,“总线”,“接口”这几个关键术语给整明白,那么再来理清我们上面提到的各种术语的组合你就游刃有余了。

协议

首先先理解存储的协议,“协议”顾名思义,就是行业内达成的一种共识,一种标准,只要你想生产存储相关产品就得按照现有的协议走,要不然你生产的设备接到电脑上其他硬件可识别不了。打个比方,中国方言那么多,如果不定个标准,把普通话做为协议“标准语言”,那么不同地方的人聚在一起沟通都是个问题,那么只要遵守协议,规定不同方言的人聚在一起大家都用普通话沟通,就能达到沟通顺畅的效果。在存储上也一样,只要遵守其中的存储协议,那么才能和其他硬件彼此通讯和交换数据并进行存储。存储协议目前主流的有三种,AHCI、NVMe、SCSI。至于三种协议的详细介绍大家可以自行搜索,这里简单的提一下。

AHCI协议

AHCI全称是串行ATA高级主控接口/高级主机控制器接口,是在Intel的指导下,由多家公司联合研发的接口标准,它允许存储驱动程序启用高级串行ATA功能。开启AHCI模式后,能够大幅缩短SSD无用的寻道次数和缩短数据查找时间,这样能让多任务下的SSD能够发挥全部的性能和效应。根据相关性能测试,在AHCI模式开启后,大约增加30%的SSD读写性能。

SCSI协议

SCSI即小型计算机接口(Small Computer System Interface),指的是一个庞大协议体系,到目前为止经历了SCSI-1/SCSI-2/SCSI-3变迁。 SCSI协议定义了一套不同设备(磁盘,磁带,处理器,光设备,网络设备等)利用该框架进行信息交互的模型和必要指令集。

SCSI协议本质上同传输介质(SATA线,PCIE线,网线等)无关,SCSI可以在多种介质上实现,甚至是虚拟介质。例如基于光纤的FCIP(Fiber Channel over IP)链路协议,基于SAS(Serial Attached SCSI)的链路协议,基于虚拟IP链路的iSCSI协议。通俗点说SCSI协议就是一个存储设备与服务器之间接口通讯的一个规范。

NVMe协议

NVMe协议是专门为闪存产品开发的传输协议,是目前SSD产品传输协议的最优解决方案,可以充分发挥SSD的性能同时又可以降低延迟。目前作为NVMe协议的M.2接口的固态硬盘是首选,同条件下读写速度基本都在AHCI协议的3倍以上。NVMe是一个针对基于PCIe总线的固态硬盘的高性能的、可扩展的主机控制器接口,NVMe的显著特征是提供多个队列来处理I/O命令。

 

另外,还有快被人遗忘的IDE协议,由于现在几乎没有使用了,这里也不占用文章和大家的脑细胞,有兴趣的朋友可以自行搜索了解下历史。

 

近几年随着SSD(固态硬盘)的发展,从传输协议形态的进化可窥探一二。目前拥有IDE协议、AHCI协议、SATA协议、NVMe协议所对应出来的PATA(并行ATA)、SATA、mSATA(micro SATA)、M.2、PCIe等接口的产品,在各种平台设备都有所运用。但是基于NVMe协议的M.2、U.2接口的SSD已经成为台式机和笔记本电脑的主流配置,而PCIex8和PCIex16接口的SSD已经成为了服务器电脑的主流配置。

总线

说到存储总线,我们先简单看看个人电脑上各数据的通讯方式:如下图所示,电脑主板上一般有分南北桥:北桥负责与CPU通信,并且连接高速设备(内存/显卡),并且与南桥通信;南桥负责与低速设备(硬盘/USB等外设)通信,时钟/BIOS/系统管理/旧式设备控制,并且与北桥通信。简而言之,个人电脑上的存储设备接在各种总线上,接着IO/总线再接在南桥上,最终南桥和北桥再实现数据交换和通讯。不过这里要说明的是,Intel从SandyBridge开始,CPU整合了内存控制器和PCI-E控制器、DMI通道,相当于是把原来北桥的功能集成在CPU内部了,北桥自然就消失了。而南桥也换了个称呼叫IO Hub,这样可以实现IO Hub和CPU进行直接通讯,省去了北桥作为中间传输中介的环节。

老技新谈之存储那些事-1_存储协议_02

如果说存储协议好比交通规则,则存储总线就像公路,其他接入总线的设备就像是你开的汽车,你要开车上公路,首先就必须遵守交通规则(存储协议)。公路有省道,市道和县道等之分,而存储总线也有不同种类,目前主流的总线有”SATA”,”PCIe”和“SAS”。公路的承载能力由其公路的宽度决定,比如单车道,双车道,四车道,八车道等;而区分存储总线承载能力的名词,称为带宽,也就是单位时间内能够传递的数据量。带宽越大,单位时间内能够传递的数据量自然就越多。下面就上面提到的三种主流总线分别介绍一下:

SATA总线

SATA总线使用嵌入式时钟信号,具备了更强的纠错能力,与以往相比其最大的区别在于能对传输指令(不仅仅是数据)进行检查,如果发现错误会自动矫正,这在很大程度上提高了数据传输的可靠性。串行接口还具有结构简单、支持热插拔的优点。与并行ATA相比,SATA具有比较大的优势。首先,Serial ATA以连续串行的方式传送数据,可以在较少的位宽下使用较高的工作频率来提高数据传输的带宽。Serial ATA一次只会传送1位数据,这样能减少SATA接口的针脚数目,使连接电缆数目变少,效率也会更高。实际上,Serial ATA 仅用四支针脚就能完成所有的工作,分别用于连接电缆、连接地线、发送数据和接收数据,同时这样的架构还能降低系统能耗和减小系统复杂性。其次,Serial ATA的起点更高、发展潜力更大,Serial ATA 1.0定义的数据传输率可达150MB/sec,这比并行ATA(即ATA/133)所能达到133MB/sec的最高数据传输率还高,而在已经发布的Serial ATA 2.0的数据传输率将达到300MB/sec,Serial ATA 3.0实现600MB/sec的最高数据传输率。

老技新谈之存储那些事-1_存储协议_03

PCIe总线

PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由英特尔在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。PCIe总线的提出可以算是代表着传统并行总线向高速串行总线发展的时代的到来。实际上,不仅是PCI总线到PCIe总线,高速串行总线取代传统并行总线是一个大的趋势。如ATA到SATA,SCSI到SAS等……

SAS总线

什么是SAS?简单的说,SAS是一种磁盘连接技术。它综合了现有并行SCSI和串行连接技术(光纤通道、SSA、IEEE1394及InfiniBand等)的优势,以串行通讯为协议基础架构,采用SCSI-3扩展指令集并兼容SATA设备,是多层次的存储设备连接总线。SAS磁盘与SATA磁盘接口的唯一区别是SAS磁盘还有第二个冗余端口,而SATA磁盘则只有一个端口。

接口

上面聊完总线,我们接着聊聊和我们最能直观感受的接口类型,再看一次这张图:

老技新谈之存储那些事-1_存储协议

如上图所示,一个总线下面可以接不同接口,而同一接口也可以走不同总线,有基于SATA总线的SATA,mSATA,SAS,U.2,M.2;有基于PCIe总线下的SATA Express,M.2,U.2,SAS口;基于SAS总线的U.2和SAS接口。所以,可见,SATA总线并不一定接SATA接口的存储设备,而PCIe总线也不一定接PCIe接口的存储设备。理论上来说,接口应该不受限于总线类型和协议类型,而只是因应用需求而设计。在个人PC上,由于采用NVMe协议的PCIe接口总线下的PCIe接口和M.2接口无论是在体积上还是在传输速率上都占有较大的优势,所以是今后的发展趋势。

到这里,你就可以知道当你在某东和某宝上搜索固态硬盘的时候,何种参数让你眼花缭乱的原因是啥了,有直接标MVNe固态硬盘的,有标M.2的,有标PCIe的设置还有标SATA的,其实从大的方面来讲都没错,但是就是没有一个具体的标准,拿NVMe固态硬盘来说,凡是采用遵从NVMe协议制作的固态硬盘无论是PCIe接口,还是M.2接口都可以叫NVMe固态硬盘。而M.2接口的固态硬盘不一定叫NVMe固态硬盘,因为如果走的协议是AHCI并且接在SATA总线上的,那就叫基于SATA总线M.2接口的固态硬盘。下面拿三星旗下的固态硬盘型号来距离说明,先看看面向消费级的SSD:

老技新谈之存储那些事-1_存储接口_05

从上图可以看到SATA接口的固态硬盘,表示该硬盘采用SATA总线和AHCI协议;而M.2接口类型有两个:一个前面带NVMe的表示是基于NVMe协议走PCIe总线的;一个前面没有加NVMe的表示走的是AHCI协议和SATA总线。

再看面向企业级的SSD:

老技新谈之存储那些事-1_存储总线_06

拿983DCT这款SSD硬盘来举例说明,这款硬盘采用的是MVMe协议,但是有两种接口类型,一种是M.2接口,M.2接口上面提过这里不再说明,而U.2接口既可以走PCIe总线也可以种SAS总线。

聊完NVMe协议下的接口我们再聊聊PCIe接口,这个接口对于玩大型游戏和做图的人可能比较熟悉,好多高端独立显卡都用PCIe接口,目前PCIe接口已经发展到4.0了,下面先看看一张图:

老技新谈之存储那些事-1_存储协议_07

好了,关于个人电脑上的存储我们今天就聊到这,下期我们再聊聊服务器上的存储技术,我们下期再会,感谢您的拜读!