PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

“打酱油”解读SLC缓存新技术

[复制链接]
跳转到指定楼层
1#
Essence 发表于 2018-3-30 11:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击数:10097|回复数:19
本帖最后由 Essence 于 2018-3-30 12:51 编辑

Intel 760p评测以及新生代3D TLC闪存NVMe SSD横评中,两次提起了新型SLC缓存技术。本文将带大家由浅入深探索其中的新发现。

第一部分:由4K随机读取的发现

早先已经有网友发现了Intel 760p异乎寻常的超高4K随机读取性能。76.19MB/s,虽然无法匹敌使用3D XPoint闪存的傲腾固态硬盘,有可能也是普通NAND闪存固态硬盘中的新高了。

写入很容易被SLC Cache所缓存,而单线程随机读取由于几乎无法被预测,被认为是不受缓存影响的。然而超过70MB/s(CDM为1000进制,76.19换算1024进制为70.96)的单线程4K读取显然不符合TLC闪存应有的读取性能。

以1y nm时代TLC闪存为例,当以TLC模式进行读取时,读取延迟在80us到105us之间;而当以SLC模式进行读取时,闪存典型读取延迟是50us。尽管3D闪存相比平面闪存有很多进步,但读取延迟并没有突破性进步,不然也就不会有3D XPoint闪存的问世。


若完全不考虑各种软硬件开销,只看闪存延迟的话,80us读取延迟意味着随机读取IOPS不会超过12500,换算成4K单线程随机读取也就是48.83MB/s左右。若以SLC模式进行读取,50us读取延迟下随机读取IOPS无法超过20000,换算成4K单线程随机读取也就是78.13MB/s左右。

Intel 760p测出的4K单线程读取性能介于TLC与SLC之间,远大于TLC闪存能力。简而言之,Intel 760p的SLC Cache能够缓存读取数据。对浦科特M9Pe测试中也有与之类似的情况被发现。



此时再对比看三星960Evo的4K QD1随机读取性能就比较“平淡”了:



第二部分:现象解释

这一部分以打(da)酱(bi)油(fang)的形式浅显地解释上一节中发生在Intel 760p与浦科特M9Pe中的现象。

假设TLC固态硬盘的存储空间是一个肚大颈细的大油瓶:容量大(TLC),但口太小倒不快(写入速度慢),还容易把酱油撒在外面(不适合一步编程写入)。所以我们需要一个漏斗(SLC缓存)。


漏斗的容量有限,但是上部开口很大,可以容纳短促的大流量倒入。现在需要定几个规矩出来:漏斗不能倒太满流出来(SLC容量不能超上限)、这个漏斗有个性,只有你上边不倒的时候,酱油才能开始往下流(SLC缓存只在空闲时释放,以避免缓存释放同时进行写入出现性能问题)。

漏斗(SLC缓存)的加入没有改变酱油瓶流速(写入速度)偏慢的老毛病,甚至漏斗里的酱油往瓶子里落的速度还不如直接往瓶口倒的快(SLC缓存释放速度有可能不及TLC直接写入速度),但有了漏斗酱油就不会洒出来(SLC缓存降低了TLC编程的困难)。再加上如果不倒那么猛(一次性填满)的话,用户不会感觉到有瓶颈,还会觉得这个过程跟直接往大口锅里倒一下很随心很享受(爆发写入速度快),所以最后几乎所有油瓶(TLC固态硬盘)购买时都附赠漏斗一个(SLC缓存)。


当需要炒菜放酱油的时候,酱油是从酱油瓶里直接倒出来的(数据读取是从TLC闪存直接读出),因为漏斗里的酱油早漏光,全部进入酱油瓶了(SLC缓存遇空闲会自动释放,因而不影响读取速度)。以上还是一颗正常漏斗(标准SLC缓存策略)的表现。

而Intel 760p与浦科特M9Pe附赠的漏斗(SLC缓存)就很特别了,为了让炒菜放酱油时更省事,往漏斗里加了一小块海绵! 这样每次“倒进去的酱油”(写入的数据)总有一部分不会“漏下去”(释放到TLC),而是残存在“漏斗”(SLC缓存)里。海绵吸附量有限,只保留最后倒进去的新鲜酱油,原来海绵中的老酱油被替换出去后就会在空闲时漏进酱油瓶里。


要用酱油直接把漏斗里的海绵取出来,放锅口挤挤就有了,炒菜连酱油瓶都不用拿了,又快又方便!(读取数据时有机会从SLC缓存直接读出,速度比从TLC读取快很多)

