是否可以直接全盘随机写入进行预处理?
时间:2022-04-15 23:21:01 | 来源:行业动态
时间:2022-04-15 23:21:01 来源:行业动态
在执行4kB随机写入测试之前,通常的预处理包括对于SSD全盘的一次顺序写入和几次随机写入。既然最终的测试是随机性能,为什么在清空后一定需要先进行一次顺序写入再进行随机写入而不是直接通过若干次随机写入使得SSD进入稳态呢?这是由于SSD内部的工作原理决定的:采用上述方法可以最快速度使得SSD进入到随机写的稳态。实际上,SSD在清空后,内部的Flash物理空间被全面释放出来,成为空闲资源。为了使SSD再次进入稳态,需要尽可能向SSD内部写入数据,占据这些空闲的Flash块。只有SSD内部的空闲块基本用完,才能触发它内部的垃圾回收(GC)机制并尽快使得性能下降到稳态。
对于一个容量为1000GB的企业级SSD,存在约15%的超额配置(Over Provisioning),内部的Flash物理空间总共约为1150GB。如果对全盘顺序写入一次,占用的物理空间就是1000GB。而如果采用4kB随机写入的方式,对全盘随机写入1000GB的数据,由于两次写入的位置可能存在重叠,因此虽然占用的物理空间仍然是1000GB,但是这些空间对应的逻辑地址要小于1000GB。那么两者之间的差异到底是多少呢?
为了写入1000GB的数据,采用4kB的写入方式,待写入的空间包含n=1000GB/4kB=2.610
8个4kB的地址。而总计需要写入n次4kB数据。设随机变量M
i=1代表地址i没被写入任何数据这样的事件,对于这n个地址中任意一个,由于所有写入都是独立并且均匀写入到所有地址空间,因此n次随机写入全没有命中指定地址的概率
上面的式子利用了并假设n足够大,其中e=2.718是自然对数的底数。为了计算所有这样的没有任何写入命中地址空间的比例,借助大数定理
因此,全盘随机写入一次导致从来没有写入数据的地址所占据全盘的比例为e
-1,也就是说全盘随机写入一次仅仅相当于写入了1-e
-1=63%的地址范围,除此之外37%的地址范围是不包含有效数据仍然处于空盘状态。因此,采用这种方法,即便写入3次,也仍然有5%的地址范围未被覆盖,这相当于凭空增加了5%的超额配置。因此采用全盘随机写入的方法进行预处理的效率是很低的。
有些磁盘性能测试工具可以选择在随机写入的时候指定是否允许写入重叠的地址范围。例如fio在随机写入的时候会记录哪些地址曾经写过,它会避免已经写入的地址重复写入,从而避免了上述填充的效率问题。为了记录已经写入的地址范围,它使用了系统中的一段内存。如果系统内存不足且不需要这个功能,可以通过norandommap开关把这个功能关闭。