Kernel Samepage Merging 内存去重机制

Kernel Samepae Merging, 也曾称为Kernel Shared Memory, KSM。它是一种内存去重技术。

现代的操作系统基本都使用了内存共享机制。例如,新创建的进程会跟父进程共用所有内存,程序库等。然后计算虚拟化技术并不能很好做到内存共享。即使同一台物理机上的虚拟机和宿主机都运行同样的操作系统、相同的Kernel,它们也无法知道它们之间其实存在大量完全相同内容的内存页面,而这些其实都可以用单一的内存页面进行共享足矣。引入的KSM机制恰恰能够识别这些内存页面。KSM机制会运行着一个内存daemon程序ksmd,它会定期扫描user memory,找出那些内存相同的页面。它们可以被单独一个页面替代。当然,这个页面需要加上写保护。假如有程序对它进行更改操作,会引发COW写时复制。用户态的应用程序还可以用madvise函数指定只扫描哪些内存页面、范围。

在虚拟化系统中,KSM机制带来的好处是大幅度的减少了内存浪费,从而降低内存使用率。据过去Red Hat公司做了的试验,在16GB内存的物理机器上,KVM能运行多达52台Windows XP虚拟机(每台虚拟机都配给1GB内存)。由于KSM对用户空间的应用程序来说是透明的,这使得这个机制起用起来是极其容易的,能为当前生产环境的系统节省大量的内存。当然,KSM最初是会KVM设计的,但已经被运用其他各式各样的虚拟化系统中。甚至有些非虚拟化的应用场景也采用这个机制,比如,一些特殊使用需求会让系统运行大量有相同或近似内存特征的进程,这就提供给KSM发挥功效的机会了。

KSM daemon用户态访问入口是在sysfs文件系统/sys/kernel/mm/ksm/目录下,由各个属性文件组成。

你可能感兴趣的:(Linux,虚拟化,操作系统和虚拟化系统)