KSM——Kernel Samepage Merging
-
KSM is a memory-saving de-duplication feature,将有相同数据的多个虚拟机通过共享共同数据的方式融合到物理内存中,从而达到节省内存的目的
-
实现方式:KSM的守护进程会定期扫描已经注册的用户内存,寻找可以被一个单一的写保护的页替代的有相同内容的页面,ps.若有页面需要更改内容则会自动地copy共享页并更新它地内容
- KSM的守护进程受 sysfs文件 /sys/kerne,l/mm/ksm 的控制 ps.一些常用的配置请参考官方教程
-
实现原理:通过madvise进行系统回调,将application建议的可以被合并地地址空间进行合并
int madvise(addr,length,MADV_MERGEABLE)
- app may call
int madvise(addr,length,MADV_UNMERGEABLE)
ref:https://www.kernel.org/doc/html/latest/admin-guide/mm/ksm.html
-
相关额外知识补充:
- 内存默认的页面大小是4KB,这样会产生较多的 TLB Miss 和 缺页中断,导致性能受到影响,而虚拟机可以通过分配大页提高运行性能,其通过EPT 技术实现
- EPT技术:
- EPT:扩展页表,Intel开创的硬件辅助内存虚拟化技术
- EPT技术可以直接将虚拟机的物理地址翻译为宿主机的物理地址