1、KSM简介
KSM允许内核在多个进程(包括虚拟机)之间共享完全相同的内存页,KSM让内核扫描检查正在运行中的程序并且比较他们的内存,若发现相同的内存页,就将相同的内存页合并成单一的内存页,标识为“写时复制”。
如果有进程试图去修改被标识为“写时复制”的合并的内存页时,就为该进程开辟出一个新的内存页供其使用。
2、KSM提高内存的速度和使用效率
(1)相同的内存页被合并,减少了虚拟机的内存使用量,内存中的内容更容易被保存到CPU的缓存中。
(2)通过减少每个虚拟机实际占用的内存数量,让多个虚拟机占用的总内存之和大于物理内存,实现“内存过载”
3、KSM劣势
(1)消耗一定的资源用于内存扫描,加重CPU的消耗。
(2)虚拟机由于修改被KSM合并的内存页,从而这些被修改的内存重新被复制出来占用内存空间,造成内存不足,从而使用swap分区。因此内存不足时,频繁使用swap交互,虚拟机性能下降。
---------------------
[root@opman ksm]# pwd
/sys/kernel/mm/ksm
cd ksm/
[root@opman ksm]# ll
总用量 0
-r--r--r-- 1 root root 4096 10月 25 14:56 full_scans //已经对所有可合并的内存区域扫描过的次数。
-rw-r--r-- 1 root root 4096 10月 25 14:56 max_page_sharing //
-rw-r--r-- 1 root root 4096 10月 25 14:56 merge_across_nodes
-r--r--r-- 1 root root 4096 10月 25 14:56 pages_shared //正在使用中的共享内存页数量
-r--r--r-- 1 root root 4096 10月 25 14:56 pages_sharing //有多少内存页正在使用被合并的共享页,不包括合并内存页本身。这是实际节省的内存页数量。
-rw-r--r-- 1 root root 4096 10月 25 14:56 pages_to_scan
-r--r--r-- 1 root root 4096 10月 25 14:56 pages_unshared //无重复内容而不可以被合并的内存页数量
-r--r--r-- 1 root root 4096 10月 25 14:56 pages_volatile
-rw-r--r-- 1 root root 4096 10月 25 14:55 run
-rw-r--r-- 1 root root 4096 10月 25 14:56 sleep_millisecs
-r--r--r-- 1 root root 4096 10月 25 14:56 stable_node_chains
-rw-r--r-- 1 root root 4096 10月 25 14:56 stable_node_chains_prune_millisecs
-r--r--r-- 1 root root 4096 10月 25 14:56 stable_node_dups
[root@opman ksm]#
查看是否开启KSM,0表示没有开启,1表示开启
[root@opman ksm]# cat run
0
[root@opman ksm]# echo 1 >run //临时开启ksm,只能使用重定向,vim 不行
[root@opman ksm]# cat run
1 //可以将echo 1 >/sys/kernel/mm/ksm/run 写在/etc/rc.local,保证开机自启
查看所依赖的两个服务的状态
[root@opman ksm]# service status ksm
status: 未被识别的服务
[root@opman ksm]# service ksmtuned status
ksmtuned (pid 2935) 正在运行...
[root@opman ksm]# service ksmd status
ksmd: 未被识别的服务
所以我们开启两个服务,分别是ksmd、和ksmdtuned
[root@opman ksm]# service ksm start
正在启动 ksm: [确定]
[root@opman ksm]# service ksmtuned start
正在启动 ksmtuned:
查看状态
[root@opman ksm]# service ksmtuned status
ksmtuned (pid 2935) 正在运行...
[root@opman ksm]# service ksm status
ksm 正在运行
查看扫描的页面数,默认是100,
[root@opman ksm]# cat pages_to_scan
100
对内存的限制
为了避免某个虚拟机无节制地使用资源,导致其他虚拟机无法正常使用,这时候就需要对内存的使用做限制
[root@opman ksm]# virsh memtune centos-6.8-1(虚拟机的名字) ,内存大小的单位为KB
hard_limit : 0 强制设置虚拟机最大使用内存,单位为KB
soft_limit : 0 可用最大内存,单位为KB
swap_hard_limit: 0 虚拟机最多使用的内存加上swap的大小,单位为KB
可以使用 virsh list –all 查看虚拟机列表
[root@opman ksm]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos-6.8-1 关闭
查看使用帮助
[root@opman ksm]# virsh memtune --help
NAME
memtune - Get or set memory parameters
SYNOPSIS
memtune <domain> [--hard-limit <number>] [--soft-limit <number>] [--swap-hard-limit <number>] [--min-guarantee <number>] [--config] [--live] [--current]
DESCRIPTION
Get or set the current memory parameters for a guest domain.
To get the memory parameters use following command:
virsh # memtune <domain>
OPTIONS
[--domain] <string> 域名,id 或 uuid
--hard-limit <number> Max memory, as scaled integer (default KiB)
--soft-limit <number> Memory during contention, as scaled integer (default KiB)
--swap-hard-limit <number> Max memory plus swap, as scaled integer (default KiB)
--min-guarantee <number> Min guaranteed memory, as scaled integer (default KiB)
--config affect next boot 写入配置文件中,虚拟机重启后生效
--live affect running domain 让设置立即生效,但是虚拟机重启后,效果消失
--current affect current domain 只在当前生效
测试:
[root@opman ksm]# virsh memtune centos-6.8-1 --hard-limit 1024000
--live
查看是否生效
[root@opman ksm]# virsh memtune centos-6.8-1
hard_limit : 1024000
soft_limit : unlimited
swap_hard_limit: unlimited
转载于:https://blog.51cto.com/14015606/2309740