Skip to content

Latest commit

 

History

History
13 lines (7 loc) · 2.03 KB

内存管理-fork优化-缺页预测.md

File metadata and controls

13 lines (7 loc) · 2.03 KB

fork缺页预测

共享页批量更新的大失败为FTL OS带来了巨大打击。但FTL OS决不放弃。为了进一步提高性能,FTL OS认为缺页预测是一条可行的优化方式。通过缺页异常错误,FTL OS可以在fork时提前复制非常可能发生页错误的区域并赋予可写权限。

如何预测缺页错误?预测必然是基于数据的,而数据基本只能来源于上一次fork产生的缺页异常。但是这会带来一个问题,如果上一次fork发生了缺页异常,我们基于这次缺页异常让下次fork时赋予可写权限,那么第二次fork时缺页异常就不会发生了,于是第三次fork就无法获取到这次缺页异常的信息了。

因此缺页预测不能局限于短期历史,必须给它赋予长期的记忆,来让最高频率的缺页异常尽可能地减少发生次数。同时,越早发生的缺页异常应该具有更高的权重,我们还需要让预加载的页面尽可能地和实际需求一样多,因为加载多了显然浪费,而加载少了会导致更多的缺页异常。我们可以为每个缺页都赋予动态的权重,每个页面的权重都会逐渐下降。

遇到的缺页异常可以分为两种,一种是COW产生的写权限缺页异常,第二种是没有映射导致的缺页异常。FTL OS目前只处理第一种情况,因为它最频繁,频率比第二种高得多。

我们可以采用一种非常简单的方案:在父进程中维护一个集合,一旦发生缺页异常,这个页面就会插入集合,如果集合大小达到了上限,就淘汰集合中最早加入的页面。如果集合的长度是固定的,那么依然可能产生额外开销,我们需要引入长度的动态调整手段。缺页异常发生时集合应该扩张,当fork发生时集合应该收缩。每次fork都会降集合大小缩小10%。不过这是后话,现在FTL OS先使用固定长度的预测器。

耗时从387us降低到363us,提升小于各个板子之间的差异,这说明缺页异常自身导致的开销并不大。