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

深入探索SSD中DRAM缓存的作用和影响

[复制链接]
跳转到指定楼层
1#
Essence 发表于 2020-12-24 11:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击数:6791|回复数:4
DRAM缓存是SSD当中除主控和闪存以外的第三个重要部件,借着龟甲T3000评测的机会,PCEVA评测室深入探索了DRAM缓存的作用和影响。龟甲T3000使用了群联深度定制的PS5012-E12S方案,深度到什么程度呢?除了主控上的Armor LOGO和专属固件版本之外,还率先在E12S方案中应用了特殊的DRAM搭配方式。

T3000的缓存搭配方式:
根据DRAM缓存的有无,可以简单地将固态硬盘分成有缓存和无缓存两种。而龟甲T3000虽然有缓存,但并不是按照传统的1GB:1MB比例进行配置,而是按4GB:1MB或2GB:1MB进行配置。


龟甲T3000的最大容量达到了4TB,采用相对较小的DRAM缓存可以节省一定的硬件成本。下文中测试的是配备256MB缓存的龟甲T3000 1TB型号。由于1TB型号很快会更换BiCS4闪存,所以产品评测等日后新样品再进行,今天只讨论DRAM缓存和FTL算法,这部分内容预计不会发生变化。


从性能上说不足容的缓存肯定会有所影响,但相比无缓存方案又有明显的优势:Windows的HMB功能目前只能分配最多64MB共享缓存给NVMe SSD,并且数据通信需要通过PCIe界面,带来额外的延迟。


T3000 1TB中的256MB缓存虽然也有需要同NAND中完整FTL表进行交换的需求,但这种交换是在固态硬盘内部完成,不仅可用容量比HMB大,存取效率也更高。

以上介绍了龟甲T3000的DRAM缓存的配备情况。首先声明,本文不是为了向大家洗脑小缓存设计是如何比其他类型方案“更优秀”的,也不会用“四两拨千斤”这种枪文惯用套路,只是从原理和技术上进行探索,请放心食用。

以下的内容主要研究T3000 1TB中的256MB DRAM缓存能管理多大范围的NAND闪存,在DRAM需要从闪存中交换FTL片段时,效率如何。

固态硬盘的FTL设计:
由于相关的固件算法属于商业机密,小编并不能直接获取到DRAM缓存管理闪存容量的范围,只能通过各种测试手段去摸索。喜欢探索的朋友可以跟随小编一同透过现象看本质,若耐心不足也可以直接跳转到文末看结果。

常规的有缓存SSD会按照1GB:1MB的比例配备DRAM缓存,这个比例是根据Page映射的需求得来的。Page映射需要在FTL映射表里维护每一个闪存Page页物理地址所对应的逻辑地址,优势是性能强,缺点也很明显:SSD容量越大,需要的DRAM缓存容量也水涨船高。


举个不是特别恰当的例子:“狂牛版”显卡,大显存并不能带来与之相称的性能。对于一块硬盘来说,它配备的DRAM容量虽然是工作所需的,但并不能直接为用户所用,对于不追求最极致性能的普通玩家来说,多少是有些可惜的。

FTL采用Page映射高效但需要使用大量DRAM缓存空间,如若采用Block映射则只需很小的内存空间,但会带来糟糕的随机读写性能以及难以承受的写放大水平。介于二者之间的混合FTL是当前广泛被研究的技术方向。下面是一个Hybrid混合FTL闪存映射表示意图,包括一个使用Page映射的“小表”和一个使用Block映射的“完整表”。混合FTL的目标就是既能降低DRAM缓存容量需求,也能保障热数据存取性能。


上图其实只是一个网友的设想,无法同具体制造商产生关联。还是那句话,固件是SSD设计的关键,没有厂商会分享这部分机密内容。我们也无法得到确切的算法,只能从外部探索它可能的机制。


测试思路和过程:
DRAM缓存的作用是存储FTL闪存映射表,这张“表”如果不放在高速的DRAM缓存中,而是存储在相对较慢的NAND闪存里的话,SSD的随机读取速度就会受到影响。在这里我们通过4K QD1随机读取的速度就能判断出DRAM缓存能直接管理的范围:随着测试范围的增大,一旦速度发生下滑就说明256MB DRAM缓存里没有相关的闪存映射表数据,需要和存储在NAND闪存中的完整FTL大表进行交换了。

测试工具:IOMeter


在请出IOMeter之前,我们还有一个问题需要解决:龟甲T3000和之前我们测试过的很多高端SSD一样,具备“持久SLC缓存”机制。简单来说就是它的SLC缓存并不会在空闲后全部释放,而是故意保留一部分刚写入的数据,即便你关机重开,它依然是以SLC状态存在于SSD当中,这部分数据的随机和顺序读取速度都要比TLC状态的数据更快一些。

