virsh 学习笔记

239 阅读2分钟

Basics

用来管理不同的hypervisor的库,virsh(命令行)与virt-manager(GUI)都是调用的这个api。 image

en.wikipedia.org/wiki/Libvir…

virsh 常用命令

virsh list --all                #check all vms
virsh start rh8-vm01             
virsh shutdown rh8-vm01
virsh reboot rh8-vm01 
virsh reset rh8-vm01 
virsh dumpxml rh8-vm01          #export xml
virsh domifaddr rh8-vm01        #check net status
virsh edit rh8-vm01             #edit xml

virt-install 常用命令

virt-install  --cdrom ~/Fedora-Workstation-Live-x86_64-37-1.7.iso   # 新建虚拟机
virt-install --disk ~/fdsdfsa.qcow2 --import                        # 导入已有的虚拟机
virt-viewer  machinename                                            # 可视化查看某个虚拟机

www.redhat.com/sysadmin/vi…

非ubuntu可能需要sudo运行,或者添加环境变量export LIBVIRT_DEFAULT_URI=qemu:///system serverfault.com/questions/8…

Debug kernal with virt-manager

enable gdb port

virsh edit kvmname, then change <domain type='kvm'> to the following

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
    <qemu:commandline>
        <qemu:arg value='-s'/>
    </qemu:commandline>

or (debug your own port)

  <qemu:commandline>
    <qemu:arg value='-gdb'/>
    <qemu:arg value='tcp::1236'/>
  </qemu:commandline>

Reference: mhcerri.github.io/posts/debug…

enable terminal output

  1. enable ttyS0
systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service

2. output to ttyS0

GRUB_CMDLINE_LINUX_DEFAULT="nokaslr console=tty0 console=ttyS0 ignore_loglevel"
GRUB_TERMINAL="serial console"

update-grub

ignore_loglevel is to print all level info. debug maybe needed (not sure)

  1. connect it virsh console kvmname

Reference: serverfault.com/questions/3… docs.kernel.org/admin-guide…

config CPU

libvirt.org/formatdomai… vcpu 定义了分配给虚拟机的最大数量,可选以下的属性。

  • cpuset,可以指定使用哪些cpu,甚至后面可以使用cputune属性进行逐个指定
  • current,代表当前启用的cpu的数量,应该小于最大的数量
  • placement, 默认static,如果设置为auto,所有vcpu的设置将被忽略。

vcpus 可以进行更加细致的控制每个vcpu的属性。

  • id
  • enable 是否禁用,这里面启用的数量要与current保持一致,否则保存时,也会一致的。
  • hotpluggable 所有disable的cpu必须为true
  • order cpu加入系统的顺序

cputune 每个vcpu的调优

  • vcpuin 将某个vcpu绑定到host的core

red hat 建议选择Single core,Single Thread与不同数量的socket来达到最大的performance. qemu支持 overcommit, 虚拟的cpu/内存超过物理机的容量。 cpu-pm=on|off 让guest直接控制cpu power state, 对于guest vcpu会加速,但是对其他的guest machine就不友好。

还有其他的优化,例如 iothreads,mem-lock=on, apic的优化

如下执行cpu的1:1 映射

<vcpu placement="static">32</vcpu>
  <cputune>
    <vcpupin vcpu="0" cpuset="0"/>
    <vcpupin vcpu="1" cpuset="1"/>
    <vcpupin vcpu="2" cpuset="2"/>
    <vcpupin vcpu="3" cpuset="3"/>
    <vcpupin vcpu="4" cpuset="4"/>
    <vcpupin vcpu="5" cpuset="5"/>
    <vcpupin vcpu="6" cpuset="6"/>
    <vcpupin vcpu="7" cpuset="7"/>
    <vcpupin vcpu="8" cpuset="8"/>
    <vcpupin vcpu="9" cpuset="9"/>
    <vcpupin vcpu="10" cpuset="10"/>
    <vcpupin vcpu="11" cpuset="11"/>
    <vcpupin vcpu="12" cpuset="12"/>
    <vcpupin vcpu="13" cpuset="13"/>
    <vcpupin vcpu="14" cpuset="14"/>
    <vcpupin vcpu="15" cpuset="15"/>
    <vcpupin vcpu="16" cpuset="16"/>
    <vcpupin vcpu="17" cpuset="17"/>
    <vcpupin vcpu="18" cpuset="18"/>
    <vcpupin vcpu="19" cpuset="19"/>
    <vcpupin vcpu="20" cpuset="20"/>
    <vcpupin vcpu="21" cpuset="21"/>
    <vcpupin vcpu="22" cpuset="22"/>
    <vcpupin vcpu="23" cpuset="23"/>
    <vcpupin vcpu="24" cpuset="24"/>
    <vcpupin vcpu="25" cpuset="25"/>
    <vcpupin vcpu="26" cpuset="26"/>
    <vcpupin vcpu="27" cpuset="27"/>
    <vcpupin vcpu="28" cpuset="28"/>
    <vcpupin vcpu="29" cpuset="29"/>
    <vcpupin vcpu="30" cpuset="30"/>
    <vcpupin vcpu="31" cpuset="31"/>
  </cputune>