闪存存储数据的过程就像在收纳箱里放衣服,往一个空箱子里放的时候你是可以按顺序叠放的。
闪存存储数据的过程就像在收纳箱里放衣服,往一个空箱子里放的时候你是可以按顺序叠放的。
但是当你想把里面的衣服更换的时候,你只能把盖在上面的衣服拿起来,把旧的衣服拿走,然后在换上新的,新的你可以选择夹在原有的衣服中,也可以放在最上层。
这是由于闪存的基础单元是一个page,多个page组成一个block。比如一个崭新的SSD,可以直接往未存放电子的page上写数据,而如果在文件系统中进行了删除或更改操作,这一块在映射表中就会被标记不可用。
那新的数据怎么办呢,就像上面说的,夹在旧的数据里面或者往未使用的地方里放咯。这个就看厂商的策略了。
如果我要夹在旧数据里怎么办?闪存很特殊的一点是,假设一个block里有一块废弃的page,他不能单一更新一个page,只能抹除整个block来回收。主控把block的数据复制一份,修改指定或者新数据写入某个page,然后找个地方放。在一个久经沙场的SSD中,增量数据和存量数据的修改在已有的block中“穿针插缝”,回收的block数据就会变多。于是这就是闪存的写入放大效应。
至于预留空间,最大的体验差距应该是在性能上,大部分厂家都是首先拿他做模拟SLC缓存,第二就是需要的时候用作坏块的替补块。小米把预留空间用于实际可见存储空间,对性能确实影响不大,因为手机用不上那么高的io。但是作为用户,我想一部分人是希望保持稳定换取一个可以手动的开关。