最近看了一份SMI主控的资料,提到使用TLC模拟SLC Cache,这块之前没怎么了解过,正好可以学习一下。列了几个想知道的问题,如下:
问题1:为什么要使用TLC模拟SLC Cache?
问题2:企业级和消费级SSD都使用吗?
问题3:TLC模拟SLC Cache的情况下,PE cycle怎么算?
问题5:拿出来的这块空间,是固定的Block,还是会动态调整?
问题6:如果是动态调整,策略是什么样子的?
问题7:SLC Cache里的数据策略?
问题8:TLC模拟SLC Cache,会导致什么问题?
一通查,一通问,得到下面这些理解,有不正确的地方,欢迎留言指出:
问题1:为什么要使用TLC模拟SLC Cache?
主要是因为穷,没钱买不起SLC,但是又希望有比较好的性能,那就用TLC模拟(使用写SLC的方式写TLC,本来一个Cell存3个bit,现在只存1个bit),这样一来,读写速度嗖的一声就上去了。这个对跑分有奇效:通常SSD最关心4K BS的读写性能,将测试文件缓冲到了SLC Cache里,然后再读出来,分数会异常美丽。
问题2:企业级和消费级SSD都使用吗?
企业级不用,他们不差钱,他们追求的是稳定压倒一切,即使要追求性能也是在稳定的基础上,所以他们基本上连TLC都不用,模拟SLC就更谈不上了。
消费级SSD是成本导向,价格敏感,所以是TLC的”重灾区”,也是SLC Cache大展拳脚的领域。
问题3:TLC模拟SLC Cache的情况下,PE cycle怎么算?
仍然是擦写一次,算一个PE cycle。但是,原本寿命1000的TLC,模拟成SLC之后寿命会显著提升,不是从1000变成3000,而是可能变成10,000甚至更多 (不要问我为什么,因为是蛋蛋说的)
问题4:SLC Cache一般占总容量的多少%?
有两种:
全盘SLC Cache:比如早期的OCZ Vertex 4
部分空间的,我在朋友圈里问了一圈,得到各种答案:1/3, 1/22, 1/40, 8-12%。这些数字大家看看就好,不要当真,因为不同的厂家有不同的考量,这个比例也会有所不同。
问题5:拿出来的这块空间,是固定的Block,还是会动态调整?
有两种:动态调整的,也有固定一块区域的。
问题6:如果是动态调整,策略是什么样子的?
对于动态调整的情况,理论上应该是拿那些PE cycle低的Block用于Cache,因为Cache擦写的频率高,但是模拟成为SLC之后,相应的寿命也增加了,所以是不是拿PE cycle高的TLC用于模拟也可以。请高人指点。
问题7:SLC Cache里的数据策略?
- 连续大块的写入,直接进SLC Cache;
- 一些小的随机写入或者系统文件,直接写入TLC (SMI的资料是这么说的,话说FW如何知道写入的是系统文件?)
- 在空闲时间,把SLC Cache里的数据转移到TLC中,空出SLC Cache供以后使用
- 如果SCL Cache够大,可以把不经常读取的数据搬到TLC,把热数据继续留在Cache里
问题8:TLC模拟SLC Cache,会导致什么问题?
- 增加写放大,因为绝大部分数据写了两次,SLC Cache一次,TLC一次
- 后台转移数据的时候,可能出现decode failure,retry的时候对性能会有影响,如果最后decode不出来,就导致数据丢失
- 固件需要处理好应付前台读写以及后台搬数据到TLC,尽量不要降低读写性能,让用户感觉到SLC Cache的存在