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指定的内存,并且匿名页面成为合并对象。