Linux 内核 UKSM发布稳定版本0.1.1和修正版本0.1.0.1
fmms 13年前
<p>Linux UKSM 是国人自主研发的一个 Linux 内核相关项目,这个项目对服务器和桌面应用都可以显著的减少 Linux 系统冗余的内存,已经在 RHEL6、CentOS 6、Ubuntu 12.04 等系统充分验证和测试过。</p> <p>Linux相同页面合并机制(KSM)使得内存中相同的页面,可以通过修改页表的方式合并成一个。通常这个机制被应用在有众多虚拟机(目前仅支持 KVM)或者有很多冗余内存数据的场景(如有很多类似数据工作集的并行科学计算)里面。但是,目前它的实现方式仍然比较简陋,UKSM的出现,彻底消除了 KSM原本局限,真正使得这项技术能被更多的普通用户使用。具体的来说,它有以下的亮点(原本KSM不具有的特性):</p> <ul> <li><strong>全系统扫描,用户透明</strong>。 UKSM现在自动扫描所有用户进程的匿名映射内存区域(包括malloc分配出来的内存)。不需要修改一行应用程序的源码,使用起来超级简单,安装完成以 后,重启使用本站补丁的内核即可(有部分已编译的二进制内核供下载)。起它几乎什么都不需要做(除非你想通过sysfs调整其内部参数)。</li> <li><strong>不无谓地浪费CPU时间</strong>。UKSM自动探测并分析得出包含丰富冗余数据的区域,并在其上全速工作。对于没有太多冗余甚至彻底没有冗余数据的区域,只进行速度非常低(通常情况下,用top看,CPU占用率为0)的采样扫描。而当包含丰富冗余数据的区域出现的时候,它又能非常快速的作出响应。</li> <li><strong>UKSM能够以极快的速度扫描,并合并冗余数据</strong>。 在Intel core 2 Q9300的CPU上,KSM的官方评测其内存合并速度最高在260M/s左右,而实际工作的平均速度在几十M每秒。由于采用了全新的hash算法,相同的硬件环境下面,我们的算法的合并速度最高可达到477MB/sec ∼ 923MB/sec。而对于不包含冗余数据的页面上,UKSM的扫描速度最高是627MB/sec ∼ 2445MB/sec。正因为有如此惊人的速度,全系统扫描才真正成为可能。而对于已有的KVM的冗余消除应用来说,速度上无疑是一个质的的飞跃!</li> <li><strong>抖动区域避免</strong>。UKSM能实时自动地发现不友好的抖动区域,并降低其上的扫描速度,避免在此类区域上浪费时间。</li> </ul> <p> </p> <h3>UKSM-0.1.1 是一个新增功能特性版,主要新特性包括:</h3> <p><strong>对全0内存页面提供了特别的支持。</strong><br /> 在扫描此类全0页面的时候更快,对工作集影响更小。同时全0页面可以避免像内核原本KSM实现的那样可能被交换出去,进而导致很多没有必要的内存拷贝。现在被合并的全0页面页表项数量可以通过:</p> <p>cat /proc/meminfo | grep KsmZeroPages</p> <p>来得出。这是当前系统当中被合并的全0的页面的一个主要指标。其它非0页面的合并数目由 /sys/kernel/mm/uksm/pages_sharing 提供。</p> <p><strong>UKSM作为一个独立的机制开始进化</strong></p> <p>在此版本之前,UKSM是作为KSM的一个内嵌的补丁实现的,代码全部在 mm/ksm.c当中。为了更好的维护和管理,并且有更多发展的灵活性。从次版本开始UKSM作为一个独立的补丁实现在 mm/uksm.c但中,并且有独立的编译选项,与KSM并存。在 make menuconfig之后,菜单中:</p> <p>Processor type and features-->Enable KSM for page merging-->Choose UKSM/KSM strategy</p> <p>选择 (Ultra-KSM for page merging)即可,而内核主流的 UKSM被命名成 “Legacy KSM implementation”。它们在 .config 当中的定义宏分别是 CONFIG_UKSM 和 CONFIG_KSM_LEGACY(同时依赖 CONFIG_KSM)。</p> <p><strong>UKSM开始全线跟踪主流内核的3.0以后各个稳定分支</strong></p> <p>此版本之后UKSM会提供同步的各个主流内核的稳定分支的更新和修正,同时包括主要的一些发行版本(centos, debian, ubuntu, fedora, suse)的对应的二进制编译。具体的不同分支的源码,请参考项目<a href="/misc/goto?guid=4958338358516718820">源码页面</a>。</p> <h3>UKSM-0.1.0.1是一个0.1.0基础上的BUG修正版本</h3> <ul> <li>主要修正几处缺失的页锁操作,这些bug可能导致罕见的内核软死锁状态。</li> <li>此修正同时提供3.0以下内核的某些发行版本的二进制编译,具体请参考<a href="/misc/goto?guid=4958338359316402805">下载页面</a></li> </ul> <p> </p>