上回说到,子虚在方老师的桌上发现了一本厚厚的书,这是什么书呢?
刚才回答是《金瓶梅》的同学请自觉出去面壁5分钟。
这本手册是《Intel 64 and IA-32 Architectures Software Developer's Manual》,全书共4卷,学习之后可以对x86计算机的工作机制有庖丁解牛一般的深入理解。
那么,研究云计算的存储系统,为什么要读这本书呢?
方老师回答了子虚两个词:SPDK,PMDK。
这,又要从存储硬件的发展说起了。
计算机的存储器最初是磁带、磁鼓、磁芯和软盘等容量小,性能低下的介质,直到这个家伙的出现——
没错,这个体积像冰箱一样的东西就是最早的硬盘——IBM 305,容量为5MB,1956年正式面世。
1973年,IBM3340面世,容量为30MB,由于当年流行的西部影片中的常见的元素“温彻斯特来福枪”,这款硬盘被起了个绰号“温彻斯特”,从此,使用同轴盘片,并与磁头密封在一个盒子里的磁盘被称为“温彻斯特硬盘”。人们也经常用和同轴盘片性状类似的圆柱体图形来指代硬盘。
数十年来,温彻斯特硬盘的容量从30MB发展到了14TB,但由于机械结构的缘故,其读写性能受制于两个因素:
1、寻道时间:如上图中,磁头需要转动到对应的磁道读写数据,消耗的时间为寻道时间;
2、磁盘转速:磁盘需要将对应扇区转动到磁头下,才能读写数据,磁盘转速加上寻道时间可以视为读写的延时;
同时,对于离散的随机IO,读写延时也制约了总体的IO性能。因此,即使是现在最高性能的15000 rpm 2.5寸SAS硬盘,其随机IO性能也难以超过每秒200次。
工程师们想到了,既然机械部件限制了温彻斯特硬盘的性能,那么,如果我们不使用机械部件呢?
实际上,早在1978年,在工业控制计算机中,就出现了无机械部件的持久化存储部件——DOM (Disk On Module),最初的DOM是通过CCD(Charge-coupled device)实现的,成本十分高昂,用于机械硬盘不适用的恶劣环境,因此又被称为又被称为Solid State Disk(应当翻译为“坚固的磁盘”,但目前一般翻译为“固态盘”)。
在进入21世纪后,Flash Memory(闪存)的成熟,使得SSD盘飞速进入企业级市场。由于SSD盘没有磁头和磁盘等机械组件,十分有效地突破了机械组件的物理限制,SSD盘的单盘IO可达8万以上,读取延迟可低于100us。
然而,当人们想进一步取得更低的读取延迟和IO时,普通SAS或SATA盘都遇到了瓶颈。原来,SATA接口需要通过系统南桥转换,而SAS接口一般由挂在PCIe总线上的HBA控制器提供。从下图可以看出,其IO路径较长,因此IO能力和延迟都受到这方面限制。此外,SATA本身的吞吐也会成为IO能力进一步提升的瓶颈。
为了突破SAS和SATA的这些限制,Intel的工程师们呕心沥血地想出了一个主意:能不能将SSD盘直接通过PCIe总线挂接到CPU上呢?
于是,这就有了NVMe(Non-Volatile Memory express,非易失性存储接口规范)标准。相比起为机械盘设计的SATA和SAS标准来,NVMe标准是专为高性能的SSD盘设计的,能充分发挥SSD的小宇宙!
SATA的理论吞吐能力为6Gbps,而SAS理论吞吐能力为12Gbps。但我们知道,PCIe 3.0每个通道(lane)可以提供8Gbps的吞吐能力,4个Lane可达32Gbps。此外,在通过PCIe直通降低硬件时延的同时,NVMe还通过更少的寄存器读写交互来降低延迟。
以SATA(ACHI)为例,每次IO的过程中,CPU需要读写4次寄存器。由于读写的是外部IO地址,无法利用缓存能力,4次读写SATA寄存器会消耗约8000个CPU指令周期,从而造成至少2.5us的延迟。而NVMe只需要利用PCIe的DMA能力即可,在降低延时的同时也大大节约了CPU时间。这样一来,NVMe单盘的IO能力能达到500K IOPS。这是机械硬盘时代不可想象的,数千块机械硬盘组成的阵列也无法达到这样的性能要求。
那么,这和Intel的开发手册有什么关系呢?
子虚问方老师。
方老师微微一笑:
去逐字逐句读托克维尔的《旧制度与大革命》。
子虚翻了翻白眼,跑去了图书馆……
请看下回分解。