libvirt/qemu特性之cpu hotplug

声明:

本博客欢迎转发,但请保留原作者信息!

博客地址:http://blog.csdn.net/halcyonbaby

内容系本人学习、研究和总结,如有雷同,实属荣幸!


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

  3. 启动虚拟机、在Guest中查看VCPU数目
    ls /sys/devices/system/cpu/

  4. 使用virsh命令增加VCPU
    virsh setvcpus domain 2 --live
    
    再在Guest中查看,发现有新增加的VCPU
    ls /sys/devices/system/cpu/
    

  5. 使用virsh命令online新增加的VCPU
    virsh setvcpus domain 2 --guest
    
    在Guest中使用Top命令,可以看到有两个VCPU在使用
    

qemu进行cpu hotplug过程:
  1. 启动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

  2. 连接qmp命令
    $ telnet localhost 4444

  3. 运行qmp-check命令
    { "execute": "qmp_capabilities" }

  4. 添加vcpu
    { "execute": "cpu-add", "arguments": { "id": 2} }

  5. 在guest中将vcpu生效
    $ 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操作

#echo 1 > /sys/devices/system/cpu/cpuX/online
查看有多少CPU工作

#cat /proc/interrupts
对第X个CPU进行offline操作

#echo 0 > /sys/devices/system/cpu/cpuX/online

参考:

http://www.ibm.com/developerworks/cn/linux/l-cn-ras/
http://www.mrz001.com/






  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值