libvirt xml 配置文件说明

xml 复制代码
<domain type="kvm">
    <!-- 虚拟机名 -->
    <name>i-insttest</name>
    <!-- 引导时提供的最大内存 -->
    <memory unit="KiB">4194304</memory>
    <!-- 实际分配内存 -->
    <currentMemory unit="KiB">4194304</currentMemory>
    <vcpu current="4">4</vcpu>
    <!-- 定义虚拟CPU(vCPU)的调度和资源分配策略 -->
    <cputune>
        <shares>512</shares>
    </cputune>
    <os>
        <!-- 在虚拟机中引导的操作系统类型 -->
        <!-- hvm 裸机上运行完全虚拟化 -->
        <type arch="sw_64" machine="core3">hvm</type>
        <!-- 操作系统镜运行的 内核 路径 -->
        <kernel>/images/i-insttest/vmlinux</kernel>
        <!-- 引导时传递给内核(或安装程序)的参数 -->
        <cmdline>root=/dev/vda rw console=ttyS0 ignore_loglevel net.ifnames=0</cmdline>
        <!-- 引导类型 hd 硬盘启动 cdrom 光驱启动 -->
        <boot dev="hd"/>
    </os>

    <features>
        <!-- ACPI 对于电源管理非常有用,例如,对于 KVM 或 HVF 虚机,需要正常关机才能正常工作 -->
        <acpi/>

        <!-- APIC允许使用可编程IRQ管理。从 0.10.2(仅限 QEMU)开始,有一个可选属性 eoi,其值为 'on' 和 'off',可切换虚机的 EOI(中断结束)的可用性。 -->
        <apic/>

        <!-- 物理地址扩展模式允许 32 位虚机寻址超过 4 GB 的内存。 -->
        <pae/>

        <!-- 根据 state 属性(值为 'on'、'off'),启用或禁用硬件辅助分页的使用。如果虚拟机管理程序检测到硬件辅助分页的可用性,则默认值为 'on'。 -->
        <hap/>

        <!-- 始终创建私有网络命名空间。如果定义了任何接口设备,则会自动设置此设置。此功能仅适用于基于容器的虚拟化驱动程序,如 LXC。 -->
        <privnet/>

        <!-- 通知虚机支持 paravirtual spinlocks,例如通过公开 pvticketlocks 机制。可以使用 state='off' 属性显式禁用此功能。 -->
        <pvspinlock state='on'/>

        <!-- 启用各种功能,以改善运行 Microsoft Windows 的虚机的行为。 -->
        <hyperv>
            <!-- 放宽对计时器的约束 -->
            <relaxed state='on'/>
            <!-- 启用虚拟 APIC -->
            <vapic state='on'/>
            <!-- 启动 spinlock 的支持 -->
            <spinlocks state='on' retries='4096'/>
            <!-- 设置虚拟机管理程序供应商 ID -->
            <vendor_id state='on' value=''/>
        </hyperv>
        <!-- 用于更改 KVM 虚拟机管理程序行为的各种功能。 -->
        <kvm>
            <!-- 从基于 MSR 的标准发现中隐藏 KVM 虚拟机管理程序 -->
            <hidden state='on'/>
        </kvm>
    </features>

    <!-- 定义 cpu 相关内容 -->
    <cpu mode="custom">

        <!-- sockets 配置 CPU 插槽数;在物理服务器上,插槽通常对应于物理CPU的数量。在这个虚拟环境中,它模拟了一个单插槽系统 -->
        <!-- cores 指定每个CPU插槽包含的核心数。这意味着虚拟机将看到8个逻辑处理核心 -->
        <!-- threads 每个核心的线程数量。-->
        <topology sockets='1' cores='8' threads='1'/>

        <!-- policy='require' require 表示该虚拟机需要宿主机的CPU支持该特性才能运行。disable(禁用特性)和 optional(如果可用则使用,但不是必需的) -->
        <!-- Self-Snoop(SS)用于改进缓存的一致性和管理,尤其是在多核心处理器中。它允许处理器自我监视其缓存操作,以确保数据的一致性和有效性。-->
        <feature policy='require' name='ss'/>
     
        <!-- vmx 允许硬件辅助虚拟化,提高了虚拟机的性能和安全性,特别是在运行多个虚拟机或需要在虚拟机中执行嵌套虚拟化时。 -->
        <feature policy='require' name='vmx'/>

        <!-- hypervisor 特性。这个特性通常指的是支持在虚拟机中运行另一个虚拟化层或嵌套虚拟化(Nested Virtualization)的能力 -->
        <feature policy='require' name='hypervisor'/>

        <!-- tsc_adjust 是指时间戳计数器(Time Stamp Counter,TSC)-->
        <feature policy='require' name='tsc_adjust'/>

        <!-- clflushopt 指的是优化的缓存刷新指令,是一种CPU指令,用于刷新(即写回)特定地址的缓存行到内存中 -->
        <feature policy='require' name='clflushopt'/>

        <!-- pku (Protection Keys for Userspace 用户空间保护密钥),这是一种由CPU提供的硬件特性,用于提高内存访问的安全性 -->
        <feature policy='require' name='pku'/>

        <!-- md-clear是一种CPU安全特性。可以在上下文切换时清除微架构级别的缓存数据,从而阻止潜在的数据泄露 -->
        <feature policy='require' name='md-clear'/>

        <!-- ssbd(Speculative Store Bypass Disable)CPU安全特性,用于缓解(Spectre Variant 4)安全漏洞 -->
        <feature policy='require' name='ssbd'/>

        <!-- xsaves" 是一种 CPU 指令集扩展,它提供了一种更高效的方式来保存和恢复某些处理器状态,特别是那些与安全和执行上下文相关的状态 -->
        <feature policy='require' name='xsaves'/>

        <!-- hle(Hardware Lock Elision) Intel 处理器提供的一种硬件事务内存支持特性,旨在改善多线程应用程序的性能,通过减少锁的开销来提高并发执行的效率 -->
        <feature policy='disable' name='hle'/>

        <!-- RTM(Restricted Transactional Memory)是Intel的TSX(Transactional Synchronization Extensions)的一部分,旨在提高多线程应用程序的性能和并发性能 -->
        <feature policy='disable' name='rtm'/>
    </cpu>

    <clock offset="utc"/>

    <!-- 客户请求poweroff时 执行 destroy -->
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>destroy</on_crash>

    <!-- 虚拟机所有设备信息 -->
    <devices>
        <emulator>/usr/bin/qemu-system-sw64</emulator>
        <!-- 磁盘配置信息 -->
        <!-- type 磁盘引用源 'file','network','block' -->、
        <!-- device 在虚拟机中如何显示这个 disk 资源 'disk','cdrom' -->
        <disk type="network" device="disk">

            <!-- auth 只有在 disk type="network" 和 source protocol="rbd或iscsi" 时可用 -->
            <!-- username='admin' 提供一个强制的身份验证使用的用户名 -->
            <auth username='admin'>
                <!-- 在有身份验证后强制的元素 secret type 为 type为 'ceph','CHAP' -->
                <!-- usage 密钥匹配方式 -->
                <secret type='ceph' usage='ceph-images'/>
            </auth>

            <!-- 可选的驱动程序元素允许指定与用于提供磁盘的虚拟机管理程序驱动程序相关的更多详细信息 -->
            <!-- type xen 支持 "tap", "tap2", "phy", or "file" -->
            <!-- type qemu 支持 "qemu" -->
            <!-- type 多类型支持 "raw", "bochs", "qcow2", "qed" -->
            <!-- cache 缓存控制机制 "default", "none", "writethrough", "writeback", "directsync" -->
            <driver name="qemu" type="raw" cache="none"/>

            <!-- 磁盘源 取决于 disk 中的 type 类型 -->
            <!-- type='file'  source 中 file 包含磁盘的文件的完全限定路径 -->
            <!-- type='block' source 中 dev 指定主机设备作为磁盘的完全限定路径 -->
            <!-- type='network' source 中 protocol 指定访问所请求 image 的协议 'rbd','http','nfs' -->
            <!-- type='network' source 中 name 指定要使用卷或镜像的位置 -->
            <source protocol="rbd" name="images/i-insttest"></source>

            <!-- 制磁盘向客户机操作系统公开的总线/设备 -->
            <!-- dev 指示"逻辑"设备名称 -->
            <!-- bus 指定要模拟的磁盘设备的类型  "ide", "scsi", "virtio", "xen", "usb", "sata", or "sd" -->
            <target dev="vda" bus="virtio"/>
        </disk>

        <!-- controller 对设备提供显式的控制 一般用在热插拔上面 -->
        <!-- type 'ide', 'fdc', 'scsi', 'sata', 'usb', 'ccid', 'virtio-serial' or 'pci' -->
        <!-- virtio-scsi 控制器,配置允许虚拟机以更高的性能访问SCSI设备,特别是在处理大量或高速的I/O操作时 -->
        <!-- piix3-uhci 是在虚拟化环境中使用的一种USB控制器模型。这个模型模拟了Intel PIIX3南桥芯片组中的UHCI(Universal Host Controller Interface)USB控制器 -->
        <!-- ehci USB 2.0控制器接口规范 -->
        <!-- nec-xhci USB 3.0 -->
        <!-- pci-root 指的是虚拟PCI总线的根控制器。是虚拟硬件组件(如网络适配器、磁盘控制器等)连接到虚拟机的主要通道 -->
        <!-- type='pci' model='pcie-root' 禁用此功能 index='0' -->
        <!-- index 描述遇到总线控制器的顺序的十进制整数 -->
        <controller type="pci" index="0" model="pcie-root"/>

        <!-- type="virtio-serial" 用于控制可通过控制器连接的设备数量 -->
        <controller type="virtio-serial" index="0"></controller>
        <controller type="scsi" index="0" model="lsilogic"></controller>
        <controller type="usb" index="0" model="nec-xhci"></controller>

        <!-- 网络接口 提供虚拟机直接到lan网桥 -->
        <interface type="bridge">
            <!-- 链接物理机创建的网桥 -->
            <source bridge="liantong"/>
            <!--  model type:"vga", "cirrus", "vmvga", "xen", "vbox", "qxl", "virtio", "gop", "bochs", "ramfb" or "none" 取决于可用的虚拟机管理程序功能  -->
            <model type="virtio"/>
        </interface>
        <interface type='bridge'>
            <!-- 指定 mac 地址 -->
            <mac address='52:54:01:02:03:04'/>
            <source bridge='net-vxlantest'/>
            <model type='virtio'/>
        </interface>

        <!-- 虚机使用物理机 USB, PCI 和 SCSI 设备直通 -->
        <!--  type: usb   pci   scsi -->
        <!-- type='pci'  当 managed='yes '时,pci 设备会与物理机分离,然后传递给虚机,并在虚机退出后重新连接到物理机 -->
        <hostdev mode='subsystem' type='pci' managed='yes'>
            <source>
                <address domain='0x0000-0xdf-0x00' bus='df' slot='00' function='0x0'/>
            </source>
        </hostdev>

        <!-- character 设备 serial ports(串行端口),console(控制台),paraller ports(并行端口),channels(通道) -->
        <serial type="pty">
            <!-- 指定端口号 -->
            <target port="0"/>
        </serial>

        <!-- 控制台设置 -->
        <console type="pty">
            <target type="serial" port="0"/>
        </console>

        <!-- 主机和虚拟机专用通信通道 -->
        <channel type='unix'>
            <source mode='bind' path='/tmp/i-insttest.agent'/>
            <target type='virtio' name='org.qemu.guest_agent.0'/>
        </channel>

        <!-- 创建支持通过SPICE客户端与虚拟机之间的WebDAV共享 -->
        <!-- org.spice-space.webdav.0 是 WebDAV 通道的名字--> 
        <channel type='spiceport'>
            <source channel='org.spice-space.webdav.0'/>
            <target type='virtio' name='org.spice-space.webdav.0' state='disconnected'/>
            <alias name='channel1'/>
            <!-- type='virtio-serial' 指的是该设备连接到一个 virtio-serial 控制器上。 -->
            <!-- virtio-serial 是一种高性能的串行设备传输框架,它提供了一种标准化的方式来增加虚拟化环境中的串行设备和端口 -->
            <address type='virtio-serial' controller='0' bus='0' port='2'/>
        </channel>

        <!-- 定义了一个通过 SPICE 协议在客户端和虚拟机之间建立的虚拟机通道(VMC)-->
        <!-- 通常用于高效的设备重定向(如剪切板共享、文件传输、USB设备重定向等) -->
        <channel type='spicevmc'>
            <target type='virtio' name='com.redhat.spice.0' state='connected'/>
            <alias name='channel2'/>
            <address type='virtio-serial' controller='0' bus='0' port='3'/>
        </channel>

        <input type="keyboard" bus="usb"></input>
        <input type="mouse" bus="usb"></input>
        <input type="tablet" bus="usb"></input>

        <!-- vnc 图形交互 -->
        <!-- type : sdl, vnc, spice, rdp, desktop or egl-headless -->
        <!-- port 为 -1 自动分配端口号 旧语法 -->
        <!-- autoport 自动分配端口号 -->
        <!-- keymap 使用的键盘类型 -->
        <graphics type="vnc" port="-1" autoport="yes" keymap="en-us" listen="0.0.0.0"></graphics>
        
        <!-- spice 协议远程桌面 -->
        <graphics type='spice' port='5907' autoport='no' listen='0.0.0.0'>
            <listen type='address' address='0.0.0.0'/>
            <image compression='auto_glz'/>
            <jpeg compression='always'/>
            <zlib compression='never'/>
            <playback compression='off'/>
            <streaming mode='off'/>
            <mouse mode='client'/>
            <clipboard copypaste='yes'/>
            <filetransfer enable='yes'/>
        </graphics>

        <!-- 视频驱动 -->
        <video>
            <!-- type="vga" 传统的视频控制器,提供基本的图形支持 -->
            <!--  type="qxl" 高级的视频控制器,专为虚拟化环境设计,支持SPICE  -->
            <!--  type="virtio" 更通用的虚拟化平台,旨在提供高性能的虚拟化驱动,其中virtio视频控制器支持包括高效的图形传输 -->
            <model type="vga" vram="65536" heads="1" primary="yes"/>
        </video>

        <!-- 定义虚拟机直通使用物理机的设备,下面是一个直通使用 GPU 的例子 -->
        <hostdev mode='subsystem' type='pci' managed='yes'>
            <driver name='vfio'/>
            <source>
                <!-- GPU 的物理地址 -->
                <address domain='0x0000' bus='0xe0' slot='0x00' function='0x0'/>
            </source>
            <alias name='hostdev0'/>
        </hostdev>

        <!-- 用于重新定义 USB 设备 -->
        <!-- type='spicevmc' 使用SPICE虚拟机通道(VMC)进行设备重定向 -->
        <redirdev bus='usb' type='spicevmc'>
            <address type='usb' bus='0' port='1'/>
        </redirdev>
        <memballoon model="none"/>
    </devices>
