介绍
开源内核项目PKSM(Anon-Page Kernel Samepage Merging)针对KSM/UKSM的合并效率不高等不足,采用全新的处理机制和实现方式,非常高效的减少linux系统冗余内存,特别适合服务器和桌面系统应用。
项目主页:http://code.google.com/p/pksm/
作者微博:http://weibo.com/figo0406
1. 功能
1.对用户透明
自动添加全系统的用户进程的匿名页面到PKSM中,因此不在需要用户修改用户程序(使用madvise系统调用来添加用户进程到KSM系统中)。
2. 高效的匿名内存页面检测
自动检测匿名页面的创建和释放,使用新的算法和机制来直接处理linux内核创建/释放匿名页面。PKSM不再需要浪费大量的CPU来遍历所有的VMA区域来查找可用的匿名页面。KSM/UKSM会浪费很多CPU来遍历系统所有的VMA区域去查找可用的匿名页面,而PKSM则不需要考虑这些。
3. 考虑内容全零页面
现在pksmd将全零内存块视作特殊的内存页面,并将他们合并到一个特殊的不能交换的pksm zero page(从UKSM借用的)。
4. 周期性检查内存块的内容
Pksm将不稳定的匿名页面放入一个FIFO队列中,周期性地检查其这些匿名页面的校验值, 如果发现内容发生变化, 那麽这些页面会重新进行比较和合并。系统默认每20分钟检查完所有的不稳定的匿名页面。
2. 安装和使用
2.1 安装
Archlinux
如果你使用Archlinux发行版,您可以通过ARU来安装. https://aur.archlinux.org/packages/linux-pksm/
自己编译内核
如果你使用其他linux发行版本,那麽您可能需要自己编译内核了。请下载PKSM的patch,并且在内核中 打开pksm的相关选项。
[figo@figo linux-3.6]$ make menuconfig Processor type and features---> [*] Enable KSM for page merging Choose PKSM/KSM strategy (AnonPage-KSM for page merging) ---> (X) AnonPage-KSM for page merging
2.1 使用
PKSM在内核启动的时候默认打开,您不需要做额外的操作。您还可以通过/proc/meminfo信息查看到PKSM为您节省了多少物理内存。
[figo@figo ~]$ cat /proc/meminfo KsmSharingPages?: 45924 kB
- run 控制内核线程pksmd是否开启。缺省是开启的,如果你想关闭可以:echo 0 > run
- pages_shared 有多少个不同的物理页面处在被共享的状态
- pages_sharing 有多少个虚拟页面指向以上的共享页面,差不多可以等效看作你节省的内存。
- page_zero_sharing 有多少个零页面被共享
最后,让我们向在内核方面孜孜不倦的进行研究和推进的人们致敬,也希望更多的人参与到其中。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/44795.html