一、前言
存储器件作为系统中存储数据的物理单元,承担着非常重要的责任,它的运行状态时刻影响着整个系统的运行效率,存储容量和数据安全。所以整个产业针对存储器件的寿命,稳定性,容量,性能以及价格等方面进行着长期持续的探索与改进,进而衍生出了多种多样的存储器件应用于不同阶段和不同场景需求的系统。
而手机系统场景尤其复杂,对存储性能(包括IO的带宽,延迟和稳定性)的要求更加严苛。那么应对如此高要求的手机系统,存储器件在手机系统中是如何应用和发展呢?下面我们一探究竟。
二.UFS与NVMe全面对比
首先,我们可以知道,目前手机系统主流的存储器件有两种,一种是安卓手机使用的UFS,另外一种是苹果用的NVMe。我们依次介绍:
2.1UFS简介
UFS,Universal Flash Storage,通用闪存存储。为什么现在主流使用UFS呢?很简单,就是快。我们看下主流2lan的UFS,其顺序读的数据传输速率可以达到4.2GB/s:
UFS为什么这么快呢,对比手机以前使用的eMMC,有如下优势:
UFS采用差分串行传输,而eMMC采用并行数据传输。并行最大的问题是速度上不去,因为一旦时钟频率提升,干扰就变大,信号完整性无法保证。随着时钟频率越来越高,高速串行传输的优势就很明显了。
支持多通道数据传输(目前是两通道),多通道可以让UFS在成本,功耗和性能之间做取舍。
UFS是全双工工作模式,意味着读写可以并行。而eMMC是半双工,读写是不能同时进行的。
UFS支持命令队列,可以异步处理命令,而eMMC无命令队列,只能进行同步处理。
综合串行,多通道,全双工和异步的巨大优势,UFS流行也是大势所趋。
UFS(全双工+串行)vs eMMC(半双工+并行)
2.2 NVMe简介
NVMe是专门为高速闪存芯片设计的协议,主要是为企业级和数据中心的PCIe SSD设计的接口标准,来充分发挥闪存的性能。NVMe通讯协议+PCIe总线协议是实现高速SSD性能的基础,为什么这种组合可以充分发挥SSD的性能呢?
在NVMe之前,除了自成体系的SCSI协议(SAS SSD),其它SSD基本用的是AHCI+SATA协议。其实AHCI和SATA是为HDD服务的,而且SATA是由PATA进化而来,也是使用到了我们前面提到的高速串行的全双工传输。奈何SSD具有更低的延迟和更高的性能,SATA已经严重制约了SSD的速度,此时就需要PCIe了。
相比SATA/SAS,我们先看下PCIe到底有多快:
常见的4 lan的PCIe4.0 SSD,传输速度就可达7GB/s
那么,如果把SATA换成PCIe是不是就可以了,有NVMe什么事情呢?这就需要看SATA的难兄难弟AHCI了,如果不用NVMe,老旧的AHCI同样会严重制约SSD性能。下面的对比图可以看到AHCI与NVMe的差距了:
讲到这里,这些协议错综复杂,大家是不是已经云里雾里了。不着急,我们用下面这张图帮助大家理解他们的关系:
参照SAS SSD的协议栈,我们可以简单明了的看到,SATA和PCIe是物理接口和协议,AHCI和NVMe则是上层软件协议
2.3 UFS与NVMe比较
从上面的介绍可以看到,UFS拥有很好的性能,尤其是到了UFS4.0时代,2lan的顺序读可以达到4GB/s。但是,同时我们也可以看到,NVMe作为专为SSD所设计的协议,确实也有着无以伦比的性能,尤其是PCIe6.0,单lan就可以达到恐怖的8GB/s。
那么苹果为什么会采用NVMe而安卓还在继续使用UFS呢?孰优孰劣?
接下来我们针对UFS和NVMe从以下几个维度进行全面详细的剖析:
2.3.1底层器件材料:
器件使用的材料可以说对性能起着决定性的影响,目前来看各个厂家的UFS和NVMe SSD都采用的NAND颗粒,在这块来说,UFS和NVMe是旗鼓相当的,可以造成差距的就是UFS因为尺寸原因,无法做更多的堆叠而导致通道数不够,导致器件并行度有限从而影响性能。
2.3.2总线传输协议:
我们前面介绍过,NVMe是基于PCIe总线进行数据传输的,那么UFS用的什么传输协议呢?
先看下UFS的架构图,
最下层的互连层(UIC):由MIPI(Mobile Industry Processor Interface ,移动产业处理器接口)联盟的M-PHY作为物理层和MIPI的UniPro作为数据链路层组合而成。
中间的传输层(UTP):是JEDEC(固态技术协会)自己定义的。
最上层的应用层(UCS):使用的简化的SCSI子集组成UCS,由T10组织定义的。
我们可以看到UFS整个协议栈是借用了M-PHY,UniPro和SCSI组合而成,需要互相配合,数据传输的效率可能会有所折扣。那么再看看NVMe就显得很简洁,底层全部使用PCIe,传输效率也会相应的快很多。
2.3.3 上层软件层次:
底层协议UFS和PCIe的速率我们前面比较过,PCIe确实强。
那么,上层协议SCSI和NVMe相比的话,孰优孰劣?
既然UFS使用古老的SAS SSD的SCSI子集,那么作为新兴的协议,NVMe与SCSI相比,是否有优势呢?我们看看它们的协议栈对比:
NVMe是简洁的高速协议,从上图我们也可以看到NVMe传输只需要一层,而SCSI则需要多层传递,比较臃肿,UFS子系统隶属于SCSI低层。而且UFS自身也分了三层,简单介绍一下:
UFS平台层:获取平台相关的属性,通过ufshcd_pltfrm_probe调用公共层ufshcd_init。获取底层UFS host驱动并传递到公共层。
UFS公共层:提供UFS公共行为,策略,错误处理等。实现ufshcd_init等。
UFS host物理层:实现scsi控制器驱动。
UFS和NVMe协议有一些显而易见的差异也会导致性能差距,尤其是IO队列个数和队列深度:
2.3.4驱动代码差异:
上面我们了解了UFS SCSI和NVMe协议栈的差异,NVMe简洁高效而SCSI略显臃肿,那么体现到驱动代码层面,IO到底需要经历多少波折呢?通过下图的函数调用,我们简单看下IO提交的请求在两种驱动中是如何进行处理的,然后最终发送成功,器件进行处理。
request从block层下来,通过queue_rq可以调到scsi或者NVMe驱动。
NVMe处理request相对简单,block层调用nvme_queue_rq,只需要经过准备命令之后,就可以放到提交队列里了,紧接着再去写doorbell,设备就可以去接着去处理命令了。
UFS需要处理的过程就比较复杂了,block层调用scsi_queue_rq之后,经过scsi中层准备命令,然后发送到scsi低层ufs的队列中,然后ufs驱动再进行组合处理去发送,最后通过写寄存器完成命令的发送,设备才可以进行处理。
2.3.5 特性差异:
通过前面的比较,我们可以看到UFS在性能方面确实不如NVMe,但是毕竟NVMe SSD主要运用在企业和数据中心服务器中,而UFS是用在手机等终端设备中,使用场景有着相当大的差异,他们所需要的特性也是不尽相同。站在存储行业的角度来看,服务器存储(软件+硬件)发展的早而且应用广泛,所以对终端存储的很多特性有着极具价值的参考意义。譬如UFS的LU的概念就与NVMe的namespace相似。
我们以最新的UFS4.0和NVMe2.0来做对比,探下究竟。
UFS4.0的新feature主要集中在传输速率和性能提升方面,还有一些安全和可用性的提升。尤其是MCQ的提出,完全可以与NVMe的多队列媲美。
2.NVMe2.0新增的feature也不少,因为NVMe SSD主要应用于企业和数据中心,所以这些feature主要集中在数据管理和可靠性方面,最为重要的几个是NVMe Set和ZNS的提出,为数据管理提供了更多的方式和应用场景。尤其值得一提的是,NVMe支持KV存储这种新型的存储形式,将对存储的性能和效率有极大的提升。
下面列一些已有feature的增强,我们从已有的feature可以看到NVMe的特性是相当的丰富。
安全方面:PI,TLS,in-band验证等
和可靠性方面:log记录(CEL,PEL),Non-MDT,预测机制Telemetry,擦除期间防中断,OOB读引导分区等
性能方面:TTR
易用性方面:SGL,ZNS status notification等
综合起来看,NVMe特性要比UFS丰富很多,后面UFS可以参考NVMe增加更多的feature,使UFS为终端场景提供更高的性能,更好的安全性,可靠性和易用性。
三.UFS和NVMe如何取舍
前面比较了这么多,我想大家心里都有个数了,这么看苹果使用NVMe那是相当明智了,到这里很多同学应该会问,NVMe这么好,那么为何安卓厂家都还在使用UFS呢?这个问题我们可以从下面两个角度思考:
3.1 从苹果的角度来讲
首先可以肯定的是,苹果无法将普通的NVMe SSD直接放在手机里,一个是尺寸不允许,二来现有SSD的功耗也是手机无法承受的,所以可以肯定的是,苹果凭借其强大的整合能力和话语权,特殊定制了适用于手机的NVMe SSD。
其次可以思考的是,服务器上的PCIe总线在手机上是用不了,苹果需要采用新的总线来进行传输。真实的情况是什么呢?
苹果采用了一种移动版的PCIe,叫M-PCIe。但是呢,总归是服务器总线协议,所以PCIe标准下,phy层的功耗较高,而低功耗情况下,状态迁移延迟太大。如下图,M-PCIe就把标准的PCIe物理层换成了M-PHY,看到这个大家是不是很眼熟,对的,M-PHY就是UFS用的物理层。
做好了这些,只需要上层搭配NVMe协议和驱动,苹果就可以使用NVMe的先进特性了,尤其是多队列。
我们要知道,苹果用nvme的时候还是在2015年的iphone6s上,那个时候大部分安卓厂商还在emmc阶段,nvme可以说是天下无敌。我们看下当时AnandTech的测试,iPhone 6s的顺序读写速率那是一骑绝尘。
3.2 从安卓各个厂家的角度来讲,为什么不采用NVMe呢?
最关键的一点就是现在UFS的性能已经不比NVMe差了,根据下图,我们以iPhone 14 pro max上的NVMe速率来看,连续读取也只有1500M/s,已经比现在的UFS4.0速度差了很多,这也是安卓厂家能够继续使用UFS的最大驱动力。
所以顺序读写性能:UFS4.0 > NVMe = UFS 3.0 > UFS 2.1 > eMMC 5.1
当然,在2015年的时候,安卓厂家不用NVMe,可能还有以下的原因:
原因1:整合成本问题,苹果整合能力强是毋庸置疑的,安卓厂商成本,精力和话语权有限。
原因2:软硬件生态问题,苹果系统和芯片都自己掌握,机型也少,软硬件生态打造相对容易。安卓厂商则相反,芯片需要高通和mtk,系统需要安卓,而且安卓的机型也是多种多样,很难去打造自己的生态。
原因3:UFS与NVMe本质速度差不多,安卓使用NVMe不见得快。
原因4:竞争差异化,安卓厂商需要有自己的特点,如果跟随苹果,那么市场上也很难站稳脚跟。
原因5:前面介绍过的,NVMe本质是软件接口协议,所以根本是硬件颗粒差异,NVMe搬移到手机上肯定有很大的性能损失,电脑可以通过多闪存颗粒形成多通道,提高传输带宽,手机空间则没有办法。
原因6:能使用 NVMe闪存,跟苹果A9 芯片开始用 PCIE 接口有关,后续苹果家的 WiFi、基带都使用 PCIE 接口,自己家的芯片接口自己定义,其他厂商真的学不来。
四.未来终端器件的发展
经过上面的介绍和分析,我们可以了解到,UFS和NVMe各有特点,而且会长期共存并且性能也会越来越好。
那么我们只需要UFS和NVMe就够了吗?显然不会的,随着科技的发展,新的存储器件也会孕育而生。我们提到的UFS和NVMe的物理介质其实本质上都是NAND半导体颗粒。其实存储行业中已经有一些新型的介质已经开始崭露头角,未来应用到手机终端存储也是很有可能的,我们找几个火热的一起来盘一盘:
4.1 PCM(Phase Change Material):
相变材料,是指在物质发生相变时,可吸收或释放大量能量的一类材料。由于相变材料是利用潜热储能,储热密度大,蓄热装置结构紧凑,并且在相变过程中本身温度基本不变,易于管理,现在成为新型存储的一个主要方向。
PCM相变存储对比原来NAND FLASH有更快的读写速度,几乎永久的使用寿命,存储密度极高,当然价格目前来说也是比较可观的。
而且PCM有另外的名字,那就是Intel的3D Xpoint技术,我们熟知的Optane就是用到这个技术。
4.2 MRAM(Magnetic Random Access Memory):
磁性随机存取存储器,其核心原理是自旋电子学,利用电子自旋特性,自旋磁性方向会出现不同的电阻特性,电阻状态可以表示0和1。
MRAM具有非易失性、读写速度快、能耗低、集成密度高、耐久力强、天然抗辐射和随工艺节点等比微缩等优点,等于兼具Flash的非易失性、媲美DRAM的高速读写特性、媲美FeRAM的极高擦写次数
4.3 FeRAM:铁电存储器,
优点:断电能保存数据,同时速度比NAND快很多,功耗低,读写速度快,具有抗辐照能力
缺点:工艺困难,价格贵
4.4 ReRAM:阻变存储器,是以非导性材料的电阻在外加电场作用下,在高阻态和低阻态之间实现可逆转换为基础的非易失性存储器。具备一般小于100ns的高速度、耐久性强、多位存储能力的特点。
五.结语
天下大势,分久必合,合久必分。虽然目前手机终端主流存储器件是UFS和NVMe,并且随着需求变化,都会增加新的特性去不断完善,但是未来是否会合二为一也说不准。同时伴随着时代的发展,物联网,人工智能,云计算等对数据存储的需求快速增长,不断有新型存储出现和发展,凭借它们超强的性能,超长寿命,超高可靠性,或者超低价格(所有企业都敏感),随时可能有颠覆性的改变,让我们一起期待和关注,到时再聊聊。
参考文献
【1】https://www.anandtech.com/show/9662/iphone-6s-and-iphone-6s-plus-preliminary-results
【2】https://blog.csdn.net/Frank_sample/article/details/118706691
【3】 https://zhuanlan.zhihu.com/p/26652622
【4】https://picture.iczhiku.com/weixin/message1621467838637.html
往
期
推
荐
手机投屏之WFD简介
一文了解Vulkan在移动端渲染中的带宽与同步
AMD高保真超分算法1.0解密
长按关注内核工匠微信
Linux内核黑科技| 技术文章| 精选教程