星期三, 5月 20, 2015

VMware hot add plug 功能

  1. VMware hot add plug 功能

    Ref
    2012-05-05 12:34 by hackerzhou
    前段時間接觸VMware vSpherehot-add/plug功能,感覺很炫,虛擬機器跑著跑著多出來幾個CPU和幾G的記憶體。其實還遠遠不止這些,還可以熱插網卡和硬碟等等,hot-add/plug為虛擬化管理員提供了在不允許停機的生產環境中仍然可以動態添加設備的方法。本文主要介紹下CPUmemoryhot-add/plug、如何讓guest OS識別新配置以及一些目前已知的問題,希望給VMware虛擬化社區貢獻一份力,同時希望能抛磚引玉,讓更多的虛擬化愛好者們能分享各自的經驗。
    vSphere Release Notes以及vSphere Client中使用hot-add memoryhot-plug CPU的措辭,不過我覺得說成廣義的hot-add也並無不可,因此下文用hot-add來指代hot-add/plug

    Hot-add可以抽象成三個步驟:

    打開VMhot-add選項(hot-add 功能預設不會打開)。右擊一個已經關機的VM->”Edit Settings”->”Options”->”Memory/CPU Hot-pluging”,打開memoryCPUhot-add/plug。具體的操作可以參考有圖示的教程 Using vSphere Hot-Add to Dynamically Add CPU and RAM,下圖拷貝自上述教程
  2. VM上觸發hot-add。開啟了VMhot-add之後,在VM開機狀態下進入”Edit Settings”會發現記憶體和CPU都是可配置的了。配置好之後vSphere會通知guest OS它的設備發生了改變,
  3. 讓運行在VM裡的guest OS識別出新設備。Windows一般能自動識別出並使用新的memoryCPU,但在Linux下就需要我們用腳本讓系統使用新配置。VMware Knowledge Base中有一篇
    1. Hot adding memory in Linux,對CPU的操作也很類似。有自動化需要的可以用這兩個腳本:online_hotplug_memory.sh  online_hotplug_cpu.sh,兩個腳本都不難理解,無非就是往識別出但是沒有onlineCPUmemorystate檔裡面寫識別字讓系統online下設備而已。

    局限性(根據個人經驗和參考文檔):

    ·         Hot-add memory的數量有嚴格的限制:
    1
    )新memory大小必須是128的整數倍。
    2
    )如果hot-add前的memory小於3G,最多只能hot-add3G
    3
    )如果hot-add前的memory等於3G,則不能hot-add任何memory
    4
    )如果hot-add前的memory大於3G,最多能hot-add 原先memory16倍,但不能超過 hardware limit(對VM version 7來說最多到255G,對VM version8來說1011G)。簡單的來說就是 limit=min(old_memory * 16, vm_version_7 ? 255G:1011G)
    ·         對於version 7VMhot-add CPU只能在core1的情況下對socket進行增加。而VM version8可以在core不為1的情況下添加socket
    ·         Hot-add 功能和VMware Fault ToleranceFT)功能互斥,不能同時使用。
    ·         開啟hot-add必須在VM關閉的狀態下進行,其實通過往vmx檔裡寫”mem.hotadd””vcpu.hotadd”兩個屬性一樣內開啟hot-add
    ·         Hot-add成功與否依賴guest OS是否支持hot-addHot-add之後guest OS必須得能識別並且使用新設備,不然hot-add只不過是在VM層面上進行了硬體的調整,作業系統內部並不識別。
    Windows
    下的支援性可以參考 vSphere Memory Hot Add/CPU Hot Plug
    Linux
    下的支援性可以參考 CPU and RAM hotplug support by PSBM 5
    ·         Hot-add 功能只在vSphere AdvancedEnterpriseEnterprise Plus version 上才能被開啟,也就是說只有交了錢才能享受到高端功能。
    ·         Hot-add memory之後可能會導致數秒的CPU 100%使用率。
    ·         內核版本小於2.6.38Linuxkernel bug,會導致有時候guest OS無法識別新加上的記憶體。根據 Hot-plugged memory cannot be initialized in a Linux VM 這篇kb中的描述來看,原記憶體越小越容易導致無法添加成功。在試驗中驗證了這點,並且發現原記憶體在hot-add前使用率越高,新記憶體就越無法成功被識別。要想workaround,別無他法,只能使用盡可能新的內核版本。
    比如在guest OSSLSE 11 SP1(內核2.6.32)的情況下,512M記憶體無負載可以hot-add成功(但仍有接近128M記憶體無法被識別),但512M記憶體跑個程式消耗70%的記憶體就無法識別hot-add上的記憶體(哪怕直接hot-add3G也是一兆都認不出)。
    而在 Ubuntu 11.04(內核2.6.38)中,空負載的情況下可以識別出全部hot-add上的記憶體,不會丟失128M;在負載較大的情況下仍然可以識別出大部分hot-add上的記憶體(仍然會丟失128M)。
    ·         另有一篇文章也分析了hot-add 功能:VMware vSphere hot-add RAM and hot-plug CPU: Not so ‘hot,’ but still cool,有興趣的同學也可以看看。
P.S.VMware hardware 的版本表

沒有留言:

LinkWithin-相關文件

Related Posts Plugin for WordPress, Blogger...