over-provisioning对闪存的作用和影响
一、OP概念
OP (over-provisioning),中文名称为预留空间,这块空间对用户是不可见的,目的是为了提升GC性能,减少写放大问题,避免读写性能骤降。这就是你买回来的SSD容量总是小于其标称容量的原因 ——— 一部分被用于OP。
OP 比例 = (闪存标称空间 - 用户空间)/ 用户空间。
二、OP原理
那么OP是如何做到对SSD性能的改善呢?
我的理解是,当我们要执行写入操作的SSD已满时,假设没有OP空间,则此时我们必须触发垃圾回收,根据贪心GC(Garbage Collection)策略,挑选无效页数量最多的victim block,将其中剩余的有效页迁移到内存中,随后执行擦除操作,再将存入到内存中的有效页以及我们要进行写入的数据写入到该擦除块中,这就会导致严重写性能骤降问题,并且带来写放大问题(写放大=最终写入闪存的数据量 / 实际要写入闪存的数据量)。
假设存在OP空间,则此时可以先将要写入的数据暂存到OP空间中,减少或减轻为了一个写操作而产生多个写操作的问题。当OP空间满时,便需要进行GC操作,而此时的GC操作所挑选的victim block中所包含的无效页数量增多,从而降低GC成本以及减缓写性能骤降的问题。但依旧不可避免写性能会受到GC的影响发生一定程度的下降。【2】
三、OP大小与读写性能的关系
1、金士顿关于OP大小与读写性能的关系实验报告【1】
通过这个报告中可以看出,基于相同容量的SSD,OP设置的大小对顺序读性能和随机读性能影响较小,而对于顺序写性能和随机写性能,OP设置得较大时(32%),可以获取更优的写性能。
因此,OP值较小的SSD适用于读密集型的应用;而OP值较大的SSD适用于写密集型的应用。
2、原理【3】
这个OP大小与写性能影响的关系原理是什么呢?
其实最根本的原因就是由于写放大造成对写性能的影响。即触发GC时的挑选的victim block中含有的无效页数量越多时,我们需要执行迁移的有效页数量越少,从而降低了GC的数据迁移成本和时间,写放大因子也就越低,写性能的下降就不会太剧烈。而如果触发GC时,需要迁移的数据量多时,写放大因子就大,写性能下降剧烈。
根据章节一可以知道OP的比例计算。基于相同的SSD容量,如果OP越大,则用户空间越小。假设SSD容量为216个小方块,每9个小方块形成一个物理块(block),OP大小为18个小方块,则用户空间为216 - 18 = 198个小方块。则OP比例= 18 / 198 = 0.9。而基于一个物理块而言(因为GC的最小单位是物理块),其有效空间为9*0.9 = 8个小方块,无效数据为1个小方块(假设是顺序写入)。则当SSD空间满时,如果要写入一个小方块,则写放大因子 = (8 + 1) / 1 = 9。
假设OP大小为72个小方块,则用户空间为216 - 72 = 144个小方块。则OP比例 = 72 / 144 = 0.5。而基于一个物理块而言,其有效空间则为9 * 0.5 = 4.5个小方块。无效数据为4.5个小方块。所以当SSD空间满是,如果要写入1个小方块,则写放大因子为(5 + 1 )/ 1 = 6。
这个便是OP大小与写性能的关系原理,究其根本就是写放大因子的影响,即GC时victim block中无效页数量的比例。
不知道这样讲是否通俗易懂,这部分如果大家有什么不理解的,欢迎评论区提问呀,我会积极回应的!
reference
1.https://www.kingston.com/cn/blog/pc-performance/overprovisioning
2.https://mp.weixin.qq.com/s__biz=MzIwNTUxNDgwNg==&mid=2247483683&idx=1&sn=d3cb7b4a444ca5ada9d518c57f07c534&scene=21#wechat_redirect
3.《深入浅出SSD》第二版:p175