内核同页合并可以在容器之间共享页面缓存吗?

内核同页合并可以在容器之间共享页面缓存吗?

KSM 允许合并虚拟机中的相同内存页面,特别是包括缓存在 RAM 中的常见操作系统/应用程序文件。

KSM 是否可以用于类似地减少容器的内存需求?

答案1

不。

KSM 仅合并匿名(私有)页面,从不合并页面缓存(文件)页面。

它只适用于虚拟机,因为全部VM 的内存作为私有页面存储在主机进程中。例如主机上的qemu进程。

(相反,例如,Docker 的用户可以在相同的映像之间共享页面,或者具有共同祖先并且使用基于overlayfs的存储驱动)。


此外,当前的 KSM 接口需要madvise(... MADV_MERGEABLE)每个潜在的可共享范围。容器中的每个进程在创建映射时都必须执行此调用。显然,这个接口更容易适应各个特殊用途的进程,包括但不限于qemu使用。

相关内容