当然,这个法子也有一些弊端:海绵会侵占漏斗容积,闲置时漏不干净的话下次再倒进来酱油的时候,漏斗能直接容纳的容量就相应少了一些。另外,漏斗海绵里吸附的酱油量可能不够,缺的部分还需要拿起油瓶倒。如果漏斗里的酱油不是恰好你想要的,这时候也需要重新拿起油瓶倒。另外,如果漏斗发生了一次被填满的情况,漏斗中的海绵在接下来会被彻底挤干,其中保留的酱油也将全部落入下方瓶中。

Intel&浦科特固件研发攻城狮:MMP,老子码代码那么辛苦,你说我只是在打酱油!


第二部分完。

第三部分:回归算法本质

上一节我们讲了油瓶(TLC SSD)和漏斗(SLC缓存)的故事,实际上故事和真正发生在固态硬盘当中的情况还是有不少区别的,比如固态硬盘可以同时处理读取和写入,读取的数据可能部分来自于SLC缓存,部分来自于TLC直接读出。

根据PCEVA测试结果分析,Intel 760p 512G的漏斗容量约为5.5GB,漏斗里海绵最多占据漏斗容量中的3GB左右;浦科特M9Pe 512G的漏斗容量约为5.6GB,漏斗里海绵最多占据漏斗容量中的2.85G左右。这部分能够在固态硬盘进入空闲后依旧留存不释放、无论关机重启都不会自动清空的缓存区,我给它起一个名字叫“持续性缓存”。

持续性缓存以SLC状态存在,目标是加速读取性能,它实际上是SLC缓存当中的一个队列空间,这个队列遵循FIFO先进先出原则,始终只保留最后刚写入的部分在缓存内不释放。被挤出队列的数据仍可存在于SLC缓存当中,并随空间时间的到来而被释放回TLC状态。


当前已发现能够清空持续性缓存的方法有:1、Secure Erase,2、全盘格式化,3、SLC缓存被一次性写满,那么盘接下来进入空闲时,持续性缓存中的内容会随其他缓存内容全部被释放为TLC状态。

持续性缓存能够避免被遇空闲自动清空,这是它能够有效起到读取缓存作用的前提。缓存无论命中率如何,都只遵循FIFO的原则进行更新,始终保留最后写入的数据。当电脑执行一些带有重复性的操作时,持续性缓存就会起到显著的加速作用。


举个例子,当对小范围的文件反复读取写入的过程中,原本不存在于持续SLC缓存中的文件内容也会像碎片拼图一样逐渐在持续SLC缓存中形成,并加速后续读写性能,产生类似于“机器学习”的效果。

以下验证测试实验方法为:使用IOMeter生成1GB测试文件,使用HDTune文件基准一次性填爆SLC缓存,使得自动生成的持续性缓存被清空,然后空闲等待10分钟,再次开启IOMeter,依旧对当前已处于TLC态存储的1GB测试文件执行4K QD1混合随机读写(读取占比70%)测试,分析测试结果会发现,总体IOPS数值会呈现上升趋势,最后又略有下降:


实验分析:由于测试开始前持续性SLC缓存已经因缓存整体写满而全部强制释放,当4K QD1混合随机读写测试开始时表现出的是数据在TLC态读取并以SLC态同步写入的情形。随着其中30%的写入操作持续进行,持续SLC缓存逐步开始建立起来,像拼图一样慢慢覆盖了全部1GB测试区间,表现在IOPS曲线上就是一个逐渐上升的过程:这时混合读写操作中占比70%的读取请求也由SLC态的缓存直接读出。由于SLC态的读取延迟比TLC态低很多,持续SLC缓存在这里起到了有效的加速效果。测试曲线的后半段,大约250秒之后,IOPS曲线再度下降,则可能是SLC缓存写满,进入了TLC直写状态(闪存支持Copy back)。

持续性缓存的存在,使得Intel 760p与浦科特M9Pe在写入负载相对较轻时主动留存新近写入的部分数据,提供一定读取命中可能性。理论上来说,持续性缓存的存在会侵占整体SLC缓存能够用来承接爆发性写入的能力,于重负载写入情形不利。实际测试中,对比三星960Evo 500G(下图左)与浦科特M9Pe 512G(下图右)的PC Mark 8存储测试成绩可以发现,写入负载最重的Photoshop heavy项目浦科特落后了0.3秒,而其他测试项目中浦科特或打平或胜出,整体依然是取得了有利的形式,总成绩也以5094对5074大幅领先。


当然上边这个对比中变量很多,不过以三星960Evo更高的持续读取和更高的缓存外持续写入速度,最终输掉整个测试,还是在一定程度上印证了浦科特M9Pe固件优化的有效性。

