背景

SSD这种介质对随机写和顺序写笔记敏感。在保证其能够达到稳态之前,需要整盘trim之后先顺序写一遍,再随机写一遍。第一次需要顺序写满而非随机写满一遍,是因为即便是随机写入和磁盘空间相当的量,实际会有部分覆盖写,这部分在SSD内部实际可以被回收,因而无法耗尽内部所有的空间,无法测到真实场景的值。

那么随机写满盘一遍,实际大概会写入多大的有效数据呢?

数学原理

因为是随机写,每次写之间可以可以认为完全是独立的事件。下面假设总共有N个块,每次写1个块,那么写了N次之后,某个块x不被写的概率是:
p(x) = ((N-1)/ N) ^ N

当N趋近无穷的时候:
Limit P(x) = (1/(1+1/(N-1))) ^ N = 1 / ((1+1/(N-1)) ^ N) = 1 / (1 + 1 / (N – 1)) ^ (N -1) * 1 / (1 + 1 / (N -1))
= 1 / e

再根据伯努利大数定律:设μ是n次独立试验中事件A发生的次数,且事件A在每次试验中发生的概率为P,则对任意正数ε,有公式:

https://baike.baidu.com/pic/伯努利大数定律/7922139/0/472309f7905298227e213c4cd5ca7bcb0a46d42a?fr=lemma&ct=single

该定律是切比雪夫大数定律的特例,其含义是,当n足够大时,事件A出现的频率将几乎接近于其发生的概率,即频率的稳定性。

这里μ是n次随机写中未被写入的块的总数,且每个块未被写入的概率为P,则对任意正数ε,同样满足上面的公式。

因此时间写过的比例就是:
1 – 1/e = 1 – 1 / 2.718281828459 = 0.632121