libvirt/qemu特性之cpu hotplug

目前qemu(1.7)/libvirt(1.2)只实现了cpu 的hotadd功能。hot remove还在实现中。
libvirt进行cpu hot add的过程:
  1. 虚拟机中安装qemu-agent
  2. 配置libvirt xml
    1. <!-- 配置CPU数目 -->  
    2.     <vcpu placement='auto' current="1">4</vcpu>  
    3. <!--(增加guest agent通道,详细参照guest agent章节)-->  
    4.     <channel type='unix'>  
    5.       <source mode='bind' path='/var/lib/libvirt/qemu/{$guestname}.agent'/>  
    6.       <target type='virtio' name='org.qemu.guest_agent.0'/>  
    7.     </channel>  

  3. 启动虚拟机、在Guest中查看VCPU数目
    [plain] view plain copy 在CODE上查看代码片 派生到我的代码片
    1. ls /sys/devices/system/cpu/  

  4. 使用virsh命令增加VCPU
    [plain] view plain copy 在CODE上查看代码片 派生到我的代码片
    1. virsh setvcpus domain 2 --live  
    2.   
    3. 再在Guest中查看,发现有新增加的VCPU  
    4. ls /sys/devices/system/cpu/  

  5. 使用virsh命令online新增加的VCPU
    [plain] view plain copy 在CODE上查看代码片 派生到我的代码片
    1. virsh setvcpus domain 2 --guest  
    2.   
    3. 在Guest中使用Top命令,可以看到有两个VCPU在使用  

qemu进行cpu hotplug过程:
  1. 启动guest
    [plain] view plain copy 在CODE上查看代码片 派生到我的代码片
    1. $ 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  

  2. 连接qmp命令
    [plain] view plain copy 在CODE上查看代码片 派生到我的代码片
    1. $ telnet localhost 4444  

  3. 运行qmp-check命令
    [plain] view plain copy 在CODE上查看代码片 派生到我的代码片
    1. { "execute": "qmp_capabilities" }  

  4. 添加vcpu
    [plain] view plain copy 在CODE上查看代码片 派生到我的代码片
    1. { "execute": "cpu-add", "arguments": { "id": 2} }  

  5. 在guest中将vcpu生效
    [plain] view plain copy 在CODE上查看代码片 派生到我的代码片
    1. $ echo 1 > /sys/devices/system/cpu/cpu2/online  

cpu hotplug原理:
目前linux2.6.14以后,windows2008 datacenter之后OS支持cpu hotplug功能。
CPU 的 Hot Add 为例描述这一过程:
  1. 用户将 CPU 插入一个空闲的 socket 中
  2. 用户通过 Hot Plug 的接口初始化 Hot Add 这一动作。接口可以是 OS 提供的 UI 接口,按一个按钮,或者是某些管理接口,如 IPMI,AMT
  3. firmware/BIOS 对插入的 CPU 进行必要的初始化操作,如配置 QPI 总线的路由表,更新地址解码等
  4. 通过 ACPI 中断接口(SCI 中断)向 OS 产生一个 Hot Add 的事件
  5. OS 在接收到这个 ACPI 事件后首先需要通过 ACPI 的 _OSI 方法检查当前系统是否支持”Module Device”的能力,如果是则表明可以进行 Hot Add 操作
  6. OS 通过 ACPI 的 _MAT 方法得到 MADT 描述表,用来初始化 Local APIC/SAPIC 以及 local NMI 中断
  7. OS 对新增的 CPU 进行相关的电源管理配置,如 P/C/T state
  8. OS 调用 ACPI 的 _OST 方法通知 firmware/BIOS 本次 Hot Add 成功与否

cpu hotplug价值:
  1. 满足用户SLA
  2. 利用空闲资源
  3. 动态扩展而无需重启虚拟机
其他:

对第X个CPU进行online操作

[plain] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #echo 1 > /sys/devices/system/cpu/cpuX/online  
查看有多少CPU工作

[plain] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #cat /proc/interrupts  
对第X个CPU进行offline操作

[plain] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #echo 0 > /sys/devices/system/cpu/cpuX/online  

参考:

http://www.ibm.com/developerworks/cn/linux/l-cn-ras/
http://www.mrz001.com/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值