译文:关于红帽kvm虚拟化调优的方案KSM

                          
    
    在现在操作系统中共享内存的概念是众所周知的,例如一个程序在开始运行时,它会共享
父进程的所有内存空间,当子进程或者父进程要修改这个内存空间时,内核会分配一个新的内存
区域,并拷贝共享内存空间的原始值允许程序修改这个新的内存区域,这就是我们所说的“写时
拷贝”。

    KSM是linux的一个新特点,KSM能够使内核检测两个或者两个以上已经运行的程序并对比他们
所使用的内存区域,如果有内存区域或者内存页是完全相同的,KSM会使两个或多个相同的内存页
集成到一个内存页,这个内存页就会被标记成“写时拷贝”。如果内存页的内容被一个guest修改,
一个新的内存页就为这个guest创建。

    这个技术对KVM虚拟化是很有用的,一个guest开启时,它只从父进程qemu-kvm继承内存空间。
一旦guest在运行guest操作系统镜像的内容,和其他的guests运行相同的系统或者应用(就是不同
内存空间内容相同时),KSM只是标识和集成相同的内存页并不干涉guest或者影响运行guests的主
机或者guests,KSM允许KVM请求这些共享的内存区域。

    KSM增大了内存速度和内存的使用。一般进程的数据存储在cache或主存中,这样对于KVM guests
性能的cache的命中率就增大了,另一方面,共享内存减小了内存过度使用

    Red Hat Enterprise Linux提供两种不同的方式来控制KSM
      *  The ksm service starts and stops the KSM kernel thread.
      *  The ksmtuned service controls and tunes the ksm, dynamically managing
same-page merging. The  ksmtuned service starts ksm and stops the ksm service
if memory sharing is not necessary. The ksmtuned service must be told with the
retune parameter to run when new guests are created or destroyed.

KSM服务:
    ksm服务是一个标准的linux进程
    KSM被包含在qemu-kvm包中,它在红帽linux中默认是打开的,如果ksm 服务未被启动时,
KSM只共享2000个内存页,这种默认方式很低,提供了内存限制。当ksm服务启动时,KSM将共
享host主机中大于一半的内存空间,打开ksm能够使KSM共享更多的内存

开启服务:
[root@localhost ~]# /etc/init.d/ksm start
Starting ksm:                                              [  OK  ]

添加到开机自启服务队列中:
[root@localhost ~]# chkconfig ksm on

KSM调优服务ksmtuned:

[root@localhost ~]# /etc/init.d/ksmtuned restart
Stopping ksmtuned:                                         [  OK  ]
Starting ksmtuned:                                         [  OK  ]
   
关于ksmtuned的默认参数文件/etc/ksmtuned.conf
#############################################################
# Configuration file for ksmtuned.

# How long ksmtuned should sleep between tuning adjustments
# KSM_MONITOR_INTERVAL=60

# Millisecond sleep between ksm scans for 16Gb server.
# Smaller servers sleep more, bigger sleep less.
# KSM_SLEEP_MSEC=10

# KSM_NPAGES_BOOST=300
# KSM_NPAGES_DECAY=-50
# KSM_NPAGES_MIN=64
# KSM_NPAGES_MAX=1250

# KSM_THRES_COEF=20
# KSM_THRES_CONST=2048

# uncomment the following if you want ksmtuned debug info

# LOGFILE=/var/log/ksmtuned
# DEBUG=1

#############################################################

KSM的一些变量:KSM stores monitoring data in the /sys/kernel/mm/ksm/
full_scans
     Full scans run.
pages_shared
     Total pages shared.
pages_sharing
     Pages presently shared.
pages_to_scan
     Pages not scanned.
pages_unshared
     Pages no longer shared.
pages_volatile
     Number of volatile pages.
run
     Whether the KSM process is running.
sleep_millisecs
     Sleep milliseconds.


你可能感兴趣的:(译文:关于红帽kvm虚拟化调优的方案KSM)