Compaction

本文主要阐述内存规整「compaction」的原理和实现细节。


  • Target Platform: Rock960c
  • ARCH: arm64
  • Linux Kernel: linux-4.19.27

虽然看起来系统目前还存在很多空闲页帧,能够满足指定阶数「order」的分配请求,但是系统内存碎片化可能很严重,这时不可能完成高阶的内存分配请求。在这种情况下,通过迁移已经被其他任务使用的可移动页帧来整理获得空闲的连续的页帧块,这种方法称之为规整「compaction」。

  • 用户态程序分配使用的内存或者文件缓存属于可移动页帧「movable pages」
  • 内核态程序分配使用的内存属于不可移动页帧「unmovable pages」,不可能被规整

如下图所示,示意了如何进行规整来满足2阶的页帧分配请求
compaction-0.svg

图1 compaction-0

compaction-1.svg

图2 compaction-1

compaction-2.svg

图3 compaction-2

compaction-5.svg

图3 compaction-5

compaction-6.svg

图3 compaction-6

compaction-7.svg

图3 compaction-7

compaction-8.svg

图9 compaction-8

compaction-9.svg

图10 compaction-9

compaction-10.svg

图11 compaction-10

compaction-11.svg

图12 compaction-11

compaction-12.svg

图13 compaction-12

compaction-13.svg

图14 compaction-13