F2FS的GC策略
F2FS 主要以两种方式执行GC操作,即 foreground gc 和 background gc。当空闲section不足时,F2FS会触发 foreground gc,而内核会周期性唤醒 background gc 进程,在系统空闲时回收空间。
F2FS 的 background gc 也不是随时随地都能触发成功的,background gc 被周期性唤醒后会检查系统是否处于空闲并且没有挂起的状态(这个状态下面第2点有介绍),如图1所示,7次 background gc 中只有3次被触发成功。
文献【1】指出,仅在以下三种情况会成功触发 background gc:
- 设备连着充电线,用户没有使用设备;
- 设备息屏之后,进入睡眠的挂起状态之前,中间存在一个时间空隙,这时系统被闲置,而且没有连接充电线;
- 运行某些app的时候,例如YouTube或Google Map,因为这些应用产生的IO较少,系统被认为是空闲的。
F2FS 执行 gc 时的选择 victim 算法包括: Greedy算法、Cost-Benefit 算法以及新增的 ATGC