SLC缓存相关的复习链接:
http://bbs.pceva.com.cn/thread-145073-1-1.html
http://bbs.pceva.com.cn/thread-141698-1-1.html

下图是通过HDTune文件基准测试龟甲T3000的可用SLC缓存容量,默认是能测出24GB多一点,大约25GB的样子。请注意,除了橙色的写入速度曲线之外,蓝色的读取曲线的前25GB的速度也比后续位置更高一些,说明位于SLC缓存内尚未释放的数据,读取速度比从TLC里读取要快。


经过测试,T3000的持久缓存容量大约有16GB,要排除它对接下来测试的影响,每轮4K QD1随机读取测试开始前需要用其他手段多次写爆T3000的SLC缓存区,促使它将持久缓存全部释放成TLC状态,这样IOMeter读出来的就全部是TLC状态的数据,不会因为SLC和TLC速度有别而影响我们对DRAM缓存是否能直接管理测试区间的判断。由于测试的是SLC缓存释放以后TLC形态数据的4K随机读取速度,所以接下来的4K随机读取的成绩可能跟大家平时通过CrystalDiskMark中看到的差距很大,这是正常现象。


接下来就好办了,我们通过IOMeter设定不同的测试范围,不断增大测试范围看效果,这次测试的是T3000 1TB。


通过上面的图表可以很容易地发现,在测试范围超过125GB之后,测得的4K QD1随机读取速度开始下滑,说明小容量的DRAM缓存已经无法直接管理那样大的闪存范围了,由于FTL需要在DRAM缓存和NAND间进行交换,产生额外延迟,4K QD1随机读取速度开始下滑。

前面我们已经提到过,龟甲T3000采用的应该是Hybird FTL,也就是混合闪存映射表,所以我们就不能再按1GB:1MB的范围去揣测256MB DRAM缓存对应管理256GB NAND闪存容量了。从实测结果来看,DRAM缓存能够直接管理的范围介于125GB和135GB之间。

从DRAM缓存里完全没有相关位置的FTL信息,到从NAND中交换到这部分闪存空间的完整FTL表耗时:8GB大约1秒。



125GB范围大约需要18秒:



再补充一个150GB范围的测试,这个范围已经超过了DRAM缓存能直接管理的范围,13秒后速度达到峰值。接下来的速度曲线有一定的波动,这是DRAM缓存中FTL闪存映射表实时交换的体现。



总结:
看过三国演义朋友应该都知道,古代谋士给主公献策,经常会同时提供上中下三策,而往往是上策太急,下策太缓,中策是主公采纳最多的。如果把固态硬盘的FTL映射表设计对应成上中下三策的话,上策就是提供最佳性能但成本较高的Page映射、下策是仅需小容量SRAM做缓存就能实现的Block映射,中策就是我们在龟甲T3000中见到的混合FTL。

大家都知道随机读取性能对于SSD实际使用是很重要的,但大家不会每次开机后把全盘范围的数据都读取到一遍,对于没存取到的位置来说,对应的FTL闪存映射表内容就是可以取舍的目标。当反复读取的数据容量集中在125GB以内时,DRAM缓存无需交换FTL,使用性能就和带有完整DRAM缓存的SSD一样。一旦请求的地址在DRAM缓存里没有存储它的映射关系,就需要马上到闪存里读取并交换至DRAM缓存中使用。

更进一步,如果主控能根据读取热度,自动分析出常用位置并将这部分FTL映射表在开机时自动载入DRAM缓存的话,就可以实现一个比较理想的均衡:在不需要配备大容量DRAM缓存的情况下实现较高的实际使用性能。仅仅依靠外部测试还不足以验证当前主控和固件是否已经具备这种能力,不过这个技术思路依然是非常有趣和值得探索的。

本帖子中包含更多资源

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

x

评分

参与人数 1绝对值 +1 收起 理由
jackyi + 1 赞一个!

查看全部评分

2#
Katsumi 发表于 2020-12-25 18:24 | 只看该作者
写的还行思路清晰,可以当做支持的文件之一
3#
littlefisher 发表于 2020-12-26 01:19 | 只看该作者
很硬核的分析,支持
4#
redyan9985 发表于 2020-12-27 13:23 | 只看该作者
日常使用,绝大多数人用不出区别,我的系统盘还是英特尔520,数据盘还快多了,实际没区别
5#
yhhuada66 发表于 2020-12-28 21:29 | 只看该作者
这个测试确实比较深入,也很有思路,现在很多nvme盘都是dramless了,它们应该是也有slc cache读缓存的吧,要不速度就难看了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部