作为无二级OP设计的TLC固态硬盘,Intel 760p和浦科特M9PeG的SLC缓存都只能来自于一级OP空间当中,除非像三星那样在空间很闲余时借部分用户空间模拟SLC,否则SLC缓存的容量都不会很大。但从PC Mark 8测试成绩来看,增加持续性缓存设计之后并未给重负载写入测试项目带来太大不利影响。


三星曾有研究结论显示(来自TurboWrite技术白皮书),TLC固态硬盘的SLC缓存容量应该大于3GB:电脑用户平均每小时产生1.17GB数据写入,90%以上的用户平均工作负载容量小于3GB。

三星960Evo 500G在空间使用率不高的情况下,最高能提供22GB的SLC缓存空间,在文件拷贝测试中会取得明显的优势。但作为系统盘使用的固态硬盘不会经常遇到类似移动硬盘的大容量连续不间断的使用方式。总的来说Intel与浦科特现有的SLC缓存容量看似小,但实用性并不欠缺。

总结:

在过去固态硬盘曾经历过拼持续读写、拼随机IOPS等历史阶段,随着NVMe协议的提出,降延迟成为固态硬盘新的性能发展方向。基于3D XPoint闪存的傲腾固态硬盘使得大众看到了低延迟的魅力,虽然高昂的成本使得短期内难以取代NAND固态硬盘成为主流,但低延迟的好处已经深入人心。尽管NAND闪存自身延迟很难获得变革性的降低,不过新型SLC Cache能够实现部分读取缓存的作用,充分利用SLC比TLC延迟的优势,实现了实用性能的提升。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
2#
ryoma1836 发表于 2018-3-30 12:04 | 只看该作者
浦科特M9Pe 512G的漏洞容量约为5.6GB
3#
七月流火 发表于 2018-3-30 12:21 | 只看该作者
又学习了新知识
4#
nighttob 发表于 2018-3-30 12:49 | 只看该作者
介于纯傻瓜式的WriteBack和Tier分层之间。
5#
yhhuada66 发表于 2018-3-30 13:02 | 只看该作者
这个酱油比喻真是太好了,科普好文,学习了
来自苹果客户端来自苹果客户端
6#
zhengshiqi 发表于 2018-3-30 13:34 | 只看该作者
不错不错,学习了
来自安卓客户端来自安卓客户端
7#
武英仲 发表于 2018-3-30 13:59 | 只看该作者
QLC快来了
以后会不会有多级缓存
8#
zsbstephen 发表于 2018-3-30 15:55 | 只看该作者
说直白点就是和姨妈巾类似……只要没溢出就先吸了……
9#
biggest 发表于 2018-3-30 19:14 | 只看该作者
zsbstephen 发表于 2018-3-30 15:55
说直白点就是和姨妈巾类似……只要没溢出就先吸了……

额,喜欢姨妈巾,不喜欢打酱油。
来自苹果客户端来自苹果客户端
10#
sss668800 发表于 2018-3-30 19:48 | 只看该作者
话说这个技术谁第一个用的?Intel和浦科特咋想到一块去了?
11#
tsammammb 发表于 2018-3-30 22:32 | 只看该作者
slc缓存不立即释放并不新鲜了吧,SATA SSD上用了很久了,诸如东芝OCZ的一些型号,只不过在4K读取数值上体现不出优势而已
12#
羽落风尘 发表于 2018-3-30 22:47 | 只看该作者
SLC缓存技术竟还能提升读取  这设计不错咯
13#
红色狂想 发表于 2018-3-30 22:55 | 只看该作者
应用题写的很好,受益匪浅
14#
haierccc 发表于 2018-3-31 12:43 | 只看该作者
好文!原来保留了一些数据在chache里不释放,当作读取缓存了。
15#
xiaoan_koala 发表于 2018-3-31 13:11 | 只看该作者
说得清楚,讲的明白
16#
McLaren 发表于 2018-4-2 10:29 | 只看该作者
像我这种水平差的看漏斗一下就看懂了
17#
hhm73 发表于 2018-4-2 18:50 | 只看该作者
果然有打酱油的配图
18#
bssharp 发表于 2018-4-3 16:19 | 只看该作者
又是缓存啊……计算机系统中缓存无处不在,反映了现实世界中二八定律无处不在
19#
eterfinity 发表于 2018-4-4 15:27 | 只看该作者
本帖最后由 eterfinity 于 2018-4-4 15:33 编辑

SLC cache版ramdisk加速读。。。。。。。。。
想到自己当年无聊的在4路服务器上拿ramdisk+jbod搭分层  跑分特别好  一填满就直线型跳水


20#
waxbl 发表于 2018-11-30 20:37 | 只看该作者
用3g的ram不是效果更好麻
来自安卓客户端来自安卓客户端
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部