KSM 允许合并虚拟机中的相同内存页面,特别是包括缓存在 RAM 中的常见操作系统/应用程序文件。
KSM 是否可以用于类似地减少容器的内存需求?
答案1
不。
KSM 仅合并匿名(私有)页面,从不合并页面缓存(文件)页面。
它只适用于虚拟机,因为全部VM 的内存作为私有页面存储在主机进程中。例如主机上的qemu进程。
(相反,例如,Docker 的用户可以在相同的映像之间共享页面,或者具有共同祖先并且使用基于overlayfs的存储驱动)。
此外,当前的 KSM 接口需要madvise(... MADV_MERGEABLE)
每个潜在的可共享范围。容器中的每个进程在创建映射时都必须执行此调用。显然,这个接口更容易适应各个特殊用途的进程,包括但不限于qemu
使用。