Skip to content

Latest commit

 

History

History
14 lines (13 loc) · 3.12 KB

KSM.md

File metadata and controls

14 lines (13 loc) · 3.12 KB

KSM内存合并

  • KSM介绍
    • kernel same-page merging也称为KSM,是一个内核特性,可以用于在虚拟控制系统中共享相同内存页面给不同的进程或者虚拟机。KSM是通过扫描主内存找到重复内存页面来执行内存共享的。每个被发现重复的分页将被合并成一个分页,然后映射到两个初始的位置。这个页面也被标记为"写时复制"(copy-on-write),或者称为COW,这样内核可以在一个进程更改其数据时自动分离内存页面。
    • KSM最初是用于在一个主机上通过进程间共享内存来运行更多虚拟机。实际使用中,用户也发现KSM可以用于非虚拟化环境。这个KSM内核模块在内核版本2.6.32时被合并到内核主线代码中,最初发布于2009年12月3日。为了更有效,操作系统内核必须找到不同进程使用的相同内存页面。内核也需要决定内存页是否很少更新这样才能有效合并进程资源使用的内存。虽然使用KSM可以节约内存使用,但是可能会导致CPU资源消耗,另外一个潜在的风险是有安全隐患。
    • 虽然基于内核的虚拟机(KVM)被设计为自调优,但是可以调整一些参数使KVM主机性能更好。最重要的参数是内核同页合并(kernel samepage merging ,KSM),这一特性允许内核更有效地处理内存。KSM允许Linux内核识别出包含相同内容的内存页,然后合并这些内存页,将数据整合在一个位置可以多 次引用。 如果在主机上使用KVM,通常会激活数个客户操作系统,而且这些操作系统经常运行相同的OS,这意味着大量的内核页面被多次加载。通过应用KSM,许多虚 拟机可以使用相同数量的内存启动。事实上,KSM允许虚拟机过度分配内存。但是使用KSM存在性能损失,在一般的环境中,性能损失大概是10%,这也是在 某些环境中关闭KSM的原因。
    • 在RHEL 6(CentOS 6)和Fedora 16中,KSM默认是打开的。KSM通过两个服务:ksmd和ksmtuned实现,这两个服务在系统初始化时自动启动。管理员应该判断他们的环境并决定保持KSM处于运行状态还是关闭它。
    • 如果目标是运行尽可能多的虚拟机,而且性能不是问题,应该保持KSM处于运行状态。例如KSM允许运行30个虚拟机的主机上运行40个虚拟机,这意味着最大化硬件使用效率。但是,如果服务器在运行相对较少的虚拟机并且性能是个问题时,那么应该关闭KSM。
    • 对任何系统来说,最佳选择将取决于创建虚拟环境时的内存估算。如果在虚拟主机中有足够的物理内存,在没有开启KSM时就能够满足虚拟机的内存需求,那么最好关闭KSM。但是如果主机内存紧张,那么最好保持KSM处于运行状态。
  • ksmtuned占用CPU高
    • KSM允许虚拟机过度分配内存,默认是开启的。如果宿主服务器在运行相对较少的虚拟机,并且内存足够情况下,应该关闭KSM来提高性能。

        systemctl status ksmtuned
        systemctl stop ksmtuned
        systemctl disable ksmtuned