分類:
云計算
2014-01-20 19:24
3078人閱讀
收藏
舉報
聲明:
本博客歡迎轉(zhuǎn)發(fā),但請保留原作者信息!
博客地址:http://blog.csdn.net/halcyonbaby
內(nèi)容系本人學(xué)習(xí)、研究和總結(jié),如有雷同,實屬榮幸!
目前qemu(1.7)/libvirt(1.2)只實現(xiàn)了cpu 的hotadd功能。hot remove還在實現(xiàn)中。
libvirt進行cpu hot add的過程:
- 虛擬機中安裝qemu-agent
- 配置libvirt xml
-
- <vcpu placement='auto' current="1">4</vcpu>
-
- <channel type='unix'>
- <source mode='bind' path='/var/lib/libvirt/qemu/{$guestname}.agent'/>
- <target type='virtio' name='org.qemu.guest_agent.0'/>
- </channel>
- 啟動虛擬機、在Guest中查看VCPU數(shù)目
- ls /sys/devices/system/cpu/
- 使用virsh命令增加VCPU
- virsh setvcpus domain 2 --live
-
- 再在Guest中查看,發(fā)現(xiàn)有新增加的VCPU
- ls /sys/devices/system/cpu/
- 使用virsh命令online新增加的VCPU
- virsh setvcpus domain 2 --guest
-
- 在Guest中使用Top命令,可以看到有兩個VCPU在使用
qemu進行cpu hotplug過程:
- 啟動guest
- $ qemu-kvm -cpu host -enable-kvm -m 1024 -smp 1,maxcpus=4 -drive file=/data/hotplug/hotplug.qcow2,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -qmp tcp:localhost:4444,server
- 連接qmp命令
- 運行qmp-check命令
- { "execute": "qmp_capabilities" }
- 添加vcpu
- { "execute": "cpu-add", "arguments": { "id": 2} }
- 在guest中將vcpu生效
- $ echo 1 > /sys/devices/system/cpu/cpu2/online
-
cpu hotplug原理:
目前l(fā)inux2.6.14以后,windows2008 datacenter之后OS支持cpu hotplug功能。
CPU 的 Hot Add 為例描述這一過程:
- 用戶將 CPU 插入一個空閑的 socket 中
- 用戶通過 Hot Plug 的接口初始化 Hot Add 這一動作。接口可以是 OS 提供的 UI 接口,按一個按鈕,或者是某些管理接口,如 IPMI,AMT
- firmware/BIOS 對插入的 CPU 進行必要的初始化操作,如配置 QPI 總線的路由表,更新地址解碼等
- 通過 ACPI 中斷接口(SCI 中斷)向 OS 產(chǎn)生一個 Hot Add 的事件
- OS 在接收到這個 ACPI 事件后首先需要通過 ACPI 的 _OSI 方法檢查當(dāng)前系統(tǒng)是否支持”Module Device”的能力,如果是則表明可以進行 Hot Add 操作
- OS 通過 ACPI 的 _MAT 方法得到 MADT 描述表,用來初始化 Local APIC/SAPIC 以及 local NMI 中斷
- OS 對新增的 CPU 進行相關(guān)的電源管理配置,如 P/C/T state
- OS 調(diào)用 ACPI 的 _OST 方法通知 firmware/BIOS 本次 Hot Add 成功與否
cpu hotplug價值:
- 滿足用戶SLA
- 利用空閑資源
- 動態(tài)擴展而無需重啟虛擬機
其他:
對第X個CPU進行online操作
- #echo 1 > /sys/devices/system/cpu/cpuX/online
查看有多少CPU工作
對第X個CPU進行offline操作
- #echo 0 > /sys/devices/system/cpu/cpuX/online
參考:
http://www.ibm.com/developerworks/cn/linux/l-cn-ras/
http://www./
|