Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3026424
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 6125
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-11 09:12
个人简介

To be a better coder

文章分类

全部博文(877)

文章存档

2022年(1)

2021年(60)

2020年(175)

2019年(207)

2018年(210)

2017年(143)

2016年(81)

分类: LINUX

2021-10-15 16:28:12

  
转载自 https://blog.51cto.com/linzb/1883395

ksm:kernel SamePage Merging。 ksm让内核扫描正在运行中的所有程序,并比较它们的内存,如果发现它们的内存页有相同的,那么就把它们相同的内存页合并为一个内存页,并将其标识为“写时复制”,当标识为“写时复制”的内存页需要被修改时,内核就为其分配新的内存空间,并复制内存页到新的空间,在新的内存空间上进行修改。
  ksm设计初衷就是为了给虚拟化节约内存的,因为如果客户机都使用相同的系统和运行类似的程序,那么每个客户机进程就会有很大一部分的内存页是相同的,这时候使用ksm技术就能大大降低内存的使用率。也方便kvm内存的过载使用,传说有人在16G内存的机器上,成功运行52个1G内存的xp客户机。
    所以ksm的优点显而易见,但是它的缺点也是很明显的。ksm需要扫描相同的内存页,这就带来了开销,而且ksm自身也需要占用内存,当机器运行的程序没有什么耦合度的话,那么ksm不见得能提升内存效率。而且使用ksm还需要保证足够的内存交换空间,因为我们把多个内存页合并为一个,当内存耗尽,而恰好有内存页需要修改时,此时内存就溢出了,所以需要swap交换空间过渡下。
ksm的使用:
 内核的ksm守护进程时ksmd,我们可以通过修改/sys/kernel/mm/ksm/下的ksmd参数来对其进行配置,它的参数有如下几种(参考https://www.kernel.org/doc/Documentation/vm/ksm.txt):

        full_scans:对可合并的内存区域扫描过的次数

        pages_shared:记录合并后共有多少内存页

        pages_sharing:记录有多少内存页正在使用被合并的共享页,不包括合并的内存页本身

        pages_to_scan:ksmd进程休眠前扫描的内存页个数,(我的理解是一次扫描的内存页个数)

        pages_unshared:因为没有重复内容而不能被合并的内存页数量

        pages_volatile:因为内容很容易变化而不能被合并的内存页数量

        run:是否开启ksm

            0:表示停止ksmd但保持它已经合并的内存页

            1:运行ksmd

            2:停止ksmd并分离已合并的内存页

        sleep_millisecs:ksmd休眠的时间,也就是是两次运行的间隔

    虽然参数有这么多,但是我们可以操作的只有run、sleep_millisecs、pages_to_scan,使用也很简单:

        echo “$num" >/sys/kernel/mm/ksm/PARAMATER


     当然,手动操作很蛋疼,redhat在qemu-kvm的rpm包,整合了ksm 和ksmtuned两个管理工具(在/etc/init.d下的脚本)

        ksm:操作ksmd的功能,也就是利用这个脚本可以echo “$num" >/sys/kernel/mm/ksm/PARAMATER

        ksmtuned:可以智能地判断什么时候该开启ksmd什么时候该关闭并调节ksmd参数的程序,其配置文件为/etc/ksmtuned.conf
pages_shared和page_sharing的区别:
    我的理解是这样的,假设进程A、B、C各占用3个内存页,而且他们所占用的内存页都可以合并,那么page_shared=3而page_sharing=6  也就是实际节约的内存数量。kernel文档解释如下:
        pages_shared     - how many shared pages are being used
        pages_sharing    - how many more sites are sharing them i.e. how much saved


阅读(414) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~