</domain>

<!-- 这个 address 标签很多设备都有这个配置 -->
<!-- 描述这个设备在客户虚拟机上表现方式,可以不写,libvirt 会自动生成一个 -->
<!-- type: 描述设备位于哪条总线上 -->
<!-- type="pci" 时有一下一些配置 domain  bus  slot  function -->
<!-- type="virtio-serial" 时有一下一些配置 controller  bus  port -->
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
相关推荐
乙酸氧铍6 天前
【imx6ul 学习笔记】Docker 运行百问网 imx6ul_qemu
linux·docker·arm·qemu·imx6ul
fdtsaid13 天前
Intel 六位专家对 Simics 助力 Shift-Left 的讨论(2018)
qemu·仿真·simulation·simics·intel simics
G_H_S_3_1 个月前
【网络运维】KVM基础使用
linux·运维·网络·kvm
Vallelonga1 个月前
KVM 架构概述
经验分享·虚拟化·kvm
shandianchengzi1 个月前
【记录】ARM|Ubuntu 24 快速安装 arm-none-eabi-gdb 及 QEMU 调试实战
linux·arm开发·ubuntu·arm·qemu
DeeplyMind1 个月前
使用parted工具扩展QCOW2磁盘大小完整方案
linux·qemu·virtialization
张世争2 个月前
RT-Thread qemu LVGL9.5 LV_LOG_USER 输出打印适配
qemu·rt-thread·log·lvgl9.5
张世争2 个月前
RT-Thread qemu LVGL9.5 显示驱动更新 lv_port_disp.c
lcd·qemu·rt-thread·lvgl9.5
张世争2 个月前
RT-Thread qemu LVGL9.5 鼠标 indev 驱动更新 lv_port_indev.c
qemu·rt-thread·indev·lvgl9.5