HACK#36 使用KSM节约内存

本节介绍共享相同内容的内存以节约内存的KSM。

KSM(Kernel Samepage Merging),是通过共享相同内容的存储页面,将其整合为一体,从而有效使用内存的功能。原始版本是在KVM上开发的Kernel Shared Memory,从Linux 2.6.32开始合并到上游内核。在虚拟环境下启动多个相同OS映像的客户端OS时,就会出现相同内容的存储页面。在这样的情况下KSM就非常有效。

使用方法

编译内核时,需要设置为CONFIG_KSM=y。

KSM会通过内核线程ksmd定期对用户内存进行扫描。如果为同一内容,则在COW (Copy On Write)模式下合并该区域(存储页面)。这个存储区更新时,内核自动重新生成存储页面的副本。

要扫描的区域是通过madvise的MADV_MERGEABLE指定的内存,并且匿名页面成为合并对象。