天天看點

KVM性能優化之記憶體KSM

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

[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 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

繼續閱讀