SSD里还预留了一部分用户不可见空间
通常来说,CHIP会推荐SSD剩余空间达到总容量的10%~20%水平,才能保证性能基本不下降,同时寿命不会缩减太厉害,128GB装了127GB数据还要读写,太极端了。
对消费级产品来说,大家听说过的延长寿命或提升性能(极端状态),都要在2^5×(2^30)B,也就是128GB上拿出几GB空间做成缓存,所以更多的时候见到的实际标称容量是120GB左右。当然这个数据还有10^9和2^30转换时的7%偏差问题,也有不可用区块剔除的问题。
这几GB缓存解决的问题,就是通过算法将碎片化(存储和写入时序)的数据,尽量整合,以减少写入次数和频度,这个特性有些类似于机械硬盘的NCQ。写入缓存越大,自然可以降低主存储区域的写入次数,延长寿命、提升性能,但是这是要花钱的!
我是主控开发,答案是不会。SSD里还预留了一部分用户不可见空间(一般7%左右),用于在满盘写数据时做碎片整理(我们一般叫垃圾回收),当你128G随机写的时候,垃圾回收的负荷最大,写放大最大可能会达到10,这个看主控设计,一般5以内。像问题中所描述的,写完127G,反复写最后1G,如果顺序写,不会触发垃圾回收,但会写擦磨损那1G和不可见空间(假设8G),磨损到一定程度会触发磨损平衡,系统会把127G中所在区域磨损最小的一部分数据搬到磨损严重的区域,而把127G数据原先占据的磨损较小的空间拿来作为1G可见空间和8G不可见空间,然后你继续反复写1G数据会磨损在这新的9G空间上。如此反复,写放大就比1大一点。
如果最后1G数据随机写,其实这1G数据会随机分布在1G可见空间和8G不可见空间的一部分上,垃圾回收只会发生在这部分空间内,写放大估计只有一点几。所以和顺序写1G的区别,不考虑磨损平衡,就是从写放大1.0的无垃圾回收的擦写,变成了写放大1.x的带垃圾回收的擦写,然后同样会触发磨损平衡,写放大再增加一丢丢,加起来估计也不会大于2。
最后,如果要考验你家SSD的话就用脚本随机满盘写,效果一定棒!