内存回收中fastpath和kswapd以及direct reclaim的差异

fastpath、kswapd和direct reclaim都会扫描zone,且最后调用的函数都一样,那么他们有什么区别呢?

fastpath和slowpath的区别在于,fastpath要求zone的unmapped file page必须大于zone规定的min_unmapped_pages,slab reclaimable大于min_slab_pages,回收内存的的页数为2^order个页数和是32个之间的最大值,而kswapd回收内存需要回收到所有的zone都满足free page大于high watermark值或者zone的high watermark值个页面。同时fastpath不会进行回写,也不会回收mapped的page。fastpath主要靠zone_reclaim来完成快速的内存回收。kswap则主要从balance_pgdat()来完成

direct reclaim和kswapd的差别在于只能回收32个页面,同时kswapd进行回写页面需要满足特定条件(当前有很多的页面需要等待writeback),而direct reclaim判断当回收过程中扫描的总页数大于48个时就会启动flush线程来进行脏页的回写操作。

我们在调性能时候都会尽量的提高extra_free_kbytes的值来防止过多的出现direct reclaim,因为direct reclaim会进行脏页的回写,这里再IO性能不是很好的时候会造成系统严重卡顿。

你可能感兴趣的:(Linux,memory,management)