原文链接:蛋蛋读UFS之一:UFS简介
我们知道,我们电脑由三大件组成:CPU,内存和硬盘。CPU用以计算和控制,内存用以临时存储程序运行时所需的数据(掉电数据丢失),而硬盘用以长久保存数据(掉电数据不丢失)。
我们每天使用的手机,其本质是一个移动的小型计算机,同样由三大件组成:CPU,内存和存储设备。其中的存储设备相当于电脑的硬盘,用以长久保存手机上的数据,比如视频、照片、音乐、系统等数据。
电脑的硬盘有机械硬盘(HDD)和固态硬盘(SSD),前者是机械存储设备,存储介质是磁盘;而后者是电子存储设备,存储介质是闪存。我们不可能在小小的手机中塞入一个机械设备,所以手机上的存储设备只能是电子存储设备,存储介质也都是闪存。
现在是人手一个手机的时代,手机成了人们身体的一部分,一天不带手机,就感觉缺少了什么,吃嘛嘛不香。
因此,人们对手机的要求也越来越高: 速度要快,容量要大,流畅不卡顿…
为了让手机更快,手机厂商使用更快、更多核的CPU,加大系统内存(4GB不够用6GB,6GB不够用8GB),使用更快的存储设备。无论是电脑还是手机,三驾马车(CPU,内存和存储设备)中,跑得最慢的就是存储设备了。CPU和内存的快步向前,促使最慢的存储设备也需要努力跟上,不然再快的CPU和再大容量的内存,你的手机用起来还是让你觉得不爽。
近年来,由于闪存技术的应用和发展,无论是电脑上的硬盘,还是手机中的存储设备,都在变得越来越快。
电脑上,从HDD 到SSD,从SATA SSD到PCIe SSD,硬盘是越来越快;
手机上,从SD卡,到eMMC卡,再到UFS卡,存储卡的速度也是越来越快。现在一般手机配的是eMMC,旗舰高端手机配的是UFS。
我们这个系列的主角UFS已登场。为什么UFS是主角?为什么我要带大家去了解UFS? 因为,UFS将是未来一段时间内手机存储的主流,我们有必要去了解UFS以及其相关的技术。
那么,什么是UFS?Universal Flash Storage,通用闪存存储。它有两个意思,一是指手机存储接口协议,类似SATA,PCIe/NVMe;二是使用该协议的存储设备。后面文章出现UFS,读者请根据上下文理解。
为什么说UFS是手机存储的未来?无他,快也!
大家感受一下:
UFS最新标准是UFS3.0,于2018年1月30日发布。它最大带宽可以达到2163MB/s!4倍SATA3.0的速度 (600MB/s),超过PCIe3.0x2的速度(2GB/s单向速度)。
不过,目前市面上的UFS产品还是UFS2.0/2.1,其最大带宽1081MB/s,也是秒杀一般的SSD。
UFS协议是JEDEC(www.jedec.org)组织制定的,三星、海力士、东芝等公司力捧。下面是UFS协议的发展历程:
我们可以看到,UFS协议一直在大踏步的朝着更高更快的目标前进。
UFS为什么能那么快?
首先,它在数据信号传输上,使用的是差分串行传输。这是UFS快的基础。所有的高速传输总线,如SATA,PCIe,SAS,都是串行差分信号。串行,可以使用更快的时钟(时钟信息可以嵌在数据流中);差分信号,即用两根信号线上的电平差表示0或者1。与单端信号传输相比,差分信号抗干扰能力强,能提供更宽的带宽(跑得更快)。打个比方,假设用两个信号线上电平差表示0和1,具体来讲,差值大于0,表示1,差值小于0,表示0。如果传输过程中存在干扰,两个线上加了近乎同样大小的干扰电平,两者相减,差值几乎不变,你大爷还是你大爷。但对单端信号传输来说,就很容易受干扰,比如0-1V表示0,1-3V表示1,一个本来是0.8V的电压,加入干扰,变成1.5V,相当于0变成1,数据就出错了,你大妈已经不是你大妈了。抗干扰能力强,因而可以用更快的速度进行数据传输,从而能提供更宽的带宽了。
UFS的前辈是eMMC,使用的是并行数据传输。并行最大的问题是速度上不去,因为一旦时钟上去,干扰就变大,信号完整性无法保证。
其次,UFS和PCIe一样,支持多通道数据传输,目前最多支持两个通道。多通道可以让UFS在成本、功耗和性能之间做取舍。
还有,它是全双工工作模式,就是读写可以并行。它的前辈eMMC是半双工,读写不能同时进行。
要让UFS速度快,这些基础设施是必须的。但要充分利用底层高速数据传输通道,还需要上层数据传输协议配合。就好比我们现在有一条又宽敞又平坦的高速公路,我们需要一辆高速的汽车行驶在上面。你如果让一辆拖拉机在上面跑,高速公路算是白修了。
UFS协议上层,怎样来充分发挥底层速度快的优势呢?
UFS支持命令队列,就是主机一下可以发很多个命令下去,然后UFS设备支持并行和乱序执行,谁先完成谁先返回状态。这种命令处理方式叫做异步命令处理。而它的前辈eMMC,是不支持命令队列的,命令一个一个执行,或者一包一包(每个包里面含有若干个命令)执行,前面命令没有执行完成,后面的命令是不能发下去的。这种命令处理方式叫做同步命令处理。
我们来比较一下“全双工+异步命令处理”和“半双工+同步命令处理”两者命令处理方式和命令执行效率。
• 半双工+同步
主机发了一个写命令W1给设备,然后主机把数据写到设备;由于是同步传输模式,命令处理是一个一个处理的,所以在发读命令R2之前,必须等前一个写命令W1完成;同样,在发送写命令W3之前,必须等R2命令完成。
全双工+异步
由于支持命令队列,主机一下可以发若干个命令给设备,如上图,主机一下发了一个写命令W1和读命令R2给设备。设备可以并行处理这两个命令,由于协议支持全双工操作,主机传输写命令W1的数据给设备的同时,设备也可以把读命令R2的数据返回给主机。后面命令R3,R4,W5…的处理方式类似。
再形象一点,我们以搬运货物的例子来比较一下eMMC和UFS命令执行方式:
现在的手机,应用非常丰富,你要一边斗地主,一边听歌,还要聊微信,多线程操作。由于全双工和命令队列的存在,UFS处理命令的效率大大提高,给用户极好的体验。
前面我们拿UFS和eMMC做了几个对比,但我好像忘了说什么是eMMC。有人可能懵逼,什么是eMMC?
eMMC,Embedded Multi Media Card,和UFS一样,也是JEDEC制定的移动存储协议,它是UFS前一代协议标准。
eMMC最新标准是2015年发布的eMMC5.1,最高速度是400MB/s。JEDEC已经有了UFS,不确定会不会再发布新的eMMC标准。毕竟,并行传输的eMMC由于受限于物理信号,速度想要有个质的飞跃是不太现实。
行文至此,让我不由的想起去年那事件。
同一款手机,有人UFS和eMMC混着卖,手机还卖一个价钱,真是无德!UFS和eMMC,速度差异那么大(见下图,来自网络),价格能一样吗?你系统再优化,能把eMMC顺序读写速度优化到401MB/s?别扯什么用户体验,用户都被耍猴了,体验还能好?水能载舟,亦能覆舟,不要太得意忘形。
如果说eMMC是手机中的HDD,那么UFS就是手机中的SSD。UFS取代eMMC成为主流手机存储协议,这是毫无疑问的。不过,UFS一统天下的道路上还有一个拦路虎,那就是NVMe。有人说,NVMe不是SSD的协议标准吗?没错,不过,我要提醒大家的是,苹果现在手机中存储协议是NVMe而不是UFS。在短期,UFS和NVMe会分别在安卓和苹果手机中存在。长期来说,UFS和NVMe是二分天下,还是合二为一,我们只能拭目以待了。
在本章结束前,给大家看看UFS(BGA形式)的实物图:
大小如大拇指手指盖大小。麻雀虽小,五脏俱全。UFS存储芯片内部封装了UFS控制器和闪存阵列,和SSD结构很相似。不过和SSD相比,由于它的容量更小,因此闪存die比较少,闪存的通道数也少。另外,出于功耗和成本考虑,UFS芯片一般是不带DRAM的架构。
UFS芯片内部设计与实现不是我们本系列的重点,本系列后续文章将专注于UFS协议。