|
本帖最后由 fanallen 于 2019-10-30 14:36 编辑
昨天发表了一下个人对SM2258xt全盘模拟SLC cache的见解
https://www.mydigit.cn/forum.php?mod=viewthread&tid=89975
然后好多热心坛友留言,也发表了精彩的个人看法。
昨天晚上,本人一时兴起,拿一块现成的58xt配3D TLC的盘,实际研究一下,看真实的写入机制是什么样的。
主控:SM2258xt
颗粒:1ce B16A 32G*8 开180G(坏块太多,降容到180G:titter:)
测试系统:win10 企业版LTSC
测试接口:SATA3.0
为了保证测试效果更客观,更直接,直接先把此盘重新开卡
指定180G容量开卡,固件:Q0816C0
初始化完直接开始写入数据
实际写入在68G左右开始掉速。
68G容量,已经超出了我ssd容量的1/3了,依此来看,SLC cache的总容量,不是你开出来的ssd容量的1/3,而是所有可用数据块的SLC cache,包含留出来的OP空间。
比较奇怪的是,写满SLC cache后,用软件检测的NAND写入量还是0。然后今天早晨看上一贴的留言,飞机哥@1169044503说:IM系列颗粒上的slc部分是真slc,datasheet上有写明。只是slc空间部分写爆后才会把数据挪到tlc部分,来释放高速空间。如果留意过rdt上面slc部分是能单独测试的。
看来飞机哥的说法有考证的。
在昨晚19:39分,也就是写满SLC cache后一小时,想继续写入,观察下速度变化,看用掉的slc cache有没有回收,然后发现urwtest检测到固态上测试数据,不再写入,而开始检测。然后本人换成h2wtest继续写入测试,然后发现h2wtest显示平均速度,不显示即时速度,写入6G左右直接关掉了,开始干别的事情。
昨晚睡觉前,把这块盘再次连到电脑上,电脑开着机挂着就不管了。睡下后,又想了想urwtest的事情,如果我把写入到固态盘里的测试数据改个名,程序会不会找不到测试数据,然后可以继续写入呢?
早晨醒来,开始实践。
把测试数据全部重命名。
然后用urwtest继续写入,时间7:30。
4G高速写入后,就掉速了。看来和本人昨天帖子的说法不一样。本来以为会把剩余的所有容量的slc cache全部回收回来,看来不是这样的。然后又发现,在4G的cache用完后,写入速度偶尔还能跳到400M
感觉开始直写flash了。
8:28,到公司后,再次写入。
这次3G高速后就掉速了,比早晨还少了1G,难道是时间太短了,还没回收充分?
9:03,再次写入
这次更少了,只有2G的高速状态,可能是时间太短了,多等会儿试试。
10:03更新,再次写入
4G cache 400M+写入,4G后开始波动,16-430的波动区间。
14:34更新,已经全部写满。
NAND写入量已经慢慢追上了主机写入量,估计再有擦除+写入,放大情况就开始显现了。
至此,58xt配B16A在Q0816C0固件下的写入机制基本搞清楚。
1、全盘SLC cache内(约1/3容量),不掉速。
2、只写SLC chche时,不算作NAND写入量。
3、全盘容量用掉1/3后,开始掉速,并且会在ssd空余时间回收cache,但不是全部回收。每次回收大约4G左右的cache空间,这4G cache用完后,速度开始大波动。
4、cache回收速度大约是4G/小时的样子。
本人仔细想了一下,固定回收4G cache,而不是全盘回收,有可能是抑制写入过度放大。如果每次做全盘回收,写入放大倍数过大,势必会大大影响闪存寿命。采用这种固定收回4G的方式,在寿命与速度(体验)之间做一个平衡的取舍,也算是较为合理的折中方案了。
不同固件的算法不一样,本次测试仅适用58xt+B16A,固件Q0816C0。其它制程的颗粒,或者同制程在其它固件下的写入机制,也欢迎各位热心坛友分享出来。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|