内存管理:交换、映射与泄漏检测
1. 交换(Swapping)
交换的核心思想是预留一块存储区域,内核可以将未映射到文件的内存页面放置其中,从而释放内存以供其他用途。交换文件的大小增加了物理内存的有效容量。不过,交换并非万能之策,在交换文件与内存之间复制页面存在成本。当系统的实际内存不足以应对工作负载时,交换会成为主要活动,这就是所谓的磁盘抖动(disk thrashing)。
嵌入式设备很少使用交换,因为它与闪存存储不兼容,频繁写入会迅速损耗闪存。不过,可以考虑使用压缩内存交换(zram)。
1.1 压缩内存交换(zram)
zram 驱动会创建基于 RAM 的块设备,如 /dev/zram0、/dev/zram1 等。写入这些设备的页面在存储前会被压缩,压缩比在 30% 到 50% 之间,预计可使可用内存总体增加约 10%,但会增加处理负担和功耗。
启用 zram 的步骤如下:
1. 配置内核选项:
CONFIG_SWAP
CONFIG_CGROUP_MEM_RES_CTLR
CONFIG_CGROUP_MEM_RES_CTLR_SWAP
CONFIG_ZRAM
- 在 /etc/fstab 中添加以下内容以在启动时挂载 zram:
/dev/zram0 none swap defaults zramsize=<size in bytes>,swap