qemu-kvm: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument

1. 问题描述及原因分析

在飞腾5000C的服务器环境下,通过virsh create cirros.xml命令启动虚拟机,报如下错误:

错误:从 cirros.xml 创建域失败
错误:internal error: qemu unexpectedly closed the monitor: 2024-01-25T02:23:36.085930Z qemu-kvm: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument

cirros.xml文件内容如下:

<domain type='kvm' id='1'>
  <name>cirros</name>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='aarch64' machine='virt-rhel8.4.0'>hvm</type>
  </os>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='cdrom'>
      <driver name='qemu'/>
      <target dev='sda' bus='scsi'/>
      <readonly/>
      <boot order='2'/>
      <alias name='scsi0-0-0-0'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/cirros-0.6.0-aarch64-disk.img' index='1'/>
      <backingStore/>
      <target dev='sdb' bus='scsi'/>
      <boot order='1'/>
      <alias name='scsi0-0-0-1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
  </devices>
</domain>

为了验证如上问题,我们直接通过qemu-kvm的命令

qemu-kvm --machine virt -cpu cortex-a57

发现也报

qemu-kvm: kvm_init_vcpu failed: Invalid argument

cortex-a57通过qemu-kvm --machine virt -cpu help查出来的,估计虽然在国产平台显示是支持该款CPU的,实际并不支持,不过如下CPU支持

qemu-kvm --machine virt -cpu Kunpeng-920

为了安全起见我们直接采用host模式

qemu-kvm --machine virt -cpu host

可以成功启动qemu模拟器,故我们改造xml文件,加入host模式,如下

  <cpu mode='host-passthrough' check='none'/>

通过virsh create cirros.xml可以成功启动虚拟机,判断为若不指定CPU MODE,会选择到libvirt默认指定的型号,国产平台不一定能支持,故出现kvm_init_vcpu failed: Invalid argument。


2. 解决方案:

在xml里明确指定cpu mode,国产平台一般采用host-passthrough模式更为稳妥,如下,比较完整的cirros.xml如下:

<domain type='kvm' id='1'>
  <name>cirros</name>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='aarch64' machine='virt-rhel8.4.0'>hvm</type>
  </os>
  <features>
    <gic version='3'/>
  </features>
  <cpu mode='host-passthrough' check='none'/>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='cdrom'>
      <driver name='qemu'/>
      <target dev='sda' bus='scsi'/>
      <readonly/>
      <boot order='2'/>
      <alias name='scsi0-0-0-0'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/cirros-0.6.0-aarch64-disk.img' index='1'/>
      <backingStore/>
      <target dev='sdb' bus='scsi'/>
      <boot order='1'/>
      <alias name='scsi0-0-0-1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
  </devices>
</domain>

3.参考文献

https://libvirt.org/drvqemu.html
https://blog.csdn.net/avatar_2009/article/details/107666014

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值