[译]kvm中虚机xml定义格式说明

随笔 2017-02-15

虚拟机XML格式

本节介绍用于表示域的XML格式,根据运行的域的类型和用于启动它们的选项,格式有所不同。对于虚拟机管理程序的具体细节请咨询 驱动程序文档

元素和属性的概述

为所有虚拟机所需的根元素命名domain。它有两个属性,在 type指定用于运行域管理程序。允许的值是特定于驱动程序的,但包括"xen","kvm","qemu","lxc"和"kqemu"。第二属性是id它是正在运行的来宾机的唯一整数标识符。非活动计算机没有id值。

通用根数据

<domain type ='xen'id ='3'>
  <name> fv0 </name>
  <uuid> 4dea22b31d52d8f32516782e98ab3fa0 </uuid>
  <title>A short description - title - of the domain</title>
  <description>Some human readable description</description>
  <metadata>
    <app1:foo xmlns:app1 ="http://app1.org/app1/"> .. </app1:foo>
    <app2:bar xmlns:app2 ="http://app1.org/app2/"> .. </app2:bar>
  </meta>
  ... ...

name

所述内容`name`元素提供为虚拟机的简称。此名称应仅由字母数字字符组成,并且在单个主机的范围内必须是唯一的。它通常用于形成用于存储持久配置文件的文件名。自0.0.1

uuid

所述内容`uuid`元素提供为虚拟机的全局唯一标识符。格式必须是RFC 4122标准,例如`3e3fce45-4f53-4fa7-bb32-11f34168b82b`。如果在定义/创建新计算机时省略,则会生成随机UUID。另外,也可以通过一个提供的UUID [`sysinfo`](http://libvirt.org/formatdomain.html#elementsSysinfo) 规范。自从0.0.1以来,sysinfo自0.8.7

title

可选的元素`title`域的简短描述提供了空间。标题不应包含任何换行符。自0.9.10。

description

该内容`description`元素提供了虚拟机的可读描述。这个数据不以任何方式被libvirt使用,它可以包含用户想要的任何信息。自0.7.2

metadata

该`metadata`节点可以被应用程序用于存储自定义元数据以XML节点/树的形式。应用程序必须在它们的XML节点/树上使用自定义命名空间,每个命名空间只有一个顶级元素(如果应用程序需要结构,它们应该有子元素到它们的命名空间元素)。自0.9.10

操作系统引导

有许多不同的方法来引导虚拟机,每个都有自己的优点和缺点。

BIOS引导程序

通过BIOS引导可用于支持完全虚拟化的管理程序。在这种情况下,BIOS具有确定在何处获得/找到引导映像的引导顺序优先级(软盘,硬盘,cdrom,网络)。

... ...
<os>
  <type> hvm </type>
  <loader readonly ='yes' secure ='no' type ='rom'>/usr/lib/xen/boot/hvmloader </loader>
  <nvram template ='/ usr/share/OVMF/OVMF_VARS.fd'>/var/lib/libvirt/nvram/guest_VARS.fd </nvram>
  <boot dev ='hd' />
  <boot dev ='cdrom' />
  <bootmenu enable ='yes'timeout ='3000' />
  <smbios mode ='sysinfo' />
  <bios useserial ='yes'rebootTimeout ='0' />
</os>
... ...

type

所述内容`type`元素指定在虚拟机来引导操作系统的类型。 `hvm`表示操作系统是设计为在裸机上运行的,因此需要完全虚拟化。`linux` (命名不正确)是指支持Xen 3管理程序来宾ABI的操作系统。还有两个可选属性,`arch` 指定CPU架构来虚拟化,并`machine`参照该机器类型。该[功能的XML](http://libvirt.org/formatcaps.html) 提供了有关这些允许值的详细信息。自0.0.1

loader

可选`loader`标记是指一种固件斑点,这是由绝对路径指定,用来协助域创建过程。它由Xen完全虚拟化的域使用,以及设置QEMU/KVM域的QEMU BIOS文件路径。自从0.9.12 0.1.0,QEMU/KVM XEN然后,因为1.2.8有可能为元素有两个可选属性:`readonly`(接受的值是 `yes`和`no`),以反映一个事实,即形象应该是可写或只读。第二个属性 `type`接受值`rom`和 `pflash`。它告诉管理程序在客户机内存中应该映射文件。例如,如果加载路径指向一个UEFI图像,`type`应 `pflash`。此外,一些固件可以实现安全引导特征。属性 `secure`可以用来再控制它。 自2.1.0

nvram

一些UEFI固件可能想使用非易失性存储器来存储一些变量。在主机中,这表示为一个文件,文件的绝对路径存储在此元素中。此外,当域被启动libvirt的副本所谓定义主NVRAM存储文件`qemu.conf`。如果需要,该`template` 属性可以用来从配置文件主NVRAM的商店每个域覆盖图。注意,对于临时域,如果NVRAM文件已经由libvirt创建它被留下,它是管理应用程序的责任保存和删除文件(如果需要是持久的)。自1.2.8

boot

该`dev`属性取值为"FD","高清","CDROM"或"网络"之一,用于指定下一个引导设备来考虑。该`boot`元素可以重复多次,以设置启动设备的优先级列表依次尝试。相同类型的多个设备根据它们的目标进行分类,同时保持总线的顺序。定义域后,libvirt返回的XML配置(通过virDomainGetXMLDesc)按排序顺序列出设备。一旦排序,第一个设备被标记为可引导。因此,例如,配置为从分配给它的vdb,hda,vda和hdc磁盘的"hd"引导的域将从vda(排序列表是vda,vdb,hda,hdc)引导。类似域与hdc,vda,vdb和hda磁盘将从hda(排序的磁盘是:hda,hdc,vda,vdb)启动。它可以是棘手的期望的方式,这就是为什么每设备引导元件(见配置[磁盘](http://libvirt.org/formatdomain.html#elementsDisks), [网络接口](http://libvirt.org/formatdomain.html#elementsNICS),和 [USB和PCI设备](http://libvirt.org/formatdomain.html#elementsHostDev)下方的部分)进行了介绍和它们提供超过引导顺序的完全控制的首选方式。的`boot`元件和每个设备引导元件是相互排斥的。自0.1.3以来,每个设备引导自0.8.8

smbios

如何填充SMBIOS信息在guest虚拟机中可见。该`mode`属性必须指定,要么是"模拟"(让虚拟机管理程序生成的所有值),"主机"(复制所有块0和1座,除了UUID,从主机的SMBIOS值; 调用可用于看到被复制什么的值),或"SYSINFO"(在使用的值[SYSINFO](http://libvirt.org/formatdomain.html#elementsSysinfo)元素)。如果未指定,则使用管理程序缺省值。 自0.8.7[ `virConnectGetSysinfo`](http://libvirt.org/html/libvirt-libvirt-host.html#virConnectGetSysinfo)[](http://libvirt.org/formatdomain.html#elementsSysinfo)

直到这里,BIOS / UEFI配置旋钮是通用的,可以通过大多数(如果不是全部)固件实现。然而,从现在开始,并不是每一个单一的设置对所有的固件都有意义。举例来说,rebootTimeout没有任何意义了UEFI, useserial可能不会用不产生任何输出到串行线路等。此外,固件通常不出口他们的libvirt的能力(或用户)来检查BIOS固件可用。他们的能力集可以随着每个新版本改变。因此建议用户在生产中依赖他们之前尝试他们使用的设置。

bootmenu

是否在guest虚拟机启动时启用交互式启动菜单提示。所述`enable`属性可以是"是"或"否"。如果未指定,则使用管理程序缺省值。 由于0.8.3 附加属性`timeout`需要的毫秒数引导菜单要等到超时。允许的值范围在[0,65535]包容性的数字,除非它被忽略`enable` 被设置为"yes"。自1.2.8

bios

这个元素有属性`useserial`有可能的值`yes`或`no`。它启用或禁用串行图形适配器,允许用户在串行端口上看到BIOS消息。因此,人们需要有 [串行端口](http://libvirt.org/formatdomain.html#elementCharSerial)限定。 由于0.9.4。 由于0.10.2(QEMU只),另外还有一个属性,`rebootTimeout`即控制是否和后多长时间客应该开始的情况下启动(根据BIOS)失败再次启动。该值是最大的毫秒`65535`和特殊值`-1`禁用重新启动。 

主机引导程序

使用半虚拟化的管理程序通常不模拟BIOS,而是主机负责启动操作系统引导。这可以在主机中使用伪引导加载程序来提供用于为客户机选择内核的接口。一个例子是pygrub与Xen的。该Bhyve管理程序也使用主机引导程序,无论是bhyveloadgrub-bhyve

... ...
<bootloader>/usr/bin/pygrub </bootloader>
<bootloader_args>  - 追加单个</bootloader_args>
... ...

bootloader

该内容`bootloader`元素提供了对主机操作系统引导加载程序的可执行文件的完全限定路径。此引导加载程序将运行以选择要引导的内核。引导加载程序所需的输出取决于正在使用的管理程序。自0.1.0

bootloader_args

可选的`bootloader_args`元素允许的命令行参数传递给bootloader。 自0.2.3

直接内核引导

当安装新的客户操作系统时,通常可以直接从内核和存储在主机操作系统中的initrd进行引导,允许将命令行参数直接传递给安装程序。此功能通常可用于半虚拟客户端和完整虚拟客户端。

... ...
<os>
  <type> hvm </type>
  <loader>/usr/lib/xen/boot/hvmloader </loader>
  <kernel>/root/f8-i386-vmlinuz </kernel>
  <initrd>/root/f8-i386-initrd </initrd>
  <cmdline> console=ttyS0 ks=http://example.com/f8-i386/os/ </cmdline>
  <dtb> /root/ppc.dtb </dtb>
  <acpi>
    <table type ='slic'>/path/to/slic.dat </table>
  </acpi>
</os>
... ...

type

该元素具有相同的语义在前面所描述的 [BIOS引导部分](http://libvirt.org/formatdomain.html#elementsOSBIOS)

loader

该元素具有相同的语义在前面所描述的 [BIOS引导部分](http://libvirt.org/formatdomain.html#elementsOSBIOS)

kernel

此元素的内容指定主机操作系统中内核映像的完全限定路径。

initrd

此元素的内容指定主机操作系统中(可选)ramdisk映像的完全限定路径。

cmdline

此元素的内容指定要在引导时传递给内核(或安装程序)的参数。这通常用于指定备用主控制台(例如串行端口)或安装介质源/ kickstart文件

dtb

此元素的内容指定主机操作系统中(可选)设备树二进制(dtb)映像的完全限定路径。 自1.0.4

acpi

该`table`元素包含ACPI表中一个完全合格的路径。该`type`属性包含ACPI表类型(目前只`slic`支持) 由于1.3.5(仅QEMU)

容器启动

当使用而不是内核/启动映像基于容器的虚拟化,引导域,以二进制代码init的路径是必需的,使用的init元素。默认情况下,这将启动没有参数。要指定初始ARGV,使用initarg 元素,多次被评为需要尽可能多的时间。的cmdline 元件,如果设置将用于提供一个相当于/proc/cmdline 但不会影响初始化argv的。

<os>
  <type arch ='x86_64'> exe </type>
  <init>/bin/systemd </init>
  <initarg>  -  unit </initarg>
  <initarg> emergency.service </initarg>
</os>

如果要启用用户的命名空间,设置idmap元素。所述uidgid元素有三个属性:

start

容器中的第一个用户ID。它必须为'0'。

target

容器中的第一个用户ID将映射到主机中的此目标用户ID。

count

允许容器中的多少用户映射到主机的用户。

<idmap>
  <uid start ='0'target ='1000'count='10' />
  <gid start ='0'target ='1000'count='10' />
</idmap>

SMBIOS系统信息

有些管理程序允许通过呈现给来宾(例如,SMBIOS字段可以通过虚拟机管理程序通过填充和检查什么系统信息的控制dmidecode命令,在客人)。可选的sysinfo元素涵盖了所有这些类别的信息。自0.8.7

... ...
<os>
  <smbios mode ='sysinfo' />
  ... ...
</os>
<sysinfo type ='smbios'>
  <bios>
    <entry name ='vendor'> LENOVO </entry>
  </bios>
  <system>
    <entry name ='manufacturer'> Fedora </entry>
    <entry name ='product'> Virt-Manager </entry>
    <entry name ='version'> 0.9.4 </entry>
  </system>
  <baseBoard>
    <entry name ='manufacturer'> LENOVO </entry>
    <entry name ='product'> 20BE0061MC </entry>
    <entry name ='version'> 0B98401 Pro </entry>
    <entry name ='serial'> W1KS427111E </entry>
  </baseBoard>
</sysinfo>
... ...

sysinfo元件具有一个强制属性type确定子元件,具有支持的值的布局:

smbios

子元素召唤出特定SMBIOS值,这会影响到客人若配合使用`smbios`的子元素[`os`](http://libvirt.org/formatdomain.html#elementsOS)的元素。的每个子元素`sysinfo`名称的SMBIOS块,并且这些元件中可以是一个列表`entry` ,描述了块内的字段元素。识别以下块和条目: 

bios

 这是SMBIOS的块0,其条目名称来自: 

vendor

BIOS供应商名称

version

BIOS版本

date

BIOS发行日期。如果提供,则采用mm/dd/yy或mm/dd/yyyy格式。如果字符串的年份部分是两位数,则年份假定为19yy。

release

系统BIOS主要版本号和次要版本号值连接在一起作为一个字符串,以句点分隔,例如10.22。

system

 这是SMBIOS的块1,其条目名称来自: 

manufacturer

BIOS的制造商

product

产品名称

version

产品版本

serial

序列号

uuid

通用唯一ID号。如果该条目旁边顶层提供 [`uuid`](http://libvirt.org/formatdomain.html#elementsMetadata)元件,则这两个值必须匹配。

sku

SKU号以标识特定配置。

family

识别特定计算机所属的系列。

baseBoard

 这是SMBIOS的块2。这个元素可以重复多次来描述所有的基板; 然而,并非所有管理程序都必须支持重复。元素可以有以下子元素: 

manufacturer

BIOS的制造商

product

产品名称

version

产品版本

serial

序列号

asset

资产标签

location

在机箱的位置

注:错误地提供条目的 biossystembaseBoard 块将没有错误被忽略。除了uuid 验证和date格式检查,所有的值将作为字符串的虚拟机管理程序的驱动程序通过。

CPU分配

<domain>
  ... ...
  <vcpu placement ='static'cpuset ="1-4,^ 3,6"current ="1"> 2 </vcpu>
  <vcpus>
    <vcpu id ='0'enabled ='yes'hotpluggable ='no'order ='1' />
    <vcpu id ='1'enabled ='no'hotpluggable ='yes' />
  </vcpus>
  ... ...
</domain>

vcpu

此元素的内容定义为客户机操作系统分配的虚拟CPU的最大数量,其必须介于1和管理程序支持的最大值之间。 

cpuset

 可选属性`cpuset`是一个逗号分隔的过程域和虚拟CPU默认情况下可以被固定到物理CPU编号列表。(注:过程域和虚拟CPU的钉扎的策略,可以分别由指定 `cputune`如果属性。`emulatorpin` 中`cputune`被指定,`cpuset` 由指定的`vcpu`位置将被忽略同样,对于已虚拟CPU,`vcpupin`指定,`cpuset`由指定的`cpuset`位置将会被忽略对于不具备虚拟CPU `vcpupin`规定,每次都会被固定到所指定的物理CPU `cpuset`这里)。该列表中的每个元素都是单个CPU编号,一系列CPU编号或插入符号,后跟要从以前范围中排除的CPU编号。 自0.4.4

current

 可选属性`current`可以被用来指定是否大于虚拟CPU的最大数目更少的应该被启用。 自0.8.5

placement

 可选属性`placement`可用于指示域处理的CPU放置模式。该值可以是"静态"或"自动",但默认`placement` 的`numatune`或者"静态" `cpuset`中指定的。使用"自动"表示域的过程中会从查询numad被钉在咨询节点集,属性值`cpuset`,如果指定的将被忽略。如果同时`cpuset`和`placement`未指定,或者`placement`是"静态"的,但是没有 `cpuset`指定,域名过程中会固定到所有可用的物理CPU。 自0.9.11(仅限QEMU和KVM)

vcpus

 vcpus元素允许控制单个vcpus的状态。该`id`属性指定在其他地方,如钉扎VCPU,调度信息和NUMA分配使用libvirt的vCPU的的ID。请注意,在某些情况下,guest虚拟机中显示的vcpu ID可能与libvirt ID不同。有效ID是从0到集科最大VCPU计数`vcpu`元素减1的`enabled`属性允许控制VCPU的状态。有效值为`yes`和`no`。 `hotpluggable`控制在启动时启用cpu的情况下,给定的vcpu是否可以热插拔和热插拔。请注意,所有禁用的vcpus必须可热插拔。有效值为 `yes`和`no`。 `order`允许指定添加在线vcpus的顺序。对于需要一次插入多个vcpus的虚拟机管理程序/平台,可能需要在需要同时启用的所有vcpus上复制顺序。指定顺序不是必需的,然后以任意顺序添加vcpus。如果使用订单信息,它必须用于所有在线vcpus。管理程序可以在某些操作期间清除或更新订购信息,以确保有效的配置。注意,管理程序可以创建不同于引导vcpus的可热插拔的vcpus,因此可能需要特殊的初始化。管理程序可能要求在引导时启用的不可热插拔的vcpus在从ID 0开始的开始集群。也可能需要vcpu 0始终存在且不可热插拔。请注意,单个CPU的提供状态可能是必要的,以支持可寻址的vCPU热插拔,并且所有管理程序可能不支持此功能。对于QEMU,需要以下条件。Vcpu 0需要启用和不可热插拔。在PPC64以及它在同一个核心的vcpus也需要启用。所有非热插拔出席启动需要CPU来VCPU 0后进行分组 由于2.2.0(仅QEMU)

IOThreads分配

IOThreads是专用事件循环线程,支持的磁盘设备执行块I/O请求,以提高可扩展性,特别是在具有多个LUN的SMP主机/ guest虚拟机上。 自1.2.8(仅QEMU)

<domain>
  ... ...
  <iothreads> 4 </iothreads>
  ... ...
</domain>

<domain>
  ... ...
  <iothreadids>
    <iothread id ="2"/>
    <iothread id ="4"/>
    <iothread id ="6"/>
    <iothread id ="8"/>
  </iothreadids>
  ... ...
</domain>

iothreads

 此可选元素的内容定义要分配给域以供受支持的目标存储设备使用的IOThread的数量。每个主机CPU应该只有1或2个IOThread。可能有多个支持的设备分配给每个IOThread。 自1.2.8

iothreadids

 可选的`iothreadids`元素提供了明确定义IOThread ID的域的能力。默认情况下,IOThread的ID按顺序编号从1到数开始`iothreads`为域定义。的 `id`属性被用来定义IOThread标识。该 `id`属性必须是一个正整数大于0如果有少`iothreadids`比定义 `iothreads`域定义,那么libvirt的顺序将填补`iothreadids`从1开始避免任何预定义`id`。如果有更多的 `iothreadids`比定义`iothreads` 为域定义,则该`iothreads`值将被相应的调整。 自1.2.15

CPU优化

<domain>
  ... ...
  <cputune>
    <vcpupin vcpu ="0"cpuset ="1-4,^ 2"/>
    <vcpupin vcpu ="1"cpuset ="0,1"/>
    <vcpupin vcpu ="2"cpuset ="2,3"/>
    <vcpupin vcpu ="3"cpuset ="0,4"/>
    <emulatorpin cpuset ="1-3"/>
    <iothreadpin iothread ="1"cpuset ="5,6"/>
    <iothreadpin iothread ="2"cpuset ="7,8"/>
    <shares> 2048 </shares>
    <period> 1000000 </period>
    -1a
    <emulator_period> 1000000 </emulator_period>
    <emulator_quota> -1 </emulator_quota>
    <iothread_period> 1000000 </iothread_period>
    <iothread_quota> -1 </iothread_quota>
    <vcpusched vcpus ='0-4,^ 3'scheduler ='fifo'priority ='1' />
    <iothreadsched iothreads ='2'scheduler ='batch' />
  </cputune>
  ... ...
</domain>

cputune

 可选的`cputune`元素提供有关该域的CPU可调参数的详细信息。 自0.9.0

vcpupin

 可选的`vcpupin`元素指定的主机的物理CPU的域VCPU将被固定到。如果省略,而属性`cpuset`元素`vcpu`没有指定,则vCPU的被钉在默认情况下所有的物理CPU。它包含两个必需的属性,该属性`vcpu` 指定VCPU ID和属性`cpuset`是相同属性`cpuset`元素`vcpu`。(注:只有QEMU驱动支持) 由于0.9.0

emulatorpin

 可选的`emulatorpin`元素指定的主机的物理CPU的"仿真"的,不包括VCPU或iothreads域的一个子集,将被固定到。如果省略,而属性 `cpuset`元素`vcpu`没有指定,"模拟器"被钉在默认情况下,所有的物理CPU。它包含一个必需属性`cpuset`指定物理CPU到引脚。 

iothreadpin

 可选的`iothreadpin`元素指定的主机的物理CPU IOThreads将被固定到。如果省略和属性`cpuset`元素`vcpu`不指定,IOThreads都寄托在默认情况下所有的物理CPU。有两个必需的属性,该属性 `iothread`指定IOThread ID和属性 `cpuset`指定物理CPU到引脚。请参阅`iothreadids` [`description`](http://libvirt.org/formatdomain.html#elementsIOThreadsAllocation) 为有效的`iothread`值。 自1.2.9

shares

 可选`shares`元素指定域的比例加权份额。如果省略,默认为操作系统提供的默认值。NB,没有为价值没有单位,这是基于其他虚拟机的设置相对措施,例如,一个VM值为2048配置将得到两倍的CPU时间,配置价值1024 VM 自0.9.0

period

 可选的`period`元素指定实施间隔(单位:毫秒)。内`period`,该域的每个VCPU将不会被允许消耗比`quota` 值得的运行时间。该值应在[1000,1000000]的范围内。值为0的周期表示没有值。 只有QEMU驱动程序支持自0.9.4起,LXC自0.9.10起

quota

 可选的`quota`元素指定允许的最大带宽(单位:毫秒)。同一个域`quota`的任何负值表示该域具有无限带宽,这意味着它不是带宽控制。该值应在范围[1000,18446744073709551]或小于0.具有值0的配额表示没有值。您可以使用此功能确保所有vcpus以相同的速度运行。 只有QEMU驱动程序支持自0.9.4起,LXC自0.9.10起

emulator_period

 可选的`emulator_period`元素指定实施间隔(单位:毫秒)。内`emulator_period`,域仿真器线程(不包括那些的vCPU)将不会被允许消耗比`emulator_quota`值得的运行时间。该值应在[1000,1000000]的范围内。值为0的周期表示没有值。 只有QEMU驱动程序支持自0.10.0

emulator_quota

 可选的`emulator_quota`元素指定最大允许带宽:域的仿真器线程(单位微秒)(不包括那些的vCPU)。同一个域`emulator_quota`的任何负值表示该域具有用于仿真器线程(那些不包括的vCPU)的,这意味着它不是带宽控制无限带宽。该值应在范围[1000,18446744073709551]或小于0.具有值0的配额表示没有值。 只有QEMU驱动程序支持自0.10.0

iothread_period

 可选的`iothread_period`元素指定实施间隔:为IOThreads(单位微秒)。内 `iothread_period`,该域的每个IOThread将不会被允许消耗比`iothread_quota` 值得的运行时间。该值应在[1000,1000000]的范围内。值为0的iothread_period表示没有值。 只有QEMU驱动程序支持自2.1.0

iothread_quota

 可选的`iothread_quota`元素指定最大允许带宽:为IOThreads(单位微秒)。同一个域 `iothread_quota`的任何负值指示域IOThreads具有无限带宽,这意味着它不是带宽控制。该值应在范围[1000,18446744073709551]或小于0。一个`iothread_quota` 具有0值表示没有的值。您可以使用此功能确保所有IOThread以相同的速度运行。 只有QEMU驱动程序支持自2.1.0

vcpuschediothreadsched

 可选`vcpusched`元素指定调度类型(值`batch`,`idle`,`fifo`, `rr`针对特定的vCPU/IOThread线程)(基于 `vcpus`和`iothreads`,离开了 `vcpus`/ `iothreads`设置默认值)。有效 `vcpus`数值在0至比为域定义的vCPU的数量少了一个开始。有效`iothreads` 的值在被描述`iothreadids` [`description`](http://libvirt.org/formatdomain.html#elementsIOThreadsAllocation)。如果没有`iothreadids`定义,则libvirt的号码IOThreads从1到数`iothreads`可用的域。对于实时调度(`fifo`, `rr`),优先级必须被指定为良好(并且忽略用于非实时的)。优先级的取值范围取决于主机内核(通常为1-99)。 自1.2.13

内存分配

<domain>
  ... ...
  <maxMemory slots='16'unit ='KiB'> 1524288 </maxMemory>
  <memory unit ='KiB'> 524288 </memory>
  <currentMemory unit ='KiB'> 524288 </currentMemory>
  ... ...
</domain>

memory

引导时guest虚拟机的最大内存分配。内存分配包括在启动时指定或以后热插拔的可能的附加内存设备。此值的单位由可选属性决定的`unit`,默认为"昆明植物研究所"(kibibytes,2 10或1024字节的块)。可用的单位有"B"或"字节"为字节,"KB"为千字节(10 3或1000个字节),"K"或"昆明植物研究所"为kibibytes(1024字节),"MB"为兆字节(10 6或100万根字节),"M"或"MIB"为mebibytes(2 20或1,048,576字节),"国标"千兆字节(10 9或1,000,000,000字节),"G"或"吉布"为gibibytes(2 30或1,073,741,824字节) "TB"为兆兆字节(10 12或1,000,000,000,000字节),或"T"或"的TiB"为tebibytes(2 40或1,099,511,627,776字节)。但是,值将通过libvirt舍入到最近的kibibyte,并且可以进一步四舍五入到管理程序支持的粒度。一些管理程序也执行最小值,例如4000KiB。万一[NUMA](http://libvirt.org/formatdomain.html#elementsCPU)配置为客人的 `memory`元件可以省略。在碰撞的情况下,可选属性`dumpCore` 可以用来控制该位存储器是否应该包括在生成的信息转储与否("接通"的值,"关")。 `unit`自0.9.11, `dumpCore`因为0.10.2(QEMU只)

maxMemory

运行时最大内存分配的guest。由任一指定的初始存储器`<memory>`元件或NUMA细胞大小配置可以增加的存储器热插拔由该元素指定的限制。该`unit`属性的行为相同 `<memory>`。所述`slots`属性指定可添加存储器到来宾时隙数。边界是管理程序特定的。注意,由于通过存储器热插拔添加的存储器块的对齐,可能不可能实现由该元素指定的全部大小分配。 自1.2.14以来QEMU驱动程序支持。

currentMemory

客户机的实际内存分配。此值可以小于最大分配,以允许在运行时膨胀guest虚拟机内存。如果省略,则默认为相同的值`memory`元素。该`unit`属性的行为相同`memory`。

内存备份

<domain>
  ... ...
  <memoryBacking>
    <hugepages>
      <page size ="1"unit ="G"nodeset ="0-3,5"/>
      <page size ="2"unit ="M"nodeset ="4"/>
    </hugepages>)
    <nosharepages />
    <locked />
    <source type ="file | anonymous"/>
    <access mode ="shared | private"/>
    <allocation mode ="immediate | ondemand"/>
  </memoryBacking>
  ... ...
</domain>

可选的memoryBacking元素可以包含影响内存页是如何通过虚拟主机页面备份的几个要素。

hugepages

这告诉管理程序guest虚拟机应该使用hugepages而不是正常的本机页大小来分配其内存。 由于1.2.5有可能每个NUMA节点更专门设置大页面。的`page`元件被引入。它有一个强制性的属性`size`指定哪个大页面应该使用(尤其有用扶持不同尺寸的大页面的系统)。为默认的单元 `size`属性是千字节(1024乘数)。如果你想用不同的单位,使用可选的`unit`属性。对于NUMA系统,可选的`nodeset`属性,可能会方便,因为它关系给客人的NUMA节点一定hugepage大小。从示例代码段,除了节点号4之外,每个NUMA节点使用一个千兆字节的hugpage。正确的语法看到 [这个](http://libvirt.org/formatdomain.html#elementsNUMATuning)。

nosharepages

指示管理程序禁用此域的共享页面(内存合并,KSM)。自1.0.6

locked

当由管理程序设置和支持时,属于域的内存页将被锁定在主机的内存中,并且不允许主机将其交换出。对于QEMU/KVM,这需要 `hard_limit` [内存调整](http://libvirt.org/formatdomain.html#elementsMemoryTuning) 要使用,并设置为配置为域加上QEMU的过程本身消耗任何内存的最大存储元件。注意将内存限制设置过高(从而允许域锁定主机的大部分内存)。这样做可能对域和主机本身都是危险的,因为主机的内核可能耗尽内存。自1.0.6

source

在此属性中,您可以切换到文件内存备份或保留默认匿名。

access

指定内存是共享还是专用。这可以通过每个numa节点覆盖`memAccess`

allocation

在分配内存时指定

内存优化

<domain>
  ... ...
  <memtune>
    <hard_limit unit ='G'> 1 </hard_limit>
    <soft_limit unit ='M'> 128 </soft_limit>
    <swap_hard_limit unit ='G'> 2 </swap_hard_limit>
    <min_guarantee unit ='bytes'> 67108864 </min_guarantee>
  </memtune>
  ... ...
</domain>

memtune

可选的`memtune`元素提供有关该域的内存可调参数的详细信息。如果省略,默认为操作系统提供的默认值。对于QEMU/KVM,参数作为一个整体应用于QEMU进程。因此,当对它们进行计数时,需要将QEMU本身的客户RAM,客户视频RAM和一些存储器开销相加。最后一块很难确定,所以一个需要猜测和尝试。对于每一个可调谐,有可能以指定的数量是在对输入其中部,使用相同的值作为为`<memory>`。为了向后兼容,输出始终为KiB。 `unit` 自0.9.11 所有* _limit参数可能的值在0到VIR_DOMAIN_MEMORY_PARAM_UNLIMITED范围。

hard_limit

可选的`hard_limit`元素是最大内存,客人可以使用。该值的单位是千字节(即1024字节的块)。**但是,强烈建议QEMU和KVM的用户不要设置此限制,因为如果猜测太低,域可能被内核杀死。要确定需要一个过程,运行内存是一个 [ 不可判定问题](http://en.wikipedia.org/wiki/Undecidable_problem)。**

soft_limit

可选的`soft_limit`元素是内存限制在内存争来执行。此值的单位为千字节(即1024字节的块)

swap_hard_limit

可选的`swap_hard_limit`元素是最大的内存加上交换,客人可以使用。该值的单位是千字节(即1024字节的块)。这必须超过提供的hard_limit值

min_guarantee

可选的`min_guarantee`元素是客人保证最低内存分配。该值的单位是千字节(即1024字节的块)。此元素仅受VMware ESX和OpenVZ驱动程序支持。

NUMA节点调整

<domain>
  ... ...
  <numatune>
    <memory mode ="strict"nodeset ="1-4,^ 3"/>
    <memnode cellid ="0"mode ="strict"nodeset ="1"/>
    <memnode cellid ="2"mode ="preferred"nodeset ="2"/>
  </numatune>
  ... ...
</domain>

numatune

 可选`numatune`元素提供的详细介绍如何通过控制域的过程NUMA政策调谐NUMA主机的性能。NB,只支持QEMU驱动程序。 自0.9.3

memory

 可选的`memory`元素指定如何为NUMA主机上的过程域分配内存。它包含几个可选属性。属性`mode`可以是"交错","严",或"首选",默认为"严格"。属性 `nodeset`指定NUMA节点,使用相同的语法属性`cpuset`元素`vcpu`。属性 `placement`(自0.9.12)可用于指示域进程的内存放置模式,其值可以是"静态"或"自动",默认`placement`的 `vcpu`,如果,或者"静态" `nodeset`中指定的。"自动"表示域的过程只会从查询返回numad咨询节点集分配内存,以及属性的值 `nodeset`,如果指定的将被忽略。如果`placement`的`vcpu`是'汽车',而 `numatune`没有指定,默认`numatune` 使用`placement`"自动"和`mode`"严"将被隐式添加。 自0.9.3

memnode

 可选`memnode`元素可以指定每个每个来宾NUMA节点的内存分配政策。对于具有不对应的那些节点`memnode`的元素,从元素的默认`memory`将被使用。属性`cellid` 满足了这些应用的设置位NUMA节点。属性`mode`和`nodeset`具有相同的含义和语法中`memory`的元素。此设置与自动展示位置不兼容。 QEMU从1.2.7开始

块I/O优化

<domain>
  ... ...
  <blkiotune>
    <weight> 800 </weight>
    <device>
      <path>/dev/sda </path>
      <weight> 1000 </weight>
    </device>
    <device>
      <path>/dev/sdb </path>
      <weight> 500 </weight>
      <read_bytes_sec> 10000 </read_bytes_sec>
      <write_bytes_sec> 10000 </write_bytes_sec>
      <read_iops_sec> 20000 </read_iops_sec>
      <write_iops_sec> 20000 </write_iops_sec>
    </device>
  </blkiotune>
  ... ...
</domain>

blkiotune

可选的`blkiotune`元素提供的能力,为域调Blkio cgroup中的可调参数。如果省略,默认为操作系统提供的默认值。自0.8.8

weight

可选的`weight`元素是客人的整体I/O的重量。该值应在[100,1000]的范围内。在内核2.6.39之后,该值可以在范围[10,1000]内。

device

域可以有多个`device`因素进一步调整权重由域使用的每个主机块设备。注意,多个[客人磁盘](http://libvirt.org/formatdomain.html#elementsDisks)可以共享一个主机块设备,如果它们被文件的同一主机文件系统中的支持,这就是为什么这种调整参数是在全球域级别而不是每个客人磁盘设备(与此相反的关联在[`<iotune>`](http://libvirt.org/formatdomain.html#elementsDisks) 可应用到单个元素`<disk>`)。每个`device`元件具有两个强制性子元素,`path`描述该装置的绝对路径,并`weight`赋予该装置的相对重量,在范围[100,1000]。在内核2.6.39之后,该值可以在范围[10,1000]内。自0.9.8  

此外,以下可选子元件可用于:

read_bytes_sec

读取吞吐量限制(字节/秒)。 自1.2.2

write_bytes_sec

写吞吐量限制(字节/秒)。 自1.2.2

read_iops_sec

读取每秒I/O操作数限制。 自1.2.2

write_iops_sec

写入I/O操作每秒限制。 自1.2.2

资源分区

管理程序可以允许将虚拟机放置到资源分区中,潜在地具有所述分区的嵌套。所述resource元件组共同的配置资源划分相关。它目前支持的子元素partition,其内容定义资源分区,在其中放置域的绝对路径。如果未列出分区,则域将放置在默认分区中。应用程序/管理员的责任是确保在启动guest虚拟机之前存在分区。默认情况下,仅可以假定(管理程序特定)默认分区存在。

... ...
<resource>
  <partition>/virtualmachines/production </partition>
</resource>
... ...

资源分区目前由QEMU和LXC驱动程序支持,这些驱动程序在所有已安装的控制器中将分区路径映射到cgroups目录。自1.0.5

CPU型号和拓扑

可以使用以下元素集合指定CPU型号,其功能和拓扑的要求。 自0.7.5

... ...
<cpu match ='exact'>
  <model fallback ='allow'> core2duo </model>
  <vendor> Intel </vendor>
  <topology sockets ='1'cores ='2'threads ='1' />
  <feature policy ='disable'name ='lahf_lm' />
</cpu>
... ...

<cpu mode ='host-model'>
  <model fallback ='forbid' />
  <topology sockets ='1'cores ='2'threads ='1' />
</cpu>
... ...

<cpu mode ='host-passthrough'>
  <feature policy ='disable'name ='lahf_lm' />
... ...

如果没有限制对需要CPU型号和它的特性来放,一个简单的cpu可以使用的元素。 自0.7.6

... ...
<cpu>
  <topology sockets ='1'cores ='2'threads ='1' />
</cpu>
... ...

cpu

的`cpu`元件是用于描述位CPU要求的主要容器。它`match`是如何严格指定的属性有提供给客人匹配这些需求的虚拟CPU。由于0.7.6的 `match`属性,如果能省略`topology` 距离的唯一元素`cpu`。可能的值 `match`属性是: 

minimum

指定的CPU型号和功能描述了所需的最低CPU。

exact

提供给guest虚拟机的虚拟CPU将与规范完全匹配

strict

除非主机CPU确实与规范完全匹配,否则不会创建客户机。

由于0.8.5的match 属性可以被忽略,将默认为exact。 由于0.9.10,可选的mode 属性可以用来以使其更易于配置客户CPU是接近主机CPU越好。可能的值 mode属性是:

custom

在这种模式下,`cpu`元素描述应提供给旅客的CPU中。这绝不是当默认 `mode`指定的属性。这种模式使得持久访客将看到相同的硬件,而不管访客是什么主机被引导。

host-model

该`host-model`模式本质上是一个捷径,从功能XML复制主机CPU定义成域XML。由于CPU定义是在启动域之前复制的,所以在不同主机上可以使用完全相同的XML,同时仍然提供每个主机支持的最佳客户机CPU。的 `match`属性不能在这个模式下使用。指定的CPU模式也不支持,但`model`的 `fallback`仍然可以使用的属性。使用 `feature`的元素,特定的标志可经启用或特异性除了主机模型禁用。这可以用于微调可以被仿真的特征。 (自1.1.1) 。Libvirt不会对每个CPU的每个方面进行建模,因此客户机CPU与主机CPU不完全匹配。另一方面,提供给客户的ABI是可再现的。在迁移期间,完整的CPU模型定义传输到目标主机,因此迁移的客户机将看到完全相同的CPU模型,即使目标主机包含更多可用的CPU用于客户机的运行实例; 但是关闭和重新启动客户端可以根据新主机的能力向客户端呈现不同的硬件。**当心**,由于道路libvirt的检测主机的CPU和由于这一事实,创建CPU的型号,使用创建CPU配置libvirt的时候不说话QEMU/KVM `host-model`可能无法按预期工作。客户机CPU可能与配置不同,并且也可能通过使用CPU功能和其他不起作用的参数(例如CPUID级别)的组合来混淆客户机操作系统。在这些问题都是固定的,这是一个好主意,以避免使用`host-model`和使用 `custom`模式刚刚从主机功能XML CPU型号。 (自1.2.11) 。PowerISA允许处理器以支持旧版本ISA的二进制兼容模式运行VM。对PowerPC架构libvirt的使用 `host-model`来表示二进制兼容模式来宾模式运行的CPU。示例:当用户需要power7 VM在Power8主机上以兼容模式运行时,可以使用XML来描述,如下所示: 

<cpu mode ='host-model'>
  <model> power7 </model>
</cpu>
... ...

host-passthrough

使用此模式,客户端可见的CPU应该与主机CPU完全相同,即使在libvirt不理解的方面。虽然这种模式的缺点是客户环境不能在不同的硬件上重现。因此,如果你碰到任何错误,你是自己的。该CPU的进一步的细节可以使用被改变`feature`的元件。如果源主机和目标主机在硬件和配置上都不相同,则使用主机通过迁移客户机很危险。如果尝试进行此类迁移,则客户机可能在目标主机上恢复执行时挂起或崩溃。

在这两个host-modelhost-passthrough 模式,真正的(近似于host- passthrough模式),这将当前主机上使用的CPU定义可以通过指定确定VIR_DOMAIN_XML_UPDATE_CPU调用时标志 virDomainGetXMLDescAPI。当运行一个guest虚拟机时使用不同的硬件介绍,并会在主机之间进行迁移具有不同的功能,可能容易受到操作系统的激活,您可以使用此输出重写XML的 custom模式,更强大的迁移。

model

该内容`model`元素指定由客人要求的CPU型号。可用的CPU型号及其定义的列表中可以找到`cpu_map.xml`安装在libvirt的数据目录下的文件。如果虚拟机管理程序无法使用确切的CPU模型,libvirt会自动恢复到由虚拟机管理程序支持的最接近的型号,同时保留CPU功能列表。由于0.9.10,可选的 `fallback`属性可以用来禁止这一行为,在这种情况下,试图启动域请求不支持的CPU型号将失败。为支持的值`fallback` 属性是:`allow`(这是默认),和 `forbid`。可选的`vendor_id`属性(自0.10.0)可以用来设置由客人看到供应商ID。它必须正好是12个字符长。如果未设置,则使用主机的供应商标识。典型的可能值是"AuthenticAMD"和"GenuineIntel"。

vendor

由于0.8.3中的内容 `vendor`元素指定由客人要求的CPU供应商。如果缺少此元素,则客户机可以在匹配给定功能的CPU上运行,而不管其供应商如何。支持的供应商列表中可以找到`cpu_map.xml`。

topology

该`topology`元素指定要求提供给客户虚拟CPU的拓扑结构。三个非零值必须被给予`sockets`,`cores`和 `threads`:CPU插座,分别每插槽的内核的数量,并且每个核心的线程数的总数。

feature

该`cpu`元素可以包含零个或多个 `elements`由所选择的CPU型号提供习惯于微调功能。已知功能名称的列表可以在与CPU型号相同的文件中找到。每个的含义`feature` 元件取决于其`policy`属性,它必须被设置为以下值之一: 

force

虚拟CPU将声明该功能是受支持的,而不管主机CPU是否支持。

require

访客创建将失败,除非主机CPU支持该功能。

optional

当且仅当虚拟CPU支持主机CPU时,该功能将被支持。

disable

虚拟CPU不支持此功能。

forbid

如果主机CPU支持此功能,则guest虚拟机创建将失败。

由于0.8.5的policy 属性可以被忽略,将默认为require

客户NUMA拓扑可以使用指定numa的元素。 自0.9.8

... ...
<cpu>
  ... ...
  <numa>
    <cell id ='0'cpus ='0-3'memory ='512000'unit ='KiB' />
    <cell id ='1'cpus ='4-7'memory ='512000'unit ='KiB'memAccess ='shared' />
  </numa>
  ... ...
</cpu>
... ...

每个cell元素指定一个NUMA细胞或NUMA节点。 cpus指定作为节点一部分的CPU或CPU范围。memory以千字节(即1024字节的块)指定节点内存。 因为1.2.11人们可以使用一个附加的unit属性来定义单元,其中memory被指定。 因为1.2.7所有单元应该具有id的情况下,属性指的是某些细胞是必要的代码,否则将细胞分配id在递增的顺序从0混合细胞有和没有启S id属性不推荐,因为它可能导致不需要的行为。 由于1.2.9可选属性 memAccess可以控制内存是否被映射为"共享"或"专用"。这仅适用于支持hugepages的内存。

此客户NUMA规范目前仅适用于QEMU/KVM。

活动配置

有时需要覆盖对各种事件执行的默认操作。并非所有虚拟机管理程序都支持所有事件和操作。该动作可作为呼叫的结果libvirt的API的 , 或 。使用或也将触发事件。 virDomainReboot virDomainShutdown virDomainShutdownFlags virsh reboot``virsh shutdown

... ...
<on_poweroff> destroy </on_poweroff>
<on_reboot> restart </on_reboot>
<on_crash>restart</on_crash>
<on_lockfailure> poweroff </on_lockfailure>
... ...

以下元素集合允许在客户操作系统触发生命周期操作时指定操作。常见的用例是强制重新启动在初始操作系统安装时被视为关机。这允许为第一个安装后启动重新配置VM。

on_poweroff

此元素的内容指定客户机请求关闭时执行的操作。

on_reboot

此元素的内容指定客户机请求重新引导时要执行的操作。

on_crash

此元素的内容指定客户端崩溃时要执行的操作。

这些状态中的每一个允许相同的四个可能的动作。

destroy

域将完全终止,所有资源释放。

restart

域将被终止,然后使用相同的配置重新启动。

preserve

域将被终止,其资源保留以允许分析。

rename-restart

域将被终止,然后用新名称重新启动。

QEMU/KVM支持on_poweroffon_reboot 处理事件destroyrestart动作。的preserve一个动作on_reboot事件被视为destroyrename- restart 一个动作on_poweroff事件被视为一个 restart事件。

on_crash活动支持这些额外的行动,因为0.8.4。

coredump-destroy

崩溃的域的核心将被转储,然后域将被完全终止和所有资源释放

coredump-restart

崩溃的域的核心将被转储,然后域将使用相同的配置重新启动

所述on_lockfailure(元件,因为1.0.0)可以被用于配置,当锁管理失去资源锁应采取什么行动。libvirt可以识别以下操作,虽然并非所有锁都需要单独的锁管理器支持。如果未指定任何操作,则每个锁管理器将采用其默认操作。

poweroff

域将被强制关闭。

restart

域将被关闭并再次启动以重新获取其锁。

pause

域将暂停,以便在解决锁定问题时可以手动恢复。

ignore

保持域运行,好像没有发生。

电源管理

自0.10.2能够强制地启用或禁用的BIOS广告给来宾OS。(注:只有qemu驱动程序支持)

... ...
<pm>
  <suspend-to-disk enabled ='no' />
  <suspend-to-mem enabled ='yes' />
</pm>
... ...

pm

这些元素对S3(挂起到内存)和S4(挂起到磁盘)ACPI睡眠状态启用('yes')或禁用('no')BIOS支持。如果未指定任何内容,则虚拟机管理程序将保留其默认值。

虚拟机管理程序的功能

管理程序可以允许打开/关闭某些CPU /机器特征。

... ...
<features>
  <pae />
  <acpi />
  <apic />
  <hap>
  <privnet />
  <hyperv>
    <relaxed state ='on' />
    <vapic state ='on' />
    <spinlocks state ='on'retries ='4096' />
    <vpindex state ='on' />
    <runtime state ='on' />
    <synic state ='on' />
    <reset state ='on' />
    <vendor_id state ='on'value ='KVM Hv' />
  </hyperv>
  <kvm>
    <hidden state ="on"/>
  </kvm>
  <pvspinlock state ='on' />
  <gic version ='2' />

</features>
... ...

所有的功能都在中列出的features 元素,省略了togglable功能标签将其关闭。可用的功能可以通过询问的发现能力,XML领域的能力XML,但是对于完全虚拟化领域一组通用的有:

pae

物理地址扩展模式允许32位客户端寻址超过4 GB的内存。

acpi

ACPI对于电源管理非常有用,例如,使用KVM guest虚拟机,正常关机才能正常工作。 

apic

APIC允许使用可编程IRQ管理。由于0.10.2(QEMU只)有一个可选的属性`eoi`与价值`on` 以及`off`其EOI切换为客人可用性(中断结束)。 

hap

根据不同的`state`属性(值`on`, `off`)启用或禁用使用硬件辅助分页。默认值是`on`,如果虚拟机管理程序检测到硬件辅助寻呼的可用性。 

viridian

启用Viridian管理程序扩展以对客户机操作系统进行半虚拟化 

privnet

始终创建专用网络命名空间。如果定义了任何接口设备,则会自动设置。此功能仅与基于容器的虚拟化驱动程序(如LXC)相关。 

hyperv

启用各种功能以提高运行Microsoft Windows的客户端的行为。 
特征 描述 最低支持
relaxed 放松对计时器的约束 开关 1.0.0(QEMU 2.0)
vapic 启用虚拟APIC 开关 1.1.0(QEMU 2.0)
spinlocks 启用螺旋锁支持 开关; 重试 - 至少4095 1.1.0(QEMU 2.0)
vpindex 虚拟处理器索引 开关 1.3.3(QEMU 2.5)
runtime 处理器花费在运行客户代码和代表客户代码上的时间 开关 1.3.3(QEMU 2.5)
synic 启用合成中断控制器(SyNIC) 开关 1.3.3(QEMU 2.6)
stimer 启用S​​yNIC定时器 开关 1.3.3(QEMU 2.6)
reset 启用管理程序复位 开关 1.3.3(QEMU 2.5)
vendor_id 设置管理程序供应商ID 开关; value - 字符串,最多12个字符 1.3.3(QEMU 2.5)

pvspinlock

通知guest虚拟机主机支持半虚拟自旋锁,例如通过暴露pvticketlocks机制。此功能可以通过使用显式禁用`state='off'` 属性。 

kvm

各种功能改变KVM管理程序的行为。 
特征 描述 最低支持
hidden 从基于标准MSR的发现隐藏KVM管理程序 开关 1.2.8(QEMU 2.1.0)

pmu

根据不同的`state`属性(值`on`, `off`,默认`on`)启用或禁用性能监控单元的客人。 自1.2.12

vmport

根据不同的`state`属性(值`on`, `off`,默认`on`)启用或禁用VMware IO口的仿真,vmmouse等 自1.2.16

gic

启用架构使用通用中断控制器而不是APIC为了处理中断。例如,'aarch64'架构采用 `gic`代替`apic`。可选属性`version`指定了GIC版本; 然而,它可能不被所有管理程序支持。可接受的值是`2`,`3`和`host`。 自1.2.16

smm

启用系统管理模式。可能的值是 `on`和`off`。默认值为管理程序决定。 自2.1.0

计时

客户机时钟通常从主机时钟初始化。大多数操作系统都希望硬件时钟保持UTC,这是默认值。然而,Windows希望它在所谓的"本地时间"。

... ...
<clock offset ='localtime'>
  <timer name ='rtc'tickpolicy ='catchup'track ='guest'>
    <catchup threshold ='123'slew ='120'limit ='10000' />
  </timer>
  <timer name ='pit'tickpolicy ='delay' />
</clock>
... ...

clock

offset属性有四个可能的值,允许在来宾时钟是如何同步到主机的细粒度控制。注意,并非所有虚拟机管理程序都支持所有模式。

utc

 在启动时,客户机时钟将始终与UTC同步。 因为0.9.11 "UTC"模式可被转换为"可变"模式,这可以通过使用可控制 `adjustment`的属性。如果值为"reset",则不会进行转换(并非所有管理程序都可以在每次启动时同步UTC);使用"reset"会导致这些管理程序出错。数值强制转换为"可变"模式,使用该值作为初始调整。默认`adjustment`是管理程序特定的。 

localtime

 在启动时,来宾时钟将与主机配置的时区同步(如果有)。 自0.9.11,该`adjustment` 属性的行为无异于"UTC"模式。 

timezone

 来宾时钟将同步使用要求的时区`timezone`属性。 自0.7.7

variable

 来宾时钟将具有任意的偏移量施加相对UTC或本地时间,这取决于`basis` 属性。相对于UTC(或本地时间)三角洲以秒为单位,使用`adjustment`属性。客人可以随时调整RTC,并期望在下次重新启动时可以使用它。这与'utc'和'localtime'模式(可选属性调整='重置')相反,其中RTC调整在每次重新启动时丢失。由于0.7.7  自0.9.11的`basis` 属性可以是"UTC"(默认)或"本地时间"。 

一个clock可以具有零或更多 timer的子元素。自0.8.0

timer

每个定时器元素需要name属性,并且具有依赖于其它的可选属性name指定。各种管理程序支持不同的属性组合。

name

 的`name`属性选择哪个计时器正在被修改,并且可以是"平台"(目前不支持)",HPET"(libxl,xen的以及qemu),"kvmclock"(QEMU),"坑"(QEMU),"RTC"之一(QEMU),"TSC"(libxl)或"hypervclock"(QEMU - 自从1.2.2)。该`hypervclock`定时器增加了对基准时间计数器及资讯科技服务功能的参考页为运行微软Windows操作系统的客人支持。 

track

 该`track`属性指定了计时器的轨道,并且可以"启动","客户"或"墙"。只有有效`name="rtc"` 或`name="platform"`。 

tickpolicy

tickpolicy属性决定当QEMU错过了最后期限注入剔客人发生了什么:

delay

继续按正常速率交付蜱。客人的时间将延迟,由于晚点

catchup

以更高的速度交付蜱以赶上错过的蜱。一旦完成,客户时间不应延迟。

merge

将错过的刻度合并成一个刻度并注入。客户时间可能被延迟,这取决于操作系统如何对tick的合并做出反应

discard

丢弃错过的滴答,并继续正常进行未来的注射。客户时间可能会延迟,除非操作系统明确处理丢失的滴答

如果政策是"追赶",就不可能有进一步的细节catchup子元素。

catchup

 该`catchup`元素有三个可选的属性,每一个正整数。属性是`threshold`,`slew`和`limit`。 

请注意,管理程序不需要支持跨所有时间源的所有策略

frequency

 该`frequency`属性是一个无符号整数,指定的频率`name="tsc"`运行。 

mode

 该`mode`属性控制如何`name="tsc"`定时器管理,并且可以"自动","本土化","模仿","了paravirt"或"smpsafe"。其他计时器总是模拟。 

present

 该`present`属性可以是"是"或"否"来指定一个特定的定时器是否提供给客人。 

性能监视事件

一些平台允许监视虚拟机的性能和在内部执行的代码。为了使性能监视事件,你可以指定它们的perf元素或通过使他们virDomainSetPerfEvents的API。然后使用virConnectGetAllDomainStats API检索性能值。 自2.0.0

... ...
<perf>
  <event name ='cmt'enabled ='yes' />
  <event name ='mbmt'enabled ='no' />
  <event name ='mbml'enabled ='yes' />
  <event name ='cpu_cycles'enabled ='no' />
  <event name ='instructions'enabled ='yes' />
  <event name ='cache_references'enabled ='no' />
  <event name ='cache_misses'enabled ='no' />
  <event name ='branch_instructions'enabled ='no' />
  <event name ='branch_misses'enabled ='no' />
  <event name ='bus_cycles'enabled ='no' />
  <event name ='stalled_cycles_frontend'enabled ='no' />
  <event name ='stalled_cycles_backend'enabled ='no' />
  <event name ='ref_cpu_cycles'enabled ='no' />
</perf>
... ...
事件名称 描述 stats参数名称
cmt 在平台上运行的应用程序使用l3缓存的字节数 perf.cmt
mbmt 来自一级缓存的总系统带宽 perf.mbmt
mbml 存储器控制器的存储器流量的带宽 perf.mbml
cpu_cycles cpu周期的计数(总/已过) perf.cpu_cycles
instructions 由在平台上运行的应用程序的指令的计数 perf.instructions
cache_references 由在平台上运行的应用程序的高速缓存命中的计数 perf.cache_references
cache_misses 在平台上运行的应用程序的高速缓存未命中的计数 perf.cache_misses
branch_instructions 由在平台上运行的应用程序的分支指令的计数 perf.branch_instructions
branch_misses 在平台上运行的应用程序的分支未命中的计数 perf.branch_misses
bus_cycles 由在平台上运行的应用程序的总线周期的计数 perf.bus_cycles
stalled_cycles_frontend 在平台上运行的应用程序在指令处理器流水线的前端中停止的cpu周期的计数 perf.stalled_cycles_frontend
stalled_cycles_backend 在平台上运行的应用程序在指令处理器流水线的后端中停止的CPU周期的计数 perf.stalled_cycles_backend
ref_cpu_cycles 总cpu周期的计数不受由在平台上运行的应用程序的CPU频率调整的影响 perf.ref_cpu_cycles

设备

最后一组XML元素都用于描述提供给来宾域的设备。所有设备发生为主要的子devices元素。 自0.1.3

... ...
<devices>
  <emulator>/usr/lib/xen/bin/qemu-dm </emulator>
</device>
... ...

emulator

 在内容`emulator`元素中指定的设备模型仿真器二进制文件的完全限定路径。该[功能XML](http://libvirt.org/formatcaps.html)指定推荐的默认仿真器用于每个特定域类型/结构组合。 

硬盘驱动器,软盘,光驱

看起来像一个磁盘的任何设备,无论是软盘,硬盘,光盘,或半虚拟化驱动程序是通过指定的disk 元素。

... ...
<devices>
  <disk type ='file'snapshot ='external'>
    <driver name ="tap"type ="aio"cache ="default"/>
    <source file ='/ var/lib/xen/images/fv0'startupPolicy ='optional'>
      <seclabel relabel ='no' />
    </source>
    <target dev ='hda'bus ='ide' />
    <iotune>
      <total_bytes_sec> 10000000 </total_bytes_sec>
      <read_iops_sec> 400000 </read_iops_sec>
      <write_iops_sec> 100000 </write_iops_sec>
    </iotune>
    <boot order ='2' />
    <encrypt type ='...'>
      ... ...
    </encryption>
    <shareable />
    <serial>
      ... ...
    </serial>
  </disk>
    ... ...
  <disk type ='network'>
    <driver name ="qemu"type ="raw"io ="threads"ioeventfd ="on"event_idx ="off"/>
    <source protocol ="sheepdog"name ="image_name">
      <host name ="hostname"port ="7000"/>
    </source>
    <target dev ="hdb"bus ="ide"/>
    <boot order ='1' />
    <transient />
    <address type ='drive'controller ='0'bus ='1'unit ='0' />
  </disk>
  <disk type ='network'>
    <driver name ="qemu"type ="raw"/>
    <source protocol ="rbd"name ="image_name2">
      <host name ="hostname"port ="7000"/>
      <snapshot name ="snapname"/>
      <config file ="/ path/to/file"/>
    </source>
    <target dev ="hdc"bus ="ide"/>
    <auth username ='myuser'>
      <secret type ='ceph'usage ='mypassid' />
    </auth>
  </disk>
  <disk type ='block'device ='cdrom'>
    <driver name ='qemu'type ='raw' />
    <target dev ='hdd'bus ='ide'tray ='open' />
    <readonly />
  </disk>
  <disk type ='network'device ='cdrom'>
    <driver name ='qemu'type ='raw' />
    <source protocol ="http"name ="url_path">
      <host name ="hostname"port ="80"/>
    </source>
    <target dev ='hde'bus ='ide'tray ='open' />
    <readonly />
  </disk>
  <disk type ='network'device ='cdrom'>
    <driver name ='qemu'type ='raw' />
    <source protocol ="https"name ="url_path">
      <host name ="hostname"port ="443"/>
    </source>
    <target dev ='hdf'bus ='ide'tray ='open' />
    <readonly />
  </disk>
  <disk type ='network'device ='cdrom'>
    <driver name ='qemu'type ='raw' />
    <source protocol ="ftp"name ="url_path">
      <host name ="hostname"port ="21"/>
    </source>
    <target dev ='hdg'bus ='ide'tray ='open' />
    <readonly />
  </disk>
  <disk type ='network'device ='cdrom'>
    <driver name ='qemu'type ='raw' />
    <source protocol ="ftps"name ="url_path">
      <host name ="hostname"port ="990"/>
    </source>
    <target dev ='hdh'bus ='ide'tray ='open' />
    <readonly />
  </disk>
  <disk type ='network'device ='cdrom'>
    <driver name ='qemu'type ='raw' />
    <source protocol ="tftp"name ="url_path">
      <host name ="hostname"port ="69"/>
    </source>
    <target dev ='hdi'bus ='ide'tray ='open' />
    <readonly />
  </disk>
  <disk type ='block'device ='lun'>
    <driver name ='qemu'type ='raw' />
    <source dev ='/ dev/sda' />
    <target dev ='sda'bus ='scsi' />
    <address type ='drive'controller ='0'bus ='0'target ='3'unit ='0' />
  </disk>
  <disk type ='block'device ='disk'>
    <driver name ='qemu'type ='raw' />
    <source dev ='/ dev/sda' />
    <geometry cyls ='16383'heads='16'secs='63'trans ='lba' />
    <blockio logical_block_size ='512'physical_block_size ='4096' />
    <target dev ='hdj'bus ='ide' />
  </disk>
  <disk type ='volume'device ='disk'>
    <driver name ='qemu'type ='raw' />
    <source pool ='blk-pool0'volume ='blk-pool0-vol0' />
    <target dev ='hdk'bus ='ide' />
  </disk>
  <disk type ='network'device ='disk'>
    <driver name ='qemu'type ='raw' />
    <source protocol ='iscsi'name ='iqn.2013-07.com.example:iscsi-nopool/2'>
      <host name ='example.com'port ='3260' />
    </source>
    <auth username ='myuser'>
      <secret type ='iscsi'usage ='libvirtiscsi' />
    </auth>
    <target dev ='vda'bus ='virtio' />
  </disk>
  <disk type ='network'device ='lun'>
    <driver name ='qemu'type ='raw' />
    <source protocol ='iscsi'name ='iqn.2013-07.com.example:iscsi-nopool/1'>
      <host name ='example.com'port ='3260' />
    </source>
    <auth username ='myuser'>
      <secret type ='iscsi'usage ='libvirtiscsi' />
    </auth>
    <target dev ='sdb'bus ='scsi' />
  </disk>
  <disk type ='volume'device ='disk'>
    <driver name ='qemu'type ='raw' />
    <source pool ='iscsi-pool'volume ='unit:0:0:1'mode ='host' />
    <auth username ='myuser'>
      <secret type ='iscsi'usage ='libvirtiscsi' />
    </auth>
    <target dev ='vdb'bus ='virtio' />
  </disk>
  <disk type ='volume'device ='disk'>
    <driver name ='qemu'type ='raw' />
    <source pool ='iscsi-pool'volume ='unit:0:0:2'mode ='direct' />
    <auth username ='myuser'>
      <secret type ='iscsi'usage ='libvirtiscsi' />
    </auth>
    <target dev ='vdc'bus ='virtio' />
  </disk>
  <disk type ='file'device ='disk'>
    <driver name ='qemu'type ='qcow2' />
    <source file ='/ var/lib/libvirt/images/domain.qcow' />
    <backingStore type ='file'>
      <format type ='qcow2' />
      <source file ='/ var/lib/libvirt/images/snapshot.qcow' />
      <backingStore type ='block'>
        <format type ='raw' />
        <source dev ='/ dev/mapper/base' />
        <backingStore />
      </backingStore>
    </backingStore>
    <target dev ='vdd'bus ='virtio' />
  </disk>
</device>
... ...

disk

的`disk`元件是用于说明磁盘主容器和支持以下属性: 

type

 有效值是"file","block","dir"(自0.7.5),"network"(自0.8.7),或者"volume"(自1.0.5),并指底层源磁盘。 自0.0.3

device

 指示磁盘如何暴露给客户机操作系统。此属性的可能值为"floppy","disk","cdrom"和"lun",默认为"disk"。 

使用"纶"(自0.9.10)才有效,当type为"块"或"网络" protocol='iscsi',或当type 使用iSCSI源时,为"卷" poolmode"主",或作为一个 NPIV 的虚拟主机总线适配器(vHBA )使用光纤通道存储池。以这种方式配置,LUN的行为与"磁盘"相同,除了来自客户机的通用SCSI命令被接受并传递到物理设备。还要注意,device ='lun'只能被识别为实际的原始设备,但从不为单个分区或LVM分区识别(在这些情况下,内核将拒绝通用SCSI命令,使其与device ='disk'相同)。 自0.1.4

rawio

 指示磁盘是否需要rawio功能。有效设置为"yes"或"no"(默认为"no")。如果域中的任何一个磁盘具有rawio ='yes',将为域中的所有磁盘启用rawio功能(因为在QEMU的情况下,此功能只能在每个进程的基础上设置)。此属性仅在设备为"lun"时有效。NB,`rawio`打算限制每个设备,然而,目前的QEMU实现提供您所访问的过程比更广泛的能力的能力(每个进程的基础上,将影响所有域磁盘)。到限制的能力尽可能为QEMU驱动程序作为该阶段,`sgio`建议,它比更安全`rawio`。 自0.9.10

sgio

 如果由管理程序和操作系统支持,则指示是否为磁盘过滤非特权SG_IO命令。有效设置为"filtered"或"unfiltered",其中默认为"过滤"。仅当在`device`为"lun"。 自1.0.2

snapshot

 表示磁盘在磁盘快照期间的默认行为:"internal"需要文件格式,例如qcow2,可以存储快照和自快照以来的数据更改; "external"将快照与实时数据分离; 和"no"表示磁盘不会参与快照。只读磁盘默认为"否",而其他磁盘的默认值取决于管理程序的功能。有些管理程序允许每个快照选择,以及,中 [域创建快照](http://libvirt.org/formatsnapshot.html)。不支持所有快照模式; 例如, `snapshot='yes'`与瞬态磁盘通常没有意义。 自0.9.5

source

磁盘的表示`source`取决于磁盘`type`的属性值,如下所示: 

file

 该`file`属性指定文件抱着磁盘完全合格的路径。 自0.0.3

block

 该`dev`属性指定完全合格的路径到主机设备作为磁盘。 自0.0.3

dir

 该`dir`属性指定完全限定路径的目录中盘使用。 自0.7.5

network

 所述`protocol`属性指定了协议来访问所请求的图像。可能的值为"nbd","iscsi","rbd","sheepdog"或"gluster"。如果 `protocol`属性是"RBD","牧羊犬"或"Gluster的"附加属性`name`是强制性的指定音量/图像将被使用的。对于"NBD",该`name`属性是可选的。对于"iSCSI的"(自1.0.4),该`name` 属性可以包括逻辑单元号,用斜线(例如,从目标的名字分开 `iqn.2013-07.com.example:iscsi-pool/1`)。如果未指定,则默认LUN为零。 自0.8.7

volume

 基础磁盘源是由属性来表示 `pool`和`volume`。属性 `pool`指定的名称 [存储池](http://libvirt.org/formatstorage.html)所在的盘源位于(由libvirt的管理)。属性 `volume`指定用作磁盘源存储卷(由libvirt的管理)的名称。该值 `volume`的属性将是从的"名称"列的输出`virsh vol-list [pool-name]`命令。 

使用的属性mode (因为1.1.1)来指示如何表示LUN作为磁盘源。有效值为"direct"和"host"。如果mode没有指定,默认使用的"主机"。使用"直接"的mode值表示要使用的存储池的 source元素host属性作为盘源产生libiscsi URI(例如,"文件= iSCSI的://示例.com:3260 / iqn.2013-07.com.example:iSCSI的-pool/1')。使用"主机"的mode值表示,因为它显示了在主机上(例如"文件=的/ dev /磁盘/按路径/ ip-example.com使用LUN的路径:3260-iscsi-iqn.2013-07.com .example:iscsi- pool-lun-1')。从iSCSI源池使用LUN可以提供相同的功能,为disk使用配置的 type'块'或'网络'和device '伦'相对于该LUN是如何呈现,并可由客人使用。 自1.0.5

随着"文件","块"和"量",一个或多个可选的子元素seclabel描述如下(和自0.9.9),可用于覆盖只是源文件域安全标签策略。(NB,对于"卷"类型的磁盘,seclabel 才有效,当指定的存储卷是'文件'或'块'类型)。

source元素可以包含以下子元素:

host

当盘type是"网络",则source 可以具有零个或多个host用于指定主机连接子元件。该host元素支持4个属性,即 "name","port","transport"和"socket",它们分别指定主机名,端口号,传输类型和到套接字的路径。此元素的含义和元素的数量取决于协议属性。

协议 含义 主机数 默认端口
nbd 运行nbd-server的服务器 只有一个 10809
iscsi iSCSI服务器 只有一个 3260
rbd 监视RBD的服务器 一个或多个 librados默认值
护羊狗 其中一个sheepdog服务器(默认是localhost:7000) 零或一 7000
胶水 一个运行glusterd守护进程的服务器 一个或多个(自2.1.0),只有一个前,要 24007

gluster支持"tcp","rdma","unix"作为传输属性的有效值。nbd支持"tcp"和"unix"。其他只支持"tcp"。如果未指定任何内容,则假定为"tcp"。如果传输是"unix",则socket属性指定AF_UNIX套接字的路径。

snapshot

 该`name`属性`snapshot`元素可以选择指定内部快照名称被用作源的存储协议。支持的"RBD" ,因为1.2.11(仅QEMU)。

config

 在`file`该属性`config`的元素提供了一个配置文件的完全限定路径作为参数传递给网络存储协议的客户提供。支持的"RBD" ,因为1.2.11(仅QEMU)。

为一个"文件"或"卷"磁盘类型表示一个CDROM或软盘(的device属性),它可以定义策略做什么与磁盘如果源文件不可访问。(NB,startupPolicy不适用于"卷"的磁盘,除非指定的存储卷为"文件"类型)。这是通过完成 startupPolicy属性(因为0.9.7),接受这些值:

强制性 失败如果由于任何原因(默认)
必要 失败如果在启动时缺失,如果在迁移/恢复/恢复时丢失,则丢弃
可选的 如果在任何开始尝试丢失

由于1.1.2的startupPolicy 扩展支持,除了光盘和软盘硬盘。在客户机冷启动时,如果某个磁盘不可访问或其磁盘链已损坏,则使用startupPolicy'optional',guest虚拟机将删除此磁盘。此功能不支持当前迁移。

backingStore

 该元素描述由兄弟指定的磁盘使用的后备存储`source`元素。目前它被忽略输入和仅用于输出来形容运行域的检测后盾链,因为1.2.4(虽然libvirt的未来版本可能会开始对输入受理链,或离线域的输出信息)。空`backingStore`元素是指同级源是自包含的,而不是基于任何后备存储。为了使支持链信息准确,必须在链的每个文件的元数据中正确指定支持格式(由libvirt创建的文件满足此属性,但是使用现有的外部文件进行快照或块复制操作需要最终用户预先 - 正确创建文件)。下面的属性支持`backingStore`: 

type

 该`type`属性表示由后备存储用于光盘的类型,参见上面的更多细节和可能的值磁盘类型属性。 

index

 此属性仅在输出有效(和忽略输入),它可以用来做块操作(诸如经由时参考磁盘链的特定部分 `virDomainBlockRebase`的API)。例如, `vda[2]`指的是后备存储与 `index='2'`与盘的`vda`目标。 

此外,backingStore支持以下子元素:

format

 该`format`元素包含`type` 属性,指定后备存储器,如内部格式`raw`或`qcow2`。 

source

 该元素具有相同的结构的`source` 在元件`disk`。它指定哪个文件,设备或网络位置包含所描述的后备存储的数据。 

backingStore

 如果后备存储不是自包含的,在链中的下一个元素被嵌套描述`backingStore` 元素。 

mirror

 此元素存在,如果管理程序已经开始了长期运行的块作业操作,其中在所述反射镜的位置`source`的子元件将最终具有相同的内容作为源,并与在子元素中的文件格式`format`(这可能不同从源的格式)。的细节`source` 的子元件是由确定`type`的反射镜,类似于为整体做的属性`disk`器件元件。在`job` 属性中提到的API开始操作("复制"的`virDomainBlockRebase`API,或"主动提交"为`virDomainBlockCommit` API),因为1.2.7。的属性`ready`,如果存在的话,跟踪工作进展:`yes`如果磁盘是已知的准备枢转,或者,因为1.2.7,`abort`或者`pivot`如果作业是在完成的过程。如果`ready`不存在,磁盘可能仍然复制。现在,这个元素只在输出中有效; 它在输入时被忽略。该`source`子元素存在于所有两个阶段的工作,因为1.2.6。年长的libvirt仅支持块复制到文件中,因为0.9.12 ; 与客户端的兼容性,这样的工作包括在属性冗余信息`file` ,并`format`在`mirror`元素。 

target

的`target`元件控制总线/设备在其下盘暴露在来宾OS。该`dev`属性指示"逻辑"设备名称。指定的实际设备名称不能保证映射到客户机操作系统中的设备名称。将其视为设备订购提示。可选的`bus` 属性指定的磁盘设备模拟的类型; 可能的值是驱动具体,具有典型的值是"IDE""SCSI"",已将virtio","xen的","USB","SATA"或"SD" "SD"自1.1.2。如果省略,则从设备名称的样式推断总线类型(例如,通常使用SCSI总线输出命名为"sda"的设备)。可选属性`tray`指示可移动磁盘(如CD-ROM或软盘),该值可以是"打开"或"关闭",默认为"关闭"的托盘状态。NB,的值 `tray`的域运行时可能已被更新。可选属性`removable`设置为U盘可移动的标志,其值可以是"开"或"关",默认为"关"。自0.0.3; `bus`属性自0.4.3; `tray`属性自0.9.11; "usb"属性值自0.4.4以后; "sata"属性值自0.9.7; "可移除"属性值自1.1.3

iotune

可选的`iotune`元素提供了提供额外的每个设备的I/O优化,与可以为每个设备(此相反的是变化值的功能[`<blkiotune>`](http://libvirt.org/formatdomain.html#elementsBlockTuning) 元素,它在全球范围适用于域)。目前,唯一可用的调整是块I/O控制qemu。这个元素有可选的子元素; 未指定或给定值为0的任何子元素意味着没有限制。 自0.9.8

total_bytes_sec

可选的`total_bytes_sec`元素是每秒字节数为总吞吐量的限制。此不能出现与`read_bytes_sec` 或`write_bytes_sec`。

read_bytes_sec

可选的`read_bytes_sec`元素是每秒字节数为读取吞吐量的限制。

write_bytes_sec

可选的`write_bytes_sec`元素是每秒字节数为写吞吐量的限制。

total_iops_sec

可选的`total_iops_sec`元素是总每秒I/O操作。此不能出现与`read_iops_sec` 或`write_iops_sec`。

read_iops_sec

可选`read_iops_sec`元件是读每秒I/O操作。

write_iops_sec

可选`write_iops_sec`元素是写每秒I/O操作。

total_bytes_sec_max

可选`total_bytes_sec_max`元件是以每秒字节数的最大总吞吐量限制。此不能出现与`read_bytes_sec_max` 或`write_bytes_sec_max`。

read_bytes_sec_max

可选的`read_bytes_sec_max`元素是字节每秒的最大读取吞吐量限制。

write_bytes_sec_max

可选的`write_bytes_sec_max`元素是字节每秒最高写入吞吐量限制。

total_iops_sec_max

可选`total_iops_sec_max`元素是最大总每秒I/O操作。此不能出现与`read_iops_sec_max` 或`write_iops_sec_max`。

read_iops_sec_max

可选`read_iops_sec_max`元件的最大读我每秒/ O操作。

write_iops_sec_max

可选的`write_iops_sec_max`元素是我最大写入/每秒O操作。

size_iops_sec

可选`size_iops_sec`元件是每秒I/O操作的大小。 

自1.2.11和QEMU 1.7后的吞吐量限制

group_name

可选`group_name`提供cability共享多个驱动器之间的I/O限制配额。这可以防止最终用户绕过主机提供商的限制策略,通过在N个小型驱动器中分割1个大型驱动器并获得N倍的正常限制配额。可以使用任何名称。 

group_name自3.0.0和QEMU 2.4

total_bytes_sec_max_length

可选的`total_bytes_sec_max_length` 元素,以秒为最大持续时间的 `total_bytes_sec_max`突发期。只有当有效`total_bytes_sec_max`被置位。

read_bytes_sec_max_length

可选的`read_bytes_sec_max_length` 元素,以秒为最大持续时间的 `read_bytes_sec_max`突发期。只有当有效`read_bytes_sec_max`被置位。

write_bytes_sec_max

可选的`write_bytes_sec_max_length` 元素,以秒为最大持续时间的 `write_bytes_sec_max`突发期。只有当有效`write_bytes_sec_max`被置位。

total_iops_sec_max_length

可选的`total_iops_sec_max_length` 元素,以秒为最大持续时间的 `total_iops_sec_max`突发期。只有当有效`total_iops_sec_max`被置位。

read_iops_sec_max_length

可选的`read_iops_sec_max_length` 元素,以秒为最大持续时间的 `read_iops_sec_max`突发期。只有当有效`read_iops_sec_max`被置位。

write_iops_sec_max

可选的`write_iops_sec_max_length` 元素,以秒为最大持续时间的 `write_iops_sec_max`突发期。只有当有效`write_iops_sec_max`被置位。 

吞吐量长度自2.4.0和QEMU 2.6

driver

 可选的驱动程序元件允许指定与用于提供磁盘的管理程序驱动程序有关的进一步的细节。 自0.1.8
  • 如果虚拟机管理程序支持多个后端驱动程序,然后在name属性选择主后端驱动程序的名称,而可选type 属性提供的分型。例如,xen支持名称"tap","tap2","phy"或"file",类型为"aio",而qemu仅支持"qemu"名称,但是包括"raw ","bochs","qcow2"和"qed"。
  • 可选的cache属性控制缓存机制,可能的值是"默认","无","写通式","回写","directsync"(如"写通式",但它绕过主机页面缓存)和"不安全"(主机可以缓存所有磁盘io,并且来自guest虚拟机的同步请求将被忽略)。 自0.6.0以来,"directsync"自0.9.5以来,"不安全"自0.9.7
  • 可选的error_policy属性控制管理程序将如何表现在磁盘读取或写入错误,可能的值是"停止","报道","忽略"和"enospace"。自从0.8.0,"报告",因为0.9.7 error_policy的默认设置是"报告"。还有一个可选的rerror_policy用于控制只读的错误行为。由于0.9.7。如果未给出rerror_policy,则error_policy将用于读取和写入错误。如果rerror_policy给定,它将覆盖error_policy读取错误。另外请注意,"enospace"不是读错误,一个有效的政策,所以如果error_policy设置为"enospace",并没有rerror_policy给出,读取错误政策将在其默认状态下,这是"报告"离开了。
  • 可选io属性控制I/O的具体政策; qemu客人支持"线程"和"本地"。自0.8.8
  • 可选的ioeventfd属性允许用户设置 域I/O处理异步的磁盘设备。默认值由管理程序自行决定。接受的值为"on"和"off"。启用此选项允许qemu在单独的线程处理I/O时执行VM。通常,在I/O期间遇到高系统CPU利用率的客户将受益于此。另一方面,在过载的主机上,它可以增加客户I/O延迟。 由于0.9.3(QEMU和KVM只), 一般来说,你应该独自离开这个选项,除非你非常确定你知道自己在做什么。
  • 可选event_idx属性控制装置事件处理的某些方面。该值可以是"开"或"关" - 如果它是打开的,它将减少客户端的中断和退出的数量。默认值由QEMU确定; 通常如果支持该功能,默认为开。如果存在此行为不是最佳的情况,此属性提供了强制关闭此功能的方法。 由于0.9.5(QEMU和KVM只), 一般来说,你应该独自离开这个选项,除非你非常确定你知道自己在做什么。
  • 可选copy_on_read属性控制是否复制读取备份文件到图像文件。该值可以是"on"或"off"。Copy-on-read避免重复访问相同的备份文件扇区,并且当备份文件位于缓慢的网络上时非常有用。默认情况下,读取时复制已关闭。 自0.9.10(仅限QEMU和KVM)
  • 可选discard属性控制是否丢弃(也称为"修整"或"取消映射")请求将被忽略或传递到文件系统。该值可以是"unmap"(允许丢弃请求被传递)或"忽略"(忽略丢弃请求)。 自1.0.6(仅限QEMU和KVM)
  • 可选detect_zeroes属性控制是否检测零写入请求。该值可以是"off","on"或"unmap"。前两个值分别关闭和打开检测。第三值("取消映射"),开启检测并另外尝试从基于所述值的图像丢弃这些区域discard上述(它将作为"上",如果discard被设置为"忽略")。NB启用检测是计算密集型操作,但可以在慢介质上保存文件空间和/或时间。 自2.0.0
  • 可选的iothread属性由域的范围定义的磁盘到IOThread分配 iothreads 值。多个磁盘可以分配给相同的IOThread,并从1编号为域iothreads值。可用于磁盘设备target配置为使用"的Virtio" bus和"PCI"或"CCW" address类型。 自1.2.8(QEMU 2.1)

backenddomain

可选的`backenddomain`元素允许指定后端域(又名驱动程序域)主机磁盘。使用 `name`属性来指定后端域名。 自1.2.13(仅Xen)

boot

指定磁盘是可引导的。该`order` 属性决定了设备将引导顺序过程中尝试的顺序。如果每个设备`boot`的元素不能与一般的引导元素一起使用 [BIOS引导程序](http://libvirt.org/formatdomain.html#elementsOSBIOS)部分。 自0.8.8

encryption

如果存在,指定卷是如何加密的。请参阅[存储加密](http://libvirt.org/formatstorageencryption.html)的页面了解更多信息。 

readonly

如果存在,则表示设备无法由guest虚拟机修改。现在,这是与属性磁盘默认`device='cdrom'`。 

shareable

如果存在,这表示预期设备将在域之间共享(假设管理程序和操作系统支持此),这意味着应为该设备停用缓存。 

transient

如果存在,则表示当客户端退出时,设备内容的更改应自动还原。对于某些管理程序,标记磁盘瞬态可防止域参与迁移或快照。自0.9.5

serial

如果存在,则指定虚拟硬盘驱动器的序列号。例如,它可能看起来像`<serial>WD-WMAP9A966149</serial>`。不支持SCSI块设备,也就是那些使用磁盘`type`'块'使用`device`的'伦' `bus`'SCSI'。 自0.7.1

wwn

如果存在,此元素指定虚拟硬盘或CD-ROM驱动器的WWN(全球通用名称)。它必须由16个16进制数字,必须是唯一的(单域的磁盘之间至少) 自0.10.1

vendor

如果存在,此元素指定虚拟硬盘或CD-ROM设备的供应商。它不能超过8个可打印字符。 自1.0.1

product

如果存在,此元素指定虚拟硬盘或CD-ROM设备的产品。它不能超过16个可打印字符。 自1.0.1

address

如果存在的话,所述`address`元件为结磁盘控制器的给定时隙(实际`<controller>`设备通常可以通过libvirt的推断,尽管可以[明确指定](http://libvirt.org/formatdomain.html#elementsControllers))。该`type`属性是强制性的,通常是"PCI"或"驱动器"。对于"PCI"控制器,额外的属性`bus`,`slot`以及`function`必须存在,以及可选的`domain`和`multifunction`。多功能默认为"关闭"; 任何其他值需要QEMU 0.1.3及libvirt的0.9.7。对于一个"驱动"的控制器,附加属性 `controller`,`bus`,`target` (libvirt的0.9.11),并`unit` 可用,每次默认为0。 

auth

该`auth`元素是支持磁盘 `type`的"网络",即使用`source` 元素与`protocol`属性的"RBD"或"iSCSI的"。如果存在,`auth`元素提供了访问源所需的身份验证凭据。它包括一个强制属性`username`,它标识了用户名的身份验证过程中使用,还有一个子元素`secret`与强制属性`type`,以配合回[libvirt的机密对象](http://libvirt.org/formatsecret.html)保存实际的密码或其他凭证(域XML故意不公开密码,只有对管理密码的对象的引用)。已知的秘密类型是Ceph RBD网络源的"ceph"和iSCSI目标的CHAP身份验证的"iscsi"。双方将要求无论是`uuid`与机密对象的UUID或属性`usage` 匹配的是在秘密对象中指定的关键属性。 libvirt 0.9.7

geometry

可选`geometry`元素提供覆盖几何设置的能力。这对S390 DASD磁盘或较旧的DOS磁盘很有用。 0.10.0

cyls

的`cyls`属性是气缸的数量。

heads

的`heads`属性是磁头数。

secs

的`secs`属性是每磁道的扇区数。

trans

可选的`trans`属性是BIOS的翻译,作案(无,LBA或自动)

blockio

如果存在,`blockio`元素允许覆盖下面列出的任何块设备属性。 自0.10.2(QEMU和KVM)

logical_block_size

磁盘将报告给客户机操作系统的逻辑块大小。对于Linux,这将是BLKSSZGET ioctl返回的值,并描述磁盘I/O的最小单位。 

physical_block_size

磁盘将报告给客户机操作系统的物理块大小。对于Linux,这将是BLKPBSZGET ioctl返回的值,并描述磁盘的硬件扇区大小,这对于磁盘数据的对齐是相关的。 

文件系统

主机上可以直接从guest虚拟机访问的目录。 自0.3.3,因为0.8.5为QEMU/KVM

... ...
<devices>
  <filesystem type ='template'>
    <source name ='my-vm-template' />
    <target dir ='/' />
  </filesystem>
  <filesystem type ='mount'accessmode ='passthrough'>
    <driver type ='path'wrpolicy ='immediate' />
    <source dir ='/ export/to/guest' />
    <target dir ='/ import/from/host' />
    <readonly />
  </filesystem>
  <filesystem type ='file'accessmode ='passthrough'>
    <driver name ='loop'type ='raw' />
    <driver type ='path'wrpolicy ='immediate' />
    <source file ='/ export/to/guest.img' />
    <target dir ='/ import/from/host' />
    <readonly />
  </filesystem>
  ... ...
</device>
... ...

filesystem

 文件系统属性`type`指定的类型 `source`。可能的值为: 

mount

 要在guest虚拟机中装入的主机目录。由LXC,OpenVZ的使用(自0.6.2) 和QEMU/KVM (自0.8.5) 。这是默认的`type`,如果没有指定一个。这种模式还具有一个可选的子元件`driver`,与属性`type='path'` 或`type='handle'` (自0.9.7) 。该驱动程序块有一个可选的属性 `wrpolicy`与主机页面缓存进一步控制互动; 省略属性给出缺省行为,而值`immediate`是指主机回写,立即引发了来宾文件的写操作过程中的所有页面感动(自0.9.10) 。 

template

 OpenVZ文件系统模板。仅由OpenVZ驱动程序使用。 

file

 主机文件将被视为映像并装载在guest虚拟机中。将自动检测文件系统格式。仅由LXC驱动程序使用。 

block

 要在客户机中挂载的主机块设备。将自动检测文件系统格式。只有使用LXC驱动程序 (自0.9.5) 。 

ram

 内存文件系统,使用来自主机操作系统的内存。源元素有一个属性`usage` ,其给出了昆明植物研究所的内存使用量的限制,除非单位由指定的`units`属性。仅由LXC驱动程序使用。 (自0.9.13)

bind

 客户机内的目录将绑定到客户机内的另一个目录。只有使用LXC驱动程序 (自0.9.13)

文件系统块具有一个可选属性accessmode ,它指定用于访问源的安全模式 (自0.8.5) 。目前,这仅适用于type='mount'对QEMU / KVM驱动程序。可能的值为:

passthrough

 在`source`与客户机内用户的权限进行访问。这是默认的`accessmode`,如果没有指定一个。 [更多信息](http://lists.gnu.org/archive/html/qemu-devel/2010-05/msg02673.html)

mapped

 在`source`与虚拟机管理程序(QEMU进程)的权限进行访问。 [更多信息](http://lists.gnu.org/archive/html/qemu-devel/2010-05/msg02673.html)

squash

 与"passthrough"类似,异常是忽略诸如"chown"之类的特权操作的失败。这使得类似passthrough的模式可以用于以非root身份运行管理程序的人。 [更多信息](http://lists.gnu.org/archive/html/qemu-devel/2010-09/msg00121.html)

driver

 可选的驱动程序元件允许指定与用于提供文件系统的管理程序驱动程序相关的进一步的细节。 自1.0.6
  • 如果管理程序支持多个后端的驱动程序,则该type属性选择主后端驱动程序名称,而format 属性提供的格式类型。例如,LXC支持一种类型的"循环",格式为"raw"或"nbd",格式为任何格式。QEMU支持一种类型的"路径"或"句柄",但没有格式。Virtuozzo驱动程序支持一种格式为"ploop"的"ploop"类型。

source

 在guest虚拟机中访问的主机上的资源。的 `name`属性必须被使用 `type='template'`,并且该`dir`属性必须被使用`type='mount'`。该`usage`属性用于与`type='ram'`设置在KIB内存限制,除非单元由指定的`units`属性。 

target

 凡`source`可以在客人访问。对于大多数驱动程序,这是一个自动安装点,但对于QEMU/KVM,这只是一个任意字符串标签,它被导出到guest虚拟机作为安装位置的提示。 

readonly

 启用将文件系统导出为guest的只读安装,默认情况下给出读写访问(目前仅适用于QEMU/KVM驱动程序)。 

space_hard_limit

 此客户机文件系统可用的最大空间。 自0.9.13

space_soft_limit

 此客户机文件系统可用的最大空间。容器允许超过其软限制一段宽限时间。之后强制硬限制。 自0.9.13

设备地址

许多设备有一个可选的<address> ,其中设备放置呈现给来宾虚拟总线上的子元素来描述。如果输入中省略了地址(或地址中的任何可选属性),libvirt将生成相应的地址; 但如果需要更多地控制布局,则需要显式地址。请参阅下面的设备示例,包括地址元素。

每个地址都有一个强制属性type描述该设备是其总线。对于给定设备使用哪个地址的选择部分地受到设备和客户的体系结构的限制。例如,一个<disk>设备使用type='drive',而<console>设备将使用type='pci'上的i686或x86_64宾客,或type ='spapr-vio'上PowerPC64 pSeries的客人。每个地址类型还有可选属性,用于控制总线上设备的放置位置:

pci

PCI地址具有以下附加属性:`domain`(2字节的十六进制整数,当前未使用的qemu),`bus`(0到0xff之间的十六进制值,含),`slot`和(0x0和0x1F的,包容之间的十六进制的值)`function`(一值在0和7之间,包括0和7)。同时还提供了`multifunction`属性,它控制开启多功能位在PCI控制寄存器特定插槽/功能(自0.9.7,需要QEMU 0.13)。`multifunction`默认为'off',但对于将使用多个函数的插槽的函数0应该设置为'on'。  

自1.3.5,一些管理程序驱动程序可能接受<address type='pci' /> 元件没有其他的属性来分配一个PCI地址的设备,而不是某些其他类型的地址也可能是适当的同一设备的明确请求(例如已将virtio-MMIO) 。

drive

驱动地址具有以下附加属性:`controller`(2位控制器号),`bus`(2位总线号), `target`(2位目标数),和`unit`(总线上的2位单元号)。 

virtio-serial

每个已将virtio串行地址具有以下附加属性:`controller`(2位控制器号),`bus`(2位总线编号),和`slot`(在总线内的2位插槽)。 

ccid

一个CCID地址,智能卡,具有以下附加属性:`bus`(2位总线编号),和`slot`属性(巴士内的2位插槽)。 自0.8.8。

usb

USB地址具有以下附加属性:`bus`(0和0xFFF的之间的十六进制值,含),和`port`(最多四个八位位组的点表示法,如1.2或2.1.3.1)。 

spapr-vio

在PowerPC pseries客户机上,设备可以分配给SPAPR-VIO总线。它有一个平坦的64位地址空间; 按照惯例,设备通常以0x1000的非零倍数分配,但其他地址有效,并由libvirt允许。每个地址具有以下附加属性:`reg`(开始寄存器的十六进制值地址)。 自0.9.9。

ccw

S390客人`machine`的S390-CCW-已将virtio使用价值本地CCW总线I/O设备。CCW总线地址具有以下附加属性: `cssid`(0和0xFE的,包括之间的十六进制的值), `ssid`(0和3(含)之间的值)和 `devno`(0和0xFFFF之间的十六进制值,包括在内)。不允许部分指定总线地址。如果省略,libvirt将分配一个空闲的总线地址cssid=0xfe和ssid=0。Virtio-ccw设备必须将其cssid设置为0xfe。 自1.0.4

virtio-mmio

这会将设备上为Virtio-MMIO运输,这是目前仅适用于一些`armv7l`和 `aarch64`虚拟机。virtio-mmio地址没有任何其他属性。 由于1.1.3  

如果客人架构是aarch64和机器类型virt,libvirt的会自动分配PCI地址的设备; 然而,在客户配置中存在具有virtio- mmio地址的单个设备将导致libvirt为所有其他设备分配virtio-mmio地址。 自3.0.0

isa

ISA地址具有以下附加属性:`iobase`和`irq`。 自1.2.1

控制器

根据客户机架构,某些设备总线可能会出现多次,一组虚拟设备绑定到虚拟控制器。通常,libvirt可以自动推断这样的控制器,而不需要显式的XML标记,但有时需要提供一个显式的控制器元素。

... ...
<devices>
  <controller type ='ide'index ='0' />
  <controller type ='virtio-serial'index ='0'ports='16'vectors ='4' />
  <controller type ='virtio-serial'index ='1'>
    <address type ='pci'domain ='0x0000'bus ='0x00'slot ='0x0a'function ='0x0' />
  </controller>
  <controller type ='scsi'index ='0'model ='virtio-scsi'>
    <driver iothread ='4' />
    <address type ='pci'domain ='0x0000'bus ='0x00'slot ='0x0b'function ='0x0' />
  </controller>
  ... ...
</device>
... ...

每个控制器具有强制属性type,它必须是'的ide','FDC','SCSI','SATA','USB','CCID'之一,"已将virtio串行"或"PCI",并强制属性index这是描述在其中命令总线控制器遇到(为使用中的小数整数controller的属性 <address>元素)。 1.3.5以来该指数是可选的; 如果未指定,则将自动分配为给定控制器类型的最低未使用索引。某些控制器类型具有控制特定功能的附加属性,例如:

virtio-serial

该`virtio-serial`控制器具有两个额外的可选属性`ports`和`vectors`,其中控制多少设备可通过控制器进行连接。

scsi

一个`scsi`控制器有一个可选的属性 `model`,这是'自动'之一'的BusLogic','ibmvscsi','LSILOGIC','LSISAS1068','LSISAS1078','为Virtio-SCSI"或"vmpvscsi"。

usb

一个`usb`控制器有一个可选的属性 `model`,这是"PIIX3-UHCI","PIIX4-UHCI","EHCI","ICH9-ehci1","ICH9-uhci1","ICH9-uhci2"之一,"ICH9-uhci3" ,"vt82c686b-uhci","pci-ohci","nec-xhci","qusb1"(具有qemu后端的xen pvusb,版本1.1)或"qusb2"(xen pvusb with qemu backend,version 2.0)。此外, 自0.10.0,如果USB总线需要为客人被明确禁止,`model='none'` 也可以使用。 由于1.0.5,没有默认的USB控制器将基于S390。 自1.3.5,USB控制器接受一 `ports`配置多少设备可以连接到控制器属性。

注意:PowerPC64"spapr-vio"地址没有关联的控制器。

对于控制器本身是一个PCI或USB总线上的设备,可选的子元素<address>可以指定控制器的主总线的确切关系,语义上面给出

一个可选的子元素driver可以指定驱动程序特定的选项:

queues

 可选`queues`属性指定队列控制器的数量。为了获得最佳性能,建议指定与vCPU数量匹配的值。 自1.0.5(仅限QEMU和KVM)

cmd_per_lun

 可选`cmd_per_lun`属性指定可以由所述主机控制装置进行排队的命令的最大数目。 自1.2.7(仅限QEMU和KVM)

max_sectors

 可选`max_sectors`属性指定将在单个命令传输到或从设备的字节的最大数据量。传输长度在扇区中测量,其中扇区为512字节。 自1.2.7(仅限QEMU和KVM)

ioeventfd

 可选的`ioeventfd`属性指定控制器是否应使用 [ I/O异步处理](https://patchwork.kernel.org/patch/43390/)与否。接受的值为"on"和"off"。自1.2.18

iothread

 支持的控制器类型`scsi`使用模型 `virtio-scsi`的`address`类型 `pci`和`ccw` 自1.3.5(QEMU 2.4) 。可选`iothread`由该域的范围所限定的属性分配控制器到IOThread [`iothreads`](http://libvirt.org/formatdomain.html#elementsIOThreadsAllocation) 值。每个SCSI `disk`分配给使用指定 `controller`将利用相同的IOThread。如果特定IOThread期望用于特定的SCSI `disk`,那么多个控制器必须定义每一个都具有特定 `iothread`的值。该`iothread`值必须是域iothreads值范围内1。 

USB伴侣控制器有一个可选的子元素<master>来指定同伴到主控制器的确切关系。一个同伴控制器相同的总线它的主人,所以同伴index值应该相等。并非所有的控制器型号可以作为同伴控制器和libvirt的可能会提供一些合理的默认设置(设置master startportfunction对某些特定型号的地址的)。优选伴随控制器ich-uhci[123]

... ...
<devices>
  <controller type ='usb'index ='0'model ='ich9-ehci1'>
    <address type ='pci'domain ='0'bus ='0'slot ='4'function ='7' />
  </controller>
  <controller type ='usb'index ='0'model ='ich9-uhci1'>
    <master startport ='0' />
    <address type ='pci'domain ='0'bus ='0'slot ='4'function ='0'multifunction ='on' />
  </controller>
  ... ...
</device>
... ...

PCI控制器有一个可选model的可能值属性pci-rootpcie-rootpcie-root-portpci-bridgedmi-to-pci-bridgepcie-switch-upstream-portpcie-switch-downstream-port pci-expander-bus,或pcie-expander-bus。(PCI-根和PCI桥自1.0.5,PCIE- root和DMI至PCI桥自1.1.2,PCIE-根端口,PCIE交换机上游端口,PCIE交换机下游端口自1.2.19和PCI- 扩展总线和PCIe的扩展总线,因为1.3.4)根控制器(pci-rootpcie- root)有一个可选的pcihole64元素指定有多大(以千字节,或由指定的单位pcihole64unit属性) 64位PCI孔应该。当QEMU和Seabios最近足以支持64位PCI插槽时,某些客户端(如Windows XP或Windows Server 2003)可能会崩溃,除非禁用(设置为0)。自1.1.2(仅QEMU)

PCI控制器也有一个可选的子元素<model>与属性 name。name属性保存qemu正在模拟的特定设备的名称(例如"i82801b11-bridge"),而不是简单地设置设备类("dmi-to-pci- bridge","pci- bridge"),在控制器元素的模型属性。在大多数情况下,你不应该手动添加一个<model>子元素到控制器,也不应该修改由libvirt的自动生成的。从1.2.19(仅QEMU)。

PCI控制器,还有一个可选的子元素<target>与下面列出的属性和子元素。这些是可配置项,1)对客户操作系统可见,因此必须保留以用于访客ABI兼容性,以及2)通常保留默认值或由libvirt自动导出。在大多数情况下,你不应该手动添加一个<target>子元素到控制器,也不应该修改由libvirt的自动生成的值。从1.2.19(仅QEMU)。

chassisNr

 具有属性模型="PCI桥的"PCI控制器,还可以有一个`chassisNr`在属性`<target>`子元件,其用于控制对PCI桥设备QEMU的"chassis_nr"选项(通常libvirt的自动设置此为相同的值作为pci控制器的索引属性)。如果设置,chassisNr必须在1和255之间。 

chassis

 PCIe的根端口和PCIe交换机下游端口的控制器也可以有一个`chassis`在属性`<target>`子元件,它用于设置控制器的"底盘"的配置值,这是虚拟机可见。如果设置,机箱必须在0和255之间。 

port

 PCIe的根端口和PCIe交换机下游端口的控制器也可以有一个`port`在属性`<target>`子元件,它用于设置控制器的"端口"的配置值,这是虚拟机可见。如果设置,端口必须在0和255之间。 

busNr

 PCI-扩展总线和PCIe的扩展总线控制器可以有一个可选的`busNr`属性(1-254)。这将是新公共汽车的公共汽车编号; 指定的总线号和255之间的所有总线号只能用于分配给从该扩展器总线开始插入到层次结构中的PCI/PCIe控制器,并且小于指定值的总线号将可用于下一个较低的扩展器总线(或根总线,如果没有较低的扩展器总线)。如果不指定busNumber,libvirt将找到所有其他扩展器总线中最低的现有busNumber(或者如果没有其他扩展器则使用256),并自动分配找到的总线的busNr - 2,为总线编号提供一个总线编号pci-expander-bus和一个自动连接到它的pci-bridge(如果你计划在总线层次结构中添加更多的pci-bridge,你应该手动设置busNr为一个较低的值)。 

类似的算法用于自动确定pcie-expander-bus的busNr属性,但由于pcie-expander-bus没有任何内置的pci- bridge,所以第二个总线号只是为pcie- -root端口,必须连接到总线才能实际插入端点设备。如果要将多个设备插入pcie-expander总线 ,则必须将pcie-switch-upstream-port连接到插入pcie-expander-bus的pcie-root端口,并且将多个pcie- switch-下游端口到pcie-switch-upstream-port,当然为了正常工作,你需要相应地减少pcie-expansioner- bus'busNr,以便在它上面有足够的未使用的总线号码以适应给出一个用于上游端口的总线号码和一个用于每个下游端口(除了pcie-根端口和pcie-扩展器

  • 总线本身)。

node

 PCI-扩展总线控制器可以有一个可选`<node>`的内部子元素`<target>`子元素,它是用来设置报来宾操作系统为总线NUMA节点-则guest OS会知道总线上的所有设备都在指定的一部分NUMA节点(由libvirt API的用户在将主机设备分配到域时将其连接到正确的pci-expander-bus)。 

对于提供隐式PCI总线的机器类型,索引= 0的pci-root控制器是自动添加的,并且需要使用PCI设备。pci-root没有地址 。如果有太多的设备安装在由pci- root提供的一条总线上,或者指定了大于零的PCI总线号,则自动添加PCI桥。PCI桥也可以手动指定,但它们的地址应该仅指已经指定的PCI控制器提供的PCI总线。在PCI控制器索引中留下空隙可能会导致无效的配置。

... ...
<devices>
  <controller type ='pci'index ='0'model ='pci-root' />
  <controller type ='pci'index ='1'model ='pci-bridge'>
    <address type ='pci'domain ='0'bus ='0'slot ='5'function ='0'multifunction ='off' />
  </controller>
</device>
... ...

对于提供隐式PCI Express(PCIe)总线(例如,基于Q35芯片组的机器类型)的机器类型,索引= 0的pcie-root控制器被自动添加到域的配置 。pcie- root也没有地址,提供了31个插槽(编号为1-31),可用于连接PCIe或PCI设备(尽管libvirt永远不会自动将PCI设备分配给PCIe插槽,它将允许手动指定此类分配 )。连接到pcie-root的设备无法热插拔。为了使具有PCIe的根控制器,PCI控制器与系统上可用标准的PCI插槽model='dmi-to-pci- bridge'自动添加,通常在槽= 0X1E的事实标准位置。dmi-to-pci-bridge控制器插入PCIe插槽(由pcie- root提供),并且它自身提供了31个标准PCI插槽(也不支持设备热插拔)。为了在客户系统中具有热插拔PCI插槽,还将自动创建pci桥控制器并将其连接到自动创建的dmi到pci桥控制器的插槽之一; 所有具有由libvirt自动确定的地址的访客PCI设备将被放置在此pci-bridge设备上。(自1.1.2)。

有一个隐含的PCIe的根域也可以加用控制器model='pcie-root-port'model='pcie-switch-upstream- port'model='pcie-switch-downstream-port'。pcie-root- port是一种简单类型的桥接设备,其仅能够在其上游侧上连接到PCU根总线上的31个插槽中的一个,并且在下游侧(在可选地, slot ='0')。pcie- root-port可用于提供单个插槽以便以后热插拔PCIe设备(但本身不可热插拔 - 当域启动时,它必须在配置中)。(自1.2.19)

pcie-switch-upstream-port是一种更灵活(但也更复杂)的设备,只能插入上游端的pcie-root-port或pcie-switch- downstream-port它不是可热插拔的),并且在下游侧(slot ='0' - slot = '31')提供仅接受pcie交换机下游端口设备的32个端口; 每个pcd交换机下游端口设备只能插入其上游侧(同样,不可热插拔)的pcie交换机上游端口,并且在其下游侧提供单个可热插拔的端口,其可以接受任何标准pci或pcie设备(或另一pcie交换机上行端口),即在功能上与pci根端口相同。(自1.2.19)

... ...
<devices>
  <controller type ='pci'index ='0'model ='pcie-root' />
  <controller type ='pci'index ='1'model ='dmi-to-pci-bridge'>
    <address type ='pci'domain ='0'bus ='0'slot ='0xe'function ='0' />
  </controller>
  <controller type ='pci'index ='2'model ='pci-bridge'>
    <address type ='pci'domain ='0'bus ='1'slot ='1'function ='0' />
  </controller>
</device>
... ...

设备租赁

当使用锁管理器时,可能希望针对VM记录设备租赁。锁管理器将确保VM不会启动,除非可以获取租约。

... ...
<devices>
  ... ...
  <lease>
    <lockspace> somearea </lockspace>
    <key> somekey </key>
    <target path ='/ some/lease/path'offset ='1024' />
  </lease>
  ... ...
</device>
... ...

lockspace

这是一个任意字符串,标识在其中保存密钥的锁定空间。锁定管理器可能会对格式或锁定空间名称的长度施加额外的限制。

key

这是一个任意字符串,唯一标识要获取的租约。锁定管理器可能对格式或密钥的长度施加额外的限制。 

target

这是与锁定空间相关联的文件的标准路径。偏移量指定租赁在文件中的存储位置。如果锁管理器不需要偏移,只需传递0。 

主机设备分配

USB/PCI/SCSI设备

连接到主机的USB,PCI和SCSI设备可以通过使用来宾传递hostdev的元素。 因为经过0.4.4为USB,0.6.0为PCI(KVM只)和1.0.6的SCSI(KVM只):

... ...
<devices>
  <hostdev mode ='subsystem'type ='usb'>
    <source startupPolicy ='optional'>
      <vendor id ='0x1234' />
      <product id ='0xbeef' />
    </source>
    <boot order ='2' />
  </hostdev>
</device>
... ...

要么:

... ...
<devices>
  <hostdev mode ='subsystem'type ='pci'managed ='yes'>
    <source>
      <address domain ='0x0000'bus ='0x06'slot ='0x02'function ='0x0' />
    </source>
    <boot order ='1' />
    <rom bar ='on'file ='/ etc/fake/boot.bin' />
  </hostdev>
</device>
... ...

要么:

... ...
<devices>
  <hostdev mode ='subsystem'type ='scsi'sgio ='filtered'rawio ='yes'>
    <source>
      <adapter name ='scsi_host0' />
      <address bus ='0'target ='0'unit ='0' />
    </source>
    <readonly />
    <address type ='drive'controller ='0'bus ='0'target ='0'unit ='0' />
  </hostdev>
</device>
... ...

要么:

... ...
<devices>
  <hostdev mode ='subsystem'type ='scsi'>
    <source protocol ='iscsi'name ='iqn.2014-08.com.example:iscsi-nopool/1'>
      <host name ='example.com'port ='3260' />
      <auth username ='myuser'>
        <secret type ='iscsi'usage ='libvirtiscsi' />
      </auth>
    </source>
    <address type ='drive'controller ='0'bus ='0'target ='0'unit ='0' />
  </hostdev>
</device>
... ...

要么:

  ... ...
  <devices>
    <hostdev mode ='subsystem'type ='scsi_host'>
      <source protocol ='vhost'wwpn ='naa.50014057667280d8' />
    </hostdev>
  </device>
  ... ...

hostdev

的`hostdev`元件是用于描述主机设备的主容器。对于每个设备,`mode`始终是"子系统",而`type`与注意到附加属性下列值之一。 

usb

USB设备在gu​​est虚拟机启动时与主机分离,并在guest虚拟机退出或设备热插拔后重新连接。 

pci

对于PCI设备,当`managed`是"是",它是从主机传递到来宾,并重新连接到来宾后退出主机之前分离。如果 `managed`省略或"否",对用户负责调用`virNodeDeviceDetachFlags` (或`virsh nodedev-detach`启动位或热插拔设备和之前`virNodeDeviceReAttach` (或`virsh nodedev-reattach`热拔出之后)或停止位。 

scsi

对于SCSI设备,用户应负责确保设备不被主机使用。如果管理程序和操作系统支持可选的`sgio`(自1.0.6)属性指示特权的SG_IO命令是否被过滤的磁盘。有效设置为"过滤"或"未过滤",其中默认为"过滤"。可选的`rawio` (自1.2.9)属性表示LUN是否需要rawio的能力。有效设置为"yes"或"no"。见内rawio的描述 [磁盘](http://libvirt.org/formatdomain.html#elementsDisks)部分。如果域中的磁盘lun已具有rawio功能,则不需要此设置。 

scsi_host

自从2.5.0对于SCSI设备,用户负责,确保设备不使用主机。这 `type`通过由单一HBA给来宾提出的所有的LUN。 

注意:managed属性仅与PCI设备使用,并且是所有的其它设备类型忽略,从而设置 managed具有比PCI设备其他明确地具有如省略其相同的效果。

source

源元素使用以下机制来描述从主机看到的设备: 

usb

USB设备可以通过使用供应商/产品ID加以解决`vendor`和`product`元素或设备的使用主机上的地址 `address`元素。 

自1.0.0,所述source USB设备的元件可以包含startupPolicy 属性可用于定义策略做什么,如果指定的主机USB设备是找不到的。该属性接受以下值:

强制性 失败如果由于任何原因(默认)
必要 失败如果在启动时缺失,如果在迁移/恢复/恢复时丢失,则丢弃
可选的 如果在任何开始尝试丢失

pci

PCI设备可以仅通过进行说明`address`。 

scsi

SCSI设备由两个所述`adapter` 和`address`元素。该`address` 元件包括一个`bus`属性(2位总线号),一`target`属性(10位的目标数),一个`unit`属性(总线上的20位单元号)。并非所有的虚拟机管理程序支持更大的 `target`和`unit`值。由每个管理程序确定适配器支持的最大值。 

自1.2.8时,source SCSI设备的元件可以包含protocol 属性。当属性被设置为"iSCSI的",主机装置XML遵循网络磁盘 使用相同的设备name属性,并任选地使用的auth元件,以提供认证凭证到iSCSI服务器。

scsi_host

自从2.5.0,一个SCSI HBA后面多个LUN是由描述`protocol` 为"虚拟主机"属性和一个`wwpn`("NAA"16进制数字与前缀)成立于主机CONFIGFS那就是vhost_scsi WWPN属性。 

vendorproduct

在`vendor`和`product`元素各有一个 `id`指定USB供应商和产品id属性。ids可以以十进制,十六进制(从0x开始)或八进制(从0开始)形式给出。

boot

指定设备是可引导的。该`order` 属性决定了设备将引导顺序过程中尝试的顺序。如果每个设备`boot`的元素不能与一般的引导元素一起使用 [BIOS引导程序](http://libvirt.org/formatdomain.html#elementsOSBIOS)部分。 由于0.8.8 PCI设备, 因为1.0.1 USB设备。 

rom

该`rom`元素被用来改变PCI设备的ROM是如何呈现给客人。可选`bar` 属性可以被设置为"开"或"关",并确定器件的ROM是否将在客人的存储器映射可见。(在PCI文档中,"rombar"设置控制是否存在ROM的基址寄存器)。如果没有指定rom bar,将使用qemu默认值(旧版本的qemu使用默认值"off",而较新的qemus默认值为"on")。由于0.9.7(QEMU和KVM只)。可选 `file`属性包含二进制文件的绝对路径呈现给来宾作为设备的ROM BIOS。这可能是有用的,例如,为具有sr-iov能力的以太网设备(其没有用于VF的引导ROM)的虚拟功能提供PXE引导ROM。 由于0.9.10(QEMU和KVM只)。 

address

该`address`USB设备元素有一个 `bus`和`device`属性来指定设备出现在主机上的USB总线和设备编号。这些属性的值可以十进制,十六进制(从0x开始)或八进制(从0开始)形式给出。对于PCI设备的元素带有4个属性,允许指定的设备为可以与发现`lspci`或`virsh nodedev-list`。对于SCSI设备,必须使用"驱动器"地址类型。[见上面](http://libvirt.org/formatdomain.html#elementsAddress)的地址元素的更多细节。

driver

 PCI设备可以有一个可选的`driver` 子元素,指定用于PCI设备分配其后端驱动程序。使用`name`属性选择"vfio"(用于新VFIO设备分配后端,它与UEFI SecureBoot兼容)或"KVM"(由KVM内核模块直接处理的传统设备分配)由于1.0.5(QEMU和KVM只是,需要内核3.6或更新版本)。指定时,如果请求的设备分配方法在主机上不可用,则设备分配将失败。如果没有指定,默认为"vfio"在哪里的VFIO驱动程序可用和加载,并在旧系统"KVM",或那些在VFIO驱动尚未加载系统由于1.1.3(在此之前,默认总是"kvm")。 

readonly

表示该设备是只读的,现在仅由SCSI主机设备支持。自1.0.6(仅限QEMU和KVM)

shareable

如果存在,这表明设备预期在域之间共享(假设管理程序和操作系统支持此)。仅受SCSI主机设备支持。 自1.0.6

注意:尽管shareable引入 在1.0.6,它并没有如预期,直到工作1.2.2。

座/字符设备

从主机座/字符设备可以通过使用来宾传递hostdev的元素。这只能通过基于容器的虚拟化来实现。设备由完全限定路径指定。 自从1.0.1 LXC后:

... ...
<hostdev mode ='capabilities'type ='storage'>
  <source>
    <block>/dev/sdf1 </block>
  </source>
</hostdev>
... ...

... ...
<hostdev mode ='capabilities'type ='misc'>
  <source>
    <char>/dev/input/event3 </char>
  </source>
</hostdev>
... ...

... ...
<hostdev mode ='capabilities'type ='net'>
  <source>
    <interface> eth0 </interface>
  </source>
</hostdev>
... ...

hostdev

的`hostdev`元件是用于描述主机设备的主容器。块/字符设备透传`mode`始终是"能力",并`type`为"存储"的块设备,"杂项"为字符设备和"网"为主机的网络接口。 

source

源元素描述从主机看到的设备。对于块设备,在嵌套的"块"元素中提供到主机OS中的块设备的路径,而对于字符设备,使用"char"元素。对于网络接口,接口的名称在"interface"元素中提供。 

重定向设备

通过一个字符设备的USB设备重定向支持(仅适用于KVM),因为0.9.5后:

... ...
<devices>
  <redirdev bus ='usb'type ='tcp'>
    <source mode ='connect'host ='localhost'service ='4000' />
    <boot order ='1' />
  </redirdev>
  <redirfilter>
    <usbdev class ='0x08'vendor ='0x1234'product ='0xbeef'version ='2.56'allow ='yes' />
    <usbdev allow ='no' />
  </redirfilter>
</device>
... ...

redirdev

的`redirdev`元件是用于描述重定向设备主容器。`bus`必须是USB设备的"usb"。附加属性`type`是必需的,符合支持一个[串行设备](http://libvirt.org/formatdomain.html#elementsConsole)的类型,来描述隧道的主机端; `type='tcp'` 或`type='spicevmc'`(其中使用的usbredir信道[的SPICE图形装置](http://libvirt.org/formatdomain.html#elementsGraphics))是典型的。该redirdev元素有一个可选的子元素`<address>`,可以在设备绑在特定的控制器。进一步的子元素,例如`<source>`,可以根据给定的类型是必需的,尽管`<target>`不是必需的子元素(因为字符设备的消费者是管理程序本身,而不是在客户可见的设备)。 

boot

指定设备是可引导的。该`order`属性决定了设备将引导顺序过程中尝试的顺序。如果每个设备 `boot`的元素不能与一般的引导元素一起使用 [BIOS引导程序](http://libvirt.org/formatdomain.html#elementsOSBIOS)部分。(自1.0.1) 

redirfilter

该` redirfilter `元件被用于创建过滤器规则来从重定向过滤掉某些设备。它使用子元素`<usbdev>`来定义每个过滤器规则。 `class`属性是USB类代码,例如,0x08表示大容量存储设备。USB设备可以通过供应商/产品ID使用加以解决`vendor`和`product`属性。 `version`是从bcdDevice字段(而不是USB协议的版本)的设备版本。这四个属性是可选的,并且`-1`可以用于允许他们的任何值。`allow`属性是强制的,"是"表示允许,"否"表示拒绝。 

智能卡设备

虚拟智能卡设备可以经由提供给旅客的 smartcard元件。主机上的USB智能卡读取器设备不能在具有简单设备直通的客户机上使用,因为它将不会在主机上可用,可能在"移除"时锁定主机计算机。因此,一些管理程序提供可向客户呈现智能卡接口的专用虚拟设备,其具有用于描述如何从主机获得证书或甚至从创建到第三方智能卡提供者的信道的若干模式。自0.8.8

... ...
<devices>
  <smartcard mode ='host' />
  <smartcard mode ='host-certificates'>
    <certificate> cert1 </certificate>
    <certificate> cert2 </certificate>
    <certificate> cert3 </certificate>
    <database>/etc/pki/nssdb/</database>
  </smartcard>
  <smartcard mode ='passthrough'type ='tcp'>
    <source mode ='bind'host ='127.0.0.1'service ='2001' />
    <protocol type ='raw' />
    <address type ='ccid'controller ='0'slot ='0' />
  </smartcard>
  <smartcard mode ='passthrough'type ='spicevmc' />
</device>
... ...

<smartcard>元素有一个强制属性mode。支持以下模式:在每种模式下,客户端在其USB总线上看到一个设备,其行为类似于物理USB CCID(芯片/智能卡接口设备)卡。

host

最简单的操作,其中虚拟机管理程序将来宾的所有请求转发到通过NSS直接访问主机的智能卡。不需要其他属性或子元素。见下文关于使用的可选的`<address>`子元素。

host-certificates

不需要将智能卡插入主机,可以在主机上的数据库中提供三个NSS证书名称。这些证书可以通过命令来产生`certutil -d /etc/pki/nssdb -x -t CT,CT,CT -S -s CN=cert1 -n cert1`,并且引起了三证书名称必须为每三个的内容被提供`<certificate>`的子元素。另外一个子元素`<database>`可以指定到备用目录(匹配的绝对路径`-d`的选择的`certutil`创建证书时命令); 如果不存在,则默认为/ etc/pki/nssdb。

passthrough

不是让管理程序直接与主机通信,而是可以通过次要字符设备将所有请求传递到第三方提供程序(其可以依次与智能卡通信或使用三个证书文件)。在这种操作模式中,额外的属性`type`是必需的,相匹配的支承之一[串行设备](http://libvirt.org/formatdomain.html#elementsConsole)的类型,以描述隧道的主机端; `type='tcp'` 或`type='spicevmc'`(其中使用的智能卡的信道[的SPICE图形装置](http://libvirt.org/formatdomain.html#elementsGraphics))是典型的。进一步的子元素,例如`<source>`,可以根据给定的类型是必需的,尽管`<target>`不是必需的子元素(因为字符设备的消费者是管理程序本身,而不是在客户可见的设备)。

每种模式都支持可选的子元素<address>,而微调的智能卡和CCID总线控制器之间的相关性上面记载。现在,qemu只支持最多一个智能卡,地址bus = 0 slot=0。

网络接口

... ...
<devices>
  <interface type ='direct'trustGuestRxFilters ='yes'>
    <source dev ='eth0' />
    <mac address='52:54:00:5d:c7:9e' />
    <boot order ='1' />
    <rom bar ='off' />
  </interface>
</device>
... ...

有几种可能性用于指定客户可见的网络接口。下面的每个小节提供了有关常用设置选项的更多详细信息。

自1.2.10),该interface元素属性trustGuestRxFilters提供了主机检测和自住客关于修订本接口的MAC地址的信任报告和通过设置属性来接收滤波器的能力yes。该属性的默认设置是no出于安全考虑和支持,取决于客户的网络设备模型 ,以及主机上连接的类型-这是目前支持的只有已将virtio设备型号和主机上macvtap连接。

每个<interface>元素都有一个可选的<address>,可以配合界面到特定的PCI插槽,带属性的子元素type='pci'上面记录

虚拟网络

这是为与动态/无线网络的configs(或多主机环境中的主机硬件的细节在一个单独描述的主机一般旅客连通推荐的配置<network> 定义自0.9.4)。

提供其详细信息由命名的网络定义描述的连接。取决于虚拟网络的"正向模式"配置中,网络可被完全分离(无<forward>元素给出),NAT'ing到一个明确的网络设备或默认路由(<forward mode='nat'>),没有NAT(路由<forward mode='route' />),或直接连接到主机的网络接口(通过macvtap)或网桥设备之一((<forward mode='bridge|private|vepa|passthrough' /> 自0.9.4)

对于具有bridge,private,vepa和passthrough的转发模式的网络,假设主机具有已在libvirt范围之外设置的任何必需的DNS和DHCP服务。在分离的,NAT和路由网络,DHCP和DNS的情况下,由libvirt的提供的虚拟网络上,而IP范围可以通过与"检查虚拟网络配置来确定virsh net-dumpxml [networkname]'。有一个叫"默认"设置虚拟网络哪些呢NAT'ing缺省路由,拥有的IP范围内的盒子192.168.122.0/255.255.255.0。每位客人都将有vnetN的名字,也可以使用<目标>元素(见覆盖创建了一个相关的tun设备 覆盖目标元素)。

当接口的源是一个网络,portgroup可以与网络的名称一起被指定; 一个网络可以定义多个端口组,每个端口组包含针对不同类型的网络连接的略微不同的配置信息。由于0.9.4。

此外,类似direct的网络连接(以下描述),类型的连接network可以指定virtualport元件,具有配置数据被转发到一个VEPA(的802.1Qbg)或802.1Qbh兼容开关(自0.8.2)或开放虚拟交换机虚拟交换机(自0.9.11)。

由于开关的实际类型可以取决于在配置变化<network>在主机上,它是可以接受的省略virtualport type 属性,以及指定从多个不同virtualport类型的属性(也离开了某些属性); 在域启动时,一个完整的<virtualport> 元件将由类型和网络中定义的属性和由接口引用的端口组合并在一起来构建。新构建的虚拟端口是它们的组合。来自较低虚拟端口的属性不能对在较高虚拟端口中定义的属性进行更改。接口优先级最高,端口组优先级最低。(由于0.10.0)。例如,为了与既有802.1Qbh开关和一个打开的vSwitch开关工作正常,则可以选择不指定类型,但既有profileid的情况下(开关802.1Qbh)和interfaceid(当开关处于打开虚拟交换机)(也可以省略其他属性,诸如经理ID,typeid的,或提供ProfileID,待来自网络的填充<virtualport>)。如果要限制guest虚拟机仅连接到某些类型的交换机,则可以指定虚拟端口类型,但仍然省略某些/所有参数

  • 在这种情况下,如果主机的网络具有不同类型的虚拟端口,则连接接口将失败。

    ... ...

    ... ... ... ...
桥LAN

这是在具有静态有线网络配置的主机上的一般客户机连接的推荐配置。

提供从VM直接到LAN的网桥。这假定在主机上有一个桥接设备,其中有一个或多个主机物理NIC被奴役。来宾虚拟机将有vnetN的名字,也可以使用<目标>元素(见覆盖创建了一个相关的tun设备 覆盖目标元素)。tun设备将被束缚到网桥。IP范围/网络配置是LAN上使用的。这提供了客户VM完全进入和传出网络访问就像一个物理机。

在Linux系统上,桥接设备通常是标准的Linux主机桥。在支持开放虚拟交换机的主机,也可以通过添加一个连接到一个开放的vSwitch桥装置<virtualport type='openvswitch' />到接口定义。(自0.9.11)。开放的vSwitch类型virtualport接受它的两个参数`<parameters

元素- 一个interfaceid是用来唯一标识特定的接口打开的vSwitch(如果你不指定一个,随机interfaceid会为你生成当你第一次定义接口标准的UUID ),以及一个可选的profileid`它被发送到打开的vSwitch的接口"端口配置文件"。

... ...
<devices>
  ... ...
  <interface type ='bridge'>
    <source bridge ='br0' />
  </interface>
  <interface type ='bridge'>
    <source bridge ='br1' />
    <target dev ='vnet7' />
    <mac address ="00:11:22:33:44:55"/>
  </interface>
  <interface type ='bridge'>
    <source bridge ='ovsbr' />
    <virtualport type ='openvswitch'>
      <parameters profileid ='menial'interfaceid ='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f' />
    </virtualport>
  </interface>
  ... ...
</device>
... ...

在支持上的内核侧开放虚拟交换机和具有Midonet主机代理配置的主机,也可以通过添加连接到'midonet'桥装置 <virtualport type='midonet' />到接口定义。(自1.2.13)。该Midonet virtualport类型需要 interfaceid在其属性 <parameters>的元素。此接口标识是指定虚拟网络拓扑中的哪个端口将绑定到接口的UUID。

... ...
<devices>
  ... ...
  <interface type ='bridge'>
    <source bridge ='br0' />
  </interface>
  <interface type ='bridge'>
    <source bridge ='br1' />
    <target dev ='vnet7' />
    <mac address ="00:11:22:33:44:55"/>
  </interface>
  <interface type ='bridge'>
    <source bridge ='midonet' />
    <virtualport type ='midonet'>
      <parameters interfaceid ='0b2d64da-3d0e-431e-afdd-804415d6ebbb' />
    </virtualport>
  </interface>
  ... ...
</device>
... ...
用户空间SLIRP堆栈

提供具有NAT的虚拟LAN到外部世界。虚拟网络具有DHCP和DNS服务,并给客人地址的虚拟机无法启动10.0.2.15。默认路由器将 10.0.2.2和DNS服务器将是10.0.2.3。对于需要其虚拟机具有外向访问权限的非特权用户,此网络是唯一的选择。

... ...
<devices>
  <interface type ='user' />
  ... ...
  <interface type ='user'>
    <mac address ="00:11:22:33:44:55"/>
  </interface>
</device>
... ...
通用以太网连接

提供管理员执行任意脚本以将访客的网络连接到LAN的方法。guest将有一个使用vnetN名称创建的tun设备,也可以使用<target>元素覆盖。在创建tun设备之后,将运行一个shell脚本,该脚本可以做任何需要的主机网络集成。默认情况下,此脚本称为/ etc/qemu-ifup,但可以覆盖。

... ...
<devices>
  <interface type ='ethernet' />
  ... ...
  <interface type ='ethernet'>
    <target dev ='vnet7' />
    <script path ='/ etc/qemu-ifup-mynet' />
  </interface>
</device>
... ...
直接安装在物理接口

提供虚拟机的NIC直接连接到主机的给定物理接口。 由于0.7.7(QEMU和KVM只)
此安装程序需要Linux的驱动程序macvtap是可用。(由于Linux 2.6.34)。 其中一个模式'VEPA'(的 "虚拟以太网端口聚合"),"桥"或"私人",可以选择用于macvtap装置的操作模式,"VEPA'是默认模式。各个模式导致分组的递送行为如下:

如果模型类型设置为virtio和接口的trustGuestRxFilters属性设置为yes,到接口的MAC地址进行更改,单播/组播来宾接收滤波器和VLAN设置将主机上的监测,并传播到相关macvtap设备(自1.2 0.10)。如果trustGuestRxFilters未设置,或不支持在使用该装置的模型,企图更改到MAC地址从位侧始发将导致非正常工作的网络连接。

vepa

所有VM的数据包发送到外部网桥。目的地是与数据包来源相同的主机上的VM的数据包由具有VEPA能力的桥发送回主机(今天的桥通常不具有VEPA能力)。

bridge

目的地位于与它们源自的主机相同的主机上的数据包将直接传递到目标macvtap设备。源设备和目标设备都需要处于桥接模式,以便直接交付。如果它们中的任一个是在`vepa`模式下,需要一个VEPA能够桥梁。

private

所有数据包都将发送到外部网桥,并且只有通过外部路由器或网关发送到同一主机上的目标VM,并且该设备将其发送回主机时,才会将其传送到该主机。如果源设备或目标设备是在此过程中是跟随`private`模式。

passthrough

此功能将SRIOV能力的NIC的虚拟功能直接附加到VM,而不会失去迁移能力。所有数据包发送到配置的网络设备的VF/IF。根据设备的功能,可能需要额外的先决条件或限制; 例如,在Linux上,这需要内核2.6.38或更高版本。自0.9.2

... ...
<devices>
  ... ...
  <interface type ='direct'trustGuestRxFilters ='no'>
    <source dev ='eth0'mode ='vepa' />
  </interface>
</device>
... ...

直接连接的虚拟机的网络访问可以由主机的物理接口连接到的硬件交换机管理。

如果交换机符合IEEE 802.1Qbg标准,则接口可以具有如下所示的附加参数。在IEEE 802.1Qbg标准中更详细地记录了virtualport元件的参数。这些值是网络特定的,应由网络管理员提供。在802.1Qbg术语中,虚拟站接口(VSI)表示虚拟机的虚拟接口。自0.8.2

请注意,IEEE 802.1Qbg要求VLAN ID的值为非零值。

managerid

VSI Manager ID标识包含VSI类型和实例定义的数据库。这是一个整数值,值0保留。

typeid

VSI类型ID标识表征网络接入的VSI类型。VSI类型通常由网络管理员管理。这是一个整数值。 

typeidversion

VSI类型版本允许多个版本的VSI类型。这是一个整数值。 

instanceid

VSI实例ID标识符是在创建VSI实例(即虚拟机的虚拟接口)时生成的。这是一个全球唯一的标识符。 

... ...
<devices>
  ... ...
  <interface type ='direct'>
    <source dev ='eth0.2'mode ='vepa' />
    <virtualport type ="802.1Qbg">
      <parameters managerid ="11"typeid ="1193047"typeidversion ="2"instanceid ="09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f"/>
    </virtualport>
  </interface>
</device>
... ...

如果交换机符合IEEE 802.1Qbh标准,则接口可以具有如下所示的附加参数。这些值是网络特定的,应由网络管理员提供。自0.8.2

profileid

配置文件ID包含要应用于此接口的端口配置文件的名称。此名称由端口配置文件数据库解析为来自端口配置文件的网络参数,这些网络参数将应用于此接口。 

... ...
<devices>
  ... ...
  <interface type ='direct'>
    <source dev ='eth0'mode ='private' />
    <virtualport type ='802.1Qbh'>
      <parameters profileid ='finance' />
    </virtualport>
  </interface>
</device>
... ...
PCI直通

在首先可选地将设备的MAC地址设置为所配置的值之后,使用通用设备直通将客户机直接分配给PCI网络设备(由<source>元素指定),并且使用可选地将设备与具有802.1Qbh能力的交换机相关联指定<virtualport>元素(参见上面为type ='direct'网络设备给出的virtualport的示例)。请注意 - 由于标准单端口PCI以太网卡驱动程序设计的限制,只能以这种方式分配SR- IOV(单根I/O虚拟化)虚拟功能(VF)设备; 一个标准的单端口PCI或PCIe以太网卡分配给来宾,使用传统的<hostdev>设备定义和 自0.9.11

使用VFIO设备分配,而不是传统的/传统的KVM设备分配(VFIO是设备分配的一个新方法,该方法是用UEFI安全引导兼容),类型='hostdev'接口可具有可选的driver与子元素name设置为属性"vfio"。要使用传统的KVM设备分配可以设置name为"KVM"(或者干脆省略<driver>,因为"KVM"元素,是目前默认值)。 自1.0.5(仅限QEMU和KVM,需要内核3.6或更新版本)

注意,网络设备的这种"智能直通"非常类似于标准<hostdev>设备的功能,区别在于该方法允许为直通设备指定MAC地址和<虚拟端口>。如果不需要这些功能 ,如果您有一个不支持SR-IOV的标准单端口PCI,PCIe或USB网卡(因此在分配给来宾域之后的复位期间将无论如何都会丢失已配置的MAC地址) ),或者如果您使用的版本低于0.9.11的libvirt,则应使用标准<hostdev>将设备分配给guest虚拟机,而不是<interface type ='hostdev'/>。

一个标准的<hostdev>设备的功能相似,当managed是"是",它是从主机分离被传递到客人面前,并重新连接到来宾退出后的主机。如果managed省略或"否",对用户负责调用virNodeDeviceDettach (或virsh nodedev-detach启动位或热插拔设备,和前)virNodeDeviceReAttach (或virsh nodedev- reattach热拔出之后)或停止位。

... ...
<devices>
  <interface type ='hostdev'managed ='yes'>
    <driver name ='vfio' />
    <source>
      <address type ='pci'domain ='0x0000'bus ='0x00'slot ='0x07'function ='0x0' />
    </source>
    <mac address='52:54:00:6d:90:02' />
    <virtualport type ='802.1Qbh'>
      <parameters profileid ='finance' />
    </virtualport>
  </interface>
</device>
... ...
组播隧道

组播组被设置为表示虚拟网络。网络设备在同一组播组中的任何虚拟机都可以互相通信,甚至跨越主机。此模式也可供非特权用户使用。没有默认的DNS或DHCP支持和没有输出网络访问。要提供传出网络访问,其中一个VM应该有一个第二个NIC连接到前4个网络类型之一,并做适当的路由。组播协议与用户模式linux客户端使用的组播协议兼容。所使用的源地址必须来自多播地址块。

... ...
<devices>
  <interface type ='mcast'>
    <mac address='52:54:00:6d:90:01' />
    <source address ='230.0.0.1'port ='5558' />
  </interface>
</device>
... ...
TCP隧道

TCP客户端/服务器架构提供虚拟网络。一个VM提供网络的服务器端,所有其他VMS配置为客户端。所有网络流量都通过服务器在VM之间路由。此模式也可供非特权用户使用。没有默认的DNS或DHCP支持和没有输出网络访问。要提供传出网络访问,其中一个VM应该有一个第二个NIC连接到前4个网络类型之一,并做适当的路由。

... ...
<devices>
  <interface type ='server'>
    <MAC地址= '52:54:00:22:C9:42' />
    <source address ='192.168.0.1'port ='5558' />
  </interface>
  ... ...
  <interface type ='client'>
    <mac address='52:54:00:8b:c9:51' />
    <source address ='192.168.0.1'port ='5558' />
  </interface>
</device>
... ...
UDP单播隧道

UDP单播架构提供了一个虚拟网络,它使用QEMU的UDP基础设施实现QEMU实例之间的连接。xml"源"地址是将从运行QEMU的主机发送UDP套接字数据包的端点地址。xml"本地"地址是UDP套接字数据包将从QEMU主机发起的接口的地址。 自1.2.20

... ...
<devices>
  <interface type ='udp'>
    <MAC地址= '52:54:00:22:C9:42' />
    <source address ='127.0.0.1'port ='11115'>
      <local address ='127.0.0.1'port ='11116' />
    </source>
  </interface>
</device>
... ...
设置网卡模式
... ...
<devices>
  <interface type ='network'>
    <source network ='default' />
    <target dev ='vnet1' />
    **<model type ='ne2k_pci' />**
  </interface>
</device>
... ...

对于支持此功能的虚拟机管理程序,可以设置模拟网络接口卡的型号。

对值type不被libvirt的特别限定,但由什么底层管理程序支撑件(如果有的话)。对于QEMU和KVM,您可以使用以下命令获取支持的型号列表:

qemu -net nic,model =?/ dev/null
qemu-kvm -net nic,model =?/ dev/null

QEMU和KVM的典型值包括:ne2k_isa i82551 i82557b i82559er ne2k_pci pcnet rtl8139 e1000 virtio

设置网卡驱动程序特定的选项
... ...
<devices>
  <interface type ='network'>
    <source network ='default' />
    <target dev ='vnet1' />
    <model type ='virtio' />
    **<driver name ='vhost'txmode ='iothread'ioeventfd ='on'event_idx ='off'queues ='5'rx_queue_size ='256'>
      <host csum ='off'gso ='off'tso4 ='off'tso6 ='off'ecn ='off'ufo ='off'mrg_rxbuf ='off' />
      <guest csum ='off'tso4 ='off'tso6 ='off'ecn ='off'ufo ='off' />
    </driver>
    **
  </interface>
</device>
... ...

某些NIC可能有可调的驱动程序特定选项。这些被设置为属性driver的接口定义的子元素。目前,下列属性可为"virtio"网卡驱动程序:

name

 可选`name`属性力量哪种类型的后端驱动程序的使用。该值可以是"qemu"(用户空间后端)或"vhost"(内核后端,这要求vhost模块由内核提供); 尝试要求没有内核支持的vhost驱动程序将被拒绝。如果此属性不存在,则域默认为"vhost"(如果存在),但静默地回退到"qemu"而没有错误。 自0.8.8(仅限QEMU和KVM)
 对于类型的接口='hostdev'(PCI直通设备)的`name`属性可任选地设置为"vfio"或"KVM"。"vfio"告诉libvirt使用VFIO设备分配,而不是传统的KVM设备分配(VFIO是一种与UEFI安全启动兼容的新设备分配方法),"kvm"告诉libvirt使用直接由kvm内核模块(默认当前是"kvm",但是可以改变)。 自1.0.5(仅限QEMU和KVM,需要内核3.6或更新版本)
 用于type ='vhostuser"的接口,该`name` 属性将被忽略。使用的后端驱动程序总是vhost-user。 

txmode

 该`txmode`属性指定如何处理数据包传输时的发送缓冲区已满。该值可以是"iothread"或"timer"。 因为0.8.8(QEMU和仅KVM)  

如果设置为'iothread',包TX是在iothread全部完成在驾驶员的下半部(此选项转换成加入"TX=BH"到QEMU命令行- device已将virtio -net-pci选项)。

如果设置为'timer',tx工作在qemu中完成,如果有比现在可以发送的更多的tx数据,在qemu继续做其他事情之前设置一个定时器; 当定时器触发时,会再次尝试发送更多数据。

根据添加该选项的qemu开发人员的结果差异是:"bh使得tx更加异步并减少延迟,但潜在地导致更多的处理器带宽争用,因为执行tx的cpu不一定是客户端生成分组的cpu "。

一般来说,你应该离开这个选项,除非你很确定你知道你在做什么。 ioeventfd

 这个可选的属性允许用户设置 [ 域I/O操作的异步](https://patchwork.kernel.org/patch/43390/)接口设备。默认值由管理程序自行决定。接受的值为"on"和"off"。启用此选项允许qemu在单独的线程处理I/O时执行VM。通常,在I/O期间遇到高系统CPU利用率的客户将受益于此。另一方面,在过载的主机上,它可以增加客户I/O延迟。 由于0.9.3(QEMU和KVM只),  

一般来说,你应该独自离开这个选项,除非你非常确定你知道自己在做什么。 event_idx

 的`event_idx`属性控制设备的事件处理的某些方面。该值可以是"开"或"关" - 如果它是打开的,它将减少客户端的中断和退出的数量。默认值由QEMU确定; 通常如果支持该功能,默认为开。如果存在此行为不是最佳的情况,此属性提供了强制关闭此功能的方法。 由于0.9.5(QEMU和KVM只),  

一般来说,你应该独自离开这个选项,除非你非常确定你知道自己在做什么。 queues

 可选`queues`属性控制要用于任一队列的数量 [多队列已将virtio网](http://www.linux-kvm.org/page/Multiqueue)或[虚拟主机用户](http://libvirt.org/formatdomain.html#elementVhostuser)网络接口。的多个数据包的处理队列的使用需要具有界面`<model type='virtio' />` 元件。每个队列将潜在地由不同的处理器处理,导致高得多的吞吐量。 自从1.0.6(QEMU和KVM只)为Virtio网 自1.2.17虚拟主机用户(QEMU和KVM只)

rx_queue_size

 可选`rx_queue_size`如上所述属性控制已将virtio环的大小为每个队列。默认值是依赖于管理程序的,并且可能在其发行版之间更改。此外,一些管理程序可能对实际价值造成一些限制。例如,最新的QEMU(截至2016-09-01)要求值为[256,1024]范围内的二的幂。 由于2.3.0(QEMU和KVM只),  

一般来说,你应该独自离开这个选项,除非你非常确定你知道自己在做什么。

可以使用以下子元素配置主机和guest虚拟机的卸载选项:

host

 的`csum`,`gso`,`tso4`, `tso6`,`ecn`和`ufo` 具有可能的属性值`on` 和`off`可用于关闭主机卸载选项。默认情况下,支持的卸载由QEMU启用。 由于1.2.9(仅QEMU), 该`mrg_rxbuf`属性可以用来控制主机端可合并的RX缓冲区。可能的值 `on`(默认)和`off`。 自1.2.13(仅QEMU)

guest

 的`csum`,`tso4`, `tso6`,`ecn`和`ufo` 具有可能的属性值`on` 和`off`可用于关闭访客卸载选项。默认情况下,支持的卸载由QEMU启用。 自1.2.9(仅QEMU)
设置网络特定的后端选项
... ...
<devices>
  <interface type ='network'>
    <source network ='default' />
    <target dev ='vnet1' />
    <model type ='virtio' />
    **<backend tap ='/ dev/net/tun'vhost ='/ dev/vhost-net' />**
    <driver name ='vhost'txmode ='iothread'ioeventfd ='on'event_idx ='off'queues ='5' />
    **<tune>
      <sndbuf> 1600 </sndbuf>
    </tune>**
  </interface>
</device>
... ...

用于调谐网络的后端,所述backend可以使用的元素。该vhost属性可以覆盖默认的虚拟主机设备路径(/dev/vhost- net)与设备virtio模型。该tap属性覆盖TUN/TAP设备路径(默认 /dev/net/tun)网络和桥接接口。这在会话模式下不起作用。自1.2.9

对于自来水设备也有sndbuf可以在主机发送调整缓冲区的大小元素。自0.8.8

覆盖目标元素
... ...
<devices>
  <interface type ='network'>
    <source network ='default' />
    **<target dev ='vnet1' />**
  </interface>
</device>
... ...

如果未指定目标,某些管理程序将自动为已创建的tun设备生成名称。这个名字也可以手动指定,但是名字不应该以'互联星空'或'VIF"开始,这是由libvirt的和某些虚拟机管理程序保留的前缀。使用这些前缀的手动指定的目标可能会被忽略。

请注意,对于LXC容器,这定义了主机侧的接口的名称。自1.2.7,以限定在来宾侧的设备的名称,guest 元素应该被使用,如在下面的代码片断:

... ...
<devices>
  <interface type ='network'>
    <source network ='default' />
    **<guest dev ='myeth' />**
  </interface>
</device>
... ...
指定引导顺序
... ...
<devices>
  <interface type ='network'>
    <source network ='default' />
    <target dev ='vnet1' />
    **<boot order ='1' />**
  </interface>
</device>
... ...

对于支持此操作的管理程序,可以设置要用于网络引导的特定NIC。该order属性决定了设备将引导顺序过程中尝试的顺序。如果每个设备boot的元素不能与一般的引导元素一起使用 BIOS引导程序部分。 自0.8.8

接口ROM BIOS配置
... ...
<devices>
  <interface type ='network'>
    <source network ='default' />
    <target dev ='vnet1' />
    **<rom bar ='on'file ='/ etc/fake/boot.bin' />**
  </interface>
</device>
... ...

对于支持此操作的管理程序,您可以更改PCI网络设备的ROM如何显示给guest虚拟机。该bar 属性可以被设置为"开"或"关",并确定器件的ROM是否将在客人的存储器映射可见。(在PCI文档中,"rombar"设置控制是否存在ROM的基址寄存器)。如果没有指定rom bar,将使用qemu默认值(旧版本的qemu使用默认值"off",而较新的qemus默认值为"on")。可选file属性用于指向一个二进制文件将提交给来宾作为设备的ROM BIOS。这对于为网络设备提供替代的引导ROM是有用的。 由于0.9.10(QEMU和KVM只)。

在驱动程序域中设置网络后端
... ...
<devices>
  ... ...
  <interface type ='bridge'>
    <source bridge ='br0' />
    **<backenddomain name ='netvm' />**
  </interface>
  ... ...
</device>
... ...

可选的backenddomain元素允许指定接口运行的后端域(又名驱动程序域)。使用 name属性来指定后端域名。您可以使用它在域之间创建直接网络链接(因此数据不会通过主机系统)。使用类型"以太网"创建纯网络链接,或使用类型"网桥"连接到后端域中的网桥。 自1.2.13(仅Xen)

服务质量
... ...
<devices>
  <interface type ='network'>
    <source network ='default' />
    <target dev ='vnet0' />
    **<bandwidth>
      <inbound average ='1000'peak ='5000'floor ='200'burst ='1024' />
      <outbound average ='128'peak ='256'burst ='256' />
    </bandwidth>**
  </interface>
</device>
... ...

这部分接口XML提供了设置服务质量。输入和输出流量可以独立成形。的bandwidth元素和子元素中描述的QoS的网络的XML部分。

设置VLAN标签(在支持的网络类型只)
... ...
<devices>
  <interface type ='bridge'>
    **<VLAN> **
      **<标签ID='42' /> **
    **</VLAN>**
    <source bridge ='ovsbr0' />
    <virtualport type ='openvswitch'>
      <parameters interfaceid ='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f' />
    </virtualport>
  </interface>
  <interface type ='bridge'>
    **<VLAN中继='是'> **
      **<标签ID='42' /> **
      **<标签ID ='123'nativeMode ='无标记' /> **
    **</VLAN>**
    ... ...
  </interface>
</device>
... ...

如果(且仅当)由客人使用的网络连接支持VLAN标记透明的客人,一个可选的<vlan>元素可以指定一个或多个VLAN标签应用于客户的网络流量自0.10.0。支持来宾透明VLAN标记的网络连接包括连接到一个开放的vSwitch桥1)型='桥'界面 自0.10.0,2)SRIOV虚函数(VF),通过类型='hostdev'(直接设备分配),用于自0.10.0,和3)通过类型中使用SRIOV虚拟转发="直接"与模式='直通'(macvtap"中继"模式)自从1.3.5。所有其他的连接类型,包括标准Linux的桥梁和libvirt的自己的虚拟网络, 支持它。802.1Qbh(vn- link)和802.1Qbg(VEPA)交换机提供自己的方式(在libvirt之外)将访客流量标记到特定的VLAN。每个标记在单独给定<tag>的子元素<vlan>(例如:<tag id='42' />)。对于多个标记的VLAN中继(其仅在打开虚拟交换机连接支持),多个<tag>子元素可指定,这意味着该用户要做VLAN中继接口上为所有指定标签。在单个标记的VLAN中继需要的情况下,可选属性trunk='yes'可以被添加到顶层 <vlan>元素,以区别于正常标记单个标签的中继。

对于使用Open vSwitch上的网络连接,也可以配置"本地标记"和"原生未标记的'VLAN模式 自1.1.0。这是通过可选的完成nativeMode对属性<tag>子元素:nativeMode 也可以设置为'标记'或'无标记'。在id 该属性<tag>包含子元素nativeMode哪个VLAN被认为是此接口的"本土"VLAN组,以及nativeMode属性决定该VLAN与否的流量将被标记。

修改虚拟链路状态
... ...
<devices>
  <interface type ='network'>
    <source network ='default' />
    <target dev ='vnet0' />
    **<link state ='down' />**
  </interface>
</device>
... ...

此元素提供设置虚拟网络链路的状态的手段。对于属性可能的值stateupdown。如果down被指定为值,界面的行为就好像它有网络电缆断开。如果此元素未指定默认行为是有链路状态up。 自0.9.5

MTU配置
... ...
<devices>
  <interface type ='network'>
    <source network ='default' />
    <target dev ='vnet0' />
    **<mtu size ='1500' />**
  </interface>
</device>
... ...

此元素提供设置虚拟网络链路的MTU的手段。目前只有一个属性size,它接受一个非负整数,其指定的MTU大小的接口。 自3.1.0

IP配置
... ...
<devices>
  <interface type ='network'>
    <source network ='default' />
    <target dev ='vnet0' />
    **<IP地址="192.168.122.5"字头= '24' /> **
    **<IP地址="192.168.122.5"字头= '24'同行= '10 .0.0.10' /> **
    **<路线家庭='IPv4的'地址='192.168 .122.0'前缀= '24'网关="192.168.122.1"/> **
    **<路线家庭='IPv4的'地址='192.168.122.8"网关='192.168.122.1' />**
  </interface>
  ... ...
  <hostdev mode ='capabilities'type ='net'>
    <source>
      <interface> eth0 </interface>
    </source>
    **<IP地址="192.168.122.6"字头= '24' /> **
    **<路线家庭='IPv4的'地址='192.168.122.0'前缀= '24'网关="192.168.122.1"/> **
    **<路线家庭='的IPv4 'address ='192.168.122.8'gateway ='192.168.122.1' />**
  </hostdev>

</device>
... ...

因为1.2.12网络设备和hostdev设备与网络功能可任选地提供的一个或多个IP地址,以在客户的网络设备上设置。注意,一些管理程序或网络设备类型将简单地忽略它们或仅使用第一个。该family属性可被设置为ipv4ipv6,并且 address属性包含的IP地址。可选的prefix是,在网络掩码1位号码,如果没有指定,将自动设置- IPv4的默认前缀是根据网络的"类"(A,B或C -见RFC870)决定,对IPv6默认前缀是64.可选peer属性包含一个点至点网络设备的另一端的IP地址(自2.1.0) 。

因为1.2.12路由元素也可以加入到确定IP路由到在来宾添加。该元素的属性的文档中所描述route的元件的网络定义。这是LXC驱动程序使用的。

... ...
<devices>
  <interface type ='ethernet'>
    **<源/> **
      **<IP地址="192.168.123.1"字头= '24' /> **
      **<IP地址= '10 .0.0.10'前缀= '24'同行="192.168.122.5"/> **
      **<路线家庭='IPv4的'地址="192.168.42.0"字头= '24'网关="192.168.123.4"/> **
    **<源/>**
    ... ...
  </interface>
  ... ...
</device>
... ...

因为2.1.0类型"以太网"的网络设备可任选地提供的一个或多个IP地址和一个或多个路由上设置主机的网络设备的一侧。这些被配置为的子元素<source>的界面的元素,并且具有相同的属性来配置接口(上述)的来宾侧的类似命名的元件。

虚拟主机的用户界面

因为1.2.7虚拟主机用户使QEMU虚拟机和使用的Virtio传输协议其他用户空间进程之间的通信。char dev(例如Unix套接字)用于控制平面,而数据平面基于共享内存。

... ...
<devices>
  <interface type ='vhostuser'>
    <mac address='52:54:00:3b:83:1a' />
    <source type ='unix'path ='/ tmp/vhost1.sock'mode ='server' />
    <model type ='virtio' />
  </interface>
  <interface type ='vhostuser'>
    <mac address='52:54:00:3b:83:lb' />
    <source type ='unix'path ='/ tmp/vhost2.sock'mode ='client' />
    <model type ='virtio' />
    <driver queues ='5' />
  </interface>
</device>
... ...

<source>元件具有与炭设备的类型来指定沿。目前,仅支持type ='unix',其中需要路径(套接字的目录路径)和模式属性。这两个mode='server'mode='client' 支持。虚拟主机用户需要已将virtio模型类型,从而所述 <model>元素是强制性的。

流量过滤与NWFilter

因为0.8.0一个nwfilter轮廓可以被分配到一个领域接口,其允许配置流量过滤规则为虚拟机。见nwfilter更完整的细节文件。

... ...
<devices>
  <interface ...>
    ... ...
    <filterref filter ='clean-traffic' />
  </interface>
  <interface ...>
    ... ...
    <filterref filter ='myfilter'>
      <parameter name ='IP'value ='104.207.129.11' />
      <parameter name ='IP6_ADDR'value ='2001:19f0:300:2102 ::' />
      <parameter name ='IP6_MASK'value='64' />
      ... ...
    </filterref>
  </interface>
</device>
... ...

所述filter属性指定nwfilter使用的名称。可选<parameter>元素可经由传递更多信息的nwfilter指定 namevalue属性。见nwfilter 文档以获取参数信息。

输入设备

输入设备允许与来宾虚拟机中的图形帧缓冲区交互。当启用帧缓冲器时,自动提供输入设备。可以明确地添加附加设备,例如,以提供用于绝对光标移动的图形输入板。

... ...
<devices>
  <input type ='mouse'bus ='usb' />
  <input type ='keyboard'bus ='usb' />
  <input type ='mouse'bus ='virtio' />
  <input type ='keyboard'bus ='virtio' />
  <input type ='tablet'bus ='virtio' />
  <input type ='passthrough'bus ='virtio'>
    <source evdev ='/ dev/input/event1 />
  </input>
</device>
... ...

input

该`input`元素有一个强制属性,则`type`其值可以是"鼠标","平板电脑",(因为1.2.2)"键盘"或(自1.3.0)"直通"。平板电脑提供绝对光标移动,而鼠标使用相对移动。可选的 `bus`属性可以用来提炼的确切设备类型。它需要值"的xen"(半虚拟化),"PS2"和"USB"或(自1.3.0)"为Virtio"。

input元素有一个可选的子元素<address>,可以在设备绑在特定的PCI插槽,上面记载。对于类型passthrough,强制子元素source 必须有一个evdev包含通过给客人传递事件设备的绝对路径属性。(仅限KVM)

集线器设备

集线器是将单个端口扩展为几个端口的设备,使得存在更多可用于将设备连接到主机系统的端口。

... ...
<devices>
  <hub type ='usb' />
</device>
... ...

hub

该`hub`元素有一个强制属性,则`type`其值只能是"USB"。

hub元素有一个可选的子元素<address>type='usb'可在设备绑在特定的控制器,上面记载

图形帧缓存

图形设备允许与客户OS的图形交互。客户端通常会配置一个帧缓冲区或文本控制台,以允许与管理员进行交互。

... ...
<devices>
  <graphics type ='sdl'display =':0.0' />
  <graphics type ='vnc'port ='5904'sharePolicy ='allow-exclusive'>
    <listen type ='address'address ='1.2.3.4' />
  </graphics>
  <graphics type ='rdp'autoport ='yes'multiUser ='yes' />
  <graphics type ='desktop'fullscreen ='yes' />
  <graphics type ='spice'>
    <listen type ='network'network ='rednet' />
  </graphics>
</device>
... ...

graphics

graphics元素具有强制性type 属性,该属性取值sdlvncspicerdpdesktop

sdl

这将显示在主机桌面上的窗口,它可以采取3种可选参数:一个display用于显示使用属性,一个xauth用于身份验证标识属性,以及一个可选的fullscreen属性值,接受 yesno

vnc

启动VNC服务器。的port属性指定的TCP端口号(以-1作为指示,它应该是自动分配的遗留语法)。的autoport属性是表示该TCP端口使用的自动分配的新的优选的句法。该passwd属性提供明文一个VNC密码。如果该passwd属性设置为空字符串,那么VNC接入被禁用。该 keymap属性指定要使用的键盘映射。有可能通过使一个时间戳上设置密码的有效性的限制passwdValidTo='2010-04-09T15:51:00' 假定为UTC。该connected属性允许在更改密码连接的客户端的控制权。VNC接受 keep唯一的价值,因为0.9.3。NB,这可能不被所有管理程序支持。

可选的sharePolicy属性指定的VNC服务器显示共享策略。allow- exclusive允许客户端通过删除其他连接请求独占访问。并行连接多个客户端需要所有客户端请求共享会话(vncviewer: - 共享开关)。这是默认值 。force-shared禁用独占客户端访问,每个连接必须指定-vncviewer的共享开关。ignore欢迎无条件每个连接自1.0.6。

而不是使用监听/端口,QEMU支持socket 听一个Unix域套接字路径属性 自0.8.8。

为VNC的WebSocket功能websocket属性可以被用来指定端口上侦听(与-1意味着自动分配和autoport具有由于安全原因没有作用)由于1.0.6。

spice 自0.8.6

启动SPICE服务器。的port属性指定的TCP端口号(以-1作为指示,它应该是自动分配的遗留语法),而tlsPort给出了一个替代的安全端口号。的autoport 属性是用于表示所需的端口号的自动分配的新的优选的句法。该passwd 属性提供明文密码SPICE。如果该 passwd属性设置为空字符串,那么SPICE访问被禁止。该keymap属性指定要使用的键盘映射。有可能通过使一个时间戳上设置密码的有效性的限制 passwdValidTo='2010-04-09T15:51:00'假定为UTC。

connected属性允许在更改密码连接的客户端的控制权。SPICE接受keep以保持客户端连接,disconnect断开连接的客户端和fail失败修改密码。NB,这可能不被所有管理程序支持。 自0.9.3

defaultMode属性设置默认信道的安全策略,有效值为secureinsecure和默认的any(这是安全的,如果有可能,但回落到不安全的,而不是示数出来,如果没有安全的路径可用)。 自0.9.12

当SPICE配置了正常和TLS安全TCP端口时,可能需要限制每个端口上可运行的通道。这是通过加入一种或多种实现<channel> 的主要内部元件<graphics> 元件和设置mode属性要么 secureinsecure。设置模式属性覆盖作为集由默认值defaultMode属性。(注意,指定 any的方式拒绝该输入的通道会继承反正默认模式。)有效的通道名称包括 maindisplayinputscursorplaybackrecord (所有自0.8.6); smartcard(自0.8.8); 和usbredir(自0.9.12)。

<graphics type ='spice'port =' -  1'tlsPort =' -  1'autoport ='yes'>
  <channel name ='main'mode ='secure' />
  <channel name ='record'mode ='insecure' />
  <image compression ='auto_glz' />
  <streaming mode ='filter' />
  <clipboard copypaste ='no' />
  <mouse mode ='client' />
  <filetransfer enable ='no' />
  <gl enable ='yes' />
</graphics>

Spice支持音频,图像和流的可变压缩设置。这些设置都可以通过访问compression 属性在所有的以下内容:image设置图像压缩(接受auto_glzauto_lzquicglzlzoff),jpeg为JPEG压缩图像通过WAN(接受autoneveralways),zlib用于配置婉图像压缩(接受autoneveralways),并playback 为使音频数据流压缩(接受onoff)。自0.9.1

流模式是通过设定streaming元素,设置其mode属性之一 filteralloff。 自0.9.2

复制和粘贴功能(通过代理香料)被设定 clipboard元素。它默认是启用的,并且可以通过设置来禁用copypaste属性 no。自0.9.3

鼠标模式由设置mouse元件,其设置 mode属性之一serverclient。如果未指定任何模式,将使用qemu默认值(客户端模式)。自0.9.11

文件传输功能(通过香料剂)是使用设置 filetransfer元素。它默认是启用的,并且可以通过设置来禁用enable属性 no。自1.2.2

Spice可以使用OpenGL提供加速的服务器端渲染。您可以启用或用明确禁用OpenGL的支持gl元素,通过设置enable 属性。(QEMU只,自1.3.3)。

rdp

启动RDP服务器。的port属性指定的TCP端口号(以-1作为指示,它应该是自动分配的遗留语法)。的autoport属性是表示该TCP端口使用的自动分配的新的优选的句法。该replaceUser属性是一个布尔决定是否允许虚拟机的多个并发连接。的multiUser属性是一个布尔判定现有的连接是否必须被丢弃和一个新的连接必须由VRDP服务器,当新的客户端在单一连接模式连接来建立。

desktop

此值为VirtualBox域暂时保留。它在主机桌面上显示一个窗口,类似于"sdl",但使用VirtualBox查看器。就像"SDL",它接受可选属性displayfullscreen

图形设备采用的是<listen>设置在那里设备应该监听客户端。它有一个强制属性 type,指定监听类型。只vncspicerdp支持<listen>元件。由于0.9.4。可用类型有:

address

讲述使用在指定的地址上的图形设备 address属性,其中将包含可以是IP地址或主机名(其将通过DNS查询解析为IP地址),以监听。

它是可以省略address属性,以便使用从配置文件的地址自1.3.5。

address属性复制为listen 在属性graphics元素向后兼容性。如果两者都提供,它们必须相等。

network

这是用来指定在现有网络network 从配置的网络中的libvirt的名单属性。命名网络配置将被检查,以确定一个合适的监听地址和该地址将被存储在实时XML address 属性。例如,如果该网络在它的配置的IPv4地址(例如,如果它有一个向前型的routenat或没有向前型(分离)),在网络的配置中列出的第一IPv4地址将被使用。如果网络描述主桥,则将使用与该桥设备相关联的第一IPv4地址,并且如果网络描述了"直接"(macvtap)模式之一,则第一转发开关的第一IPv4地址将是用过的。

socket 自2.0.0(仅限QEMU)

这个listen类型告诉图形服务器在unix socket上监听。属性socket包含Unix套接字的路径。如果省略此属性,libvirt将为您生成此路径。通过图形类型支持vncspice

对于vnc图形向后兼容的socket第一个属性listen元素被复制为socket在属性graphics 元素。如果graphics元素包含socket 属性的所有listen元素将被忽略。

none 自2.0.0(仅限QEMU)

这个listen类型没有任何其他属性。Libvirt支持通过我们的API virDomainOpenGraphics()和virDomainOpenGraphicsFD()传递文件描述符。如果使用这个类型,并且图形设备不在任何地方监听,则不允许使用其他侦听类型。您需要使用两个API之一将FD传递到QEMU,以便连接到此图形设备。通过图形类型支持vncspice

视频设备

视频设备。

... ...
<devices>
  <video>
    <model type ='vga'vram ='16384'heads ='1'>
      <acceleration accel3d ='yes'accel2d ='yes' />
    </model>
  </video>
</device>
... ...

video

video元件是用于描述视频设备的容器。为了向下兼容,如果没有video 设置,但有一个graphics域的XML,然后libvirt的将添加默认video根据客人的类型。

对于类型的客人,"KVM",默认的video是: type与价值"卷云",vram值为"16384"和heads值为"1"。默认情况下,在域XML的第一个视频设备是主要的,但可选属性primary(自1.0.2)与价值'是'可以用来标记在多个视频设备的情况下,第一。非主必须是"QXL"的类型或(自2.4.0)"已将virtio"。

model

model元素具有强制性type 属性,该属性取值"VGA","卷云","vmvga","Xen的","VBOX","QXL"(自0.8.6),或"为Virtio"(自1.3.0视)在管理程序功能可用。

您可以提供视频内存kibibytes使用量(1024字节的块)vram。这仅适用于客户类型"libxl","vz","qemu","vbox","vmx"和"xen"。如果没有提供值,则使用默认值。如果大小不是2的幂,它将舍入到最接近的一个。

屏幕的数目可以使用设置heads。仅支持"vz","kvm","vbox"和"vmx"的guest虚拟机类型。

对于客户类型"kvm"或"qemu"和模型类型"qxl",有可选属性。属性ram( 因为1.0.2)指定主杆的大小,而属性vram指定了次要的小型。如果ram或者vram未提供则使用默认值。该ram还应四舍五入到两个作为动力vram。也有可选属性 vgamem(因为1.2.11)来设置VGA帧缓冲区的大小为QXL装置的后备模式。属性vram64(自1.3.3)扩展二次酒吧,并使其定址为64bit显存。

acceleration

 配置是否应启用视频加速。 

accel2d

启用2D加速(仅适用于VBOX的驱动程序, 因为0.7.1)

accel3d

启用3D加速度(VBOX的驱动程序 ,因为0.7.1,QEMU驱动程序 自1.3.0)

address

 可选`address`子元素可用于视频设备绑到特定PCI插槽。 

控制台,串口,并口和沟道器件

字符设备提供了与虚拟机交互的方式。半虚拟化控制台,串行端口,并行端口和通道都被归类为字符设备,因此使用相同的语法表示。

... ...
<devices>
  <parallel type ='pty'>
    <source path ='/ dev/pts/2' />
    <target port ='0' />
  </parallel>
  <serial type ='pty'>
    <source path ='/ dev/pts/3' />
    <target port ='0' />
  </serial>
  <serial type ='file'>
    <source path ='/ tmp/file'append ='on'>
      <seclabel model ='dac'relabel ='no' />
    </source>
    <target port ='0' />
  </serial>
  <console type ='pty'>
    <source path ='/ dev/pts/4' />
    <target port ='0' />
  </console>
  <channel type ='unix'>
    <source mode ='bind'path ='/ tmp/guestfwd' />
    <target type ='guestfwd'address='10 .0.2.1'port ='4600' />
  </channel>
</device>
... ...

在每个指令中,顶层元素名称(并行,串行,控制台,通道)描述了如何向客户机呈现设备。客人接口被配置target元素。

呈现给主机的接口在特定type 的顶级元素的属性。主机接口被配置source元素。

source元素可以包含一个可选的 seclabel替代该标签在承受道路上所做的那样。如果此元素不存在,该防伪标签是从每个域设置继承

如果接口type呈现给主机为"文件",则该source元件可以含有一个可选属性 append,用于指定是否在文件中的信息应在域重启被保留。允许的值为"on"和"off"(默认值)。由于1.3.1。

不管type,字符设备可以具有与它们相关联的可选的日志文件。这是通过一个表达log子元件,具有一个 file属性。此外,还可以是append 这需要上述相同的值属性。 由于1.3.3。

... ...
<log file ="/ var/log/libvirt/qemu/guestname-serial0.log"append ="off"/>
... ...

每一个字符设备元素有一个可选的子元素<address>,可以在设备绑在特定的控制器或PCI插槽。

客户接口

字符设备将自身作为以下类型之一呈现给客户。

并口
... ...
<devices>
  <parallel type ='pty'>
    <source path ='/ dev/pts/2' />
    <target port ='0' />
  </parallel>
</device>
... ...

target可以有一个port属性,它指定的端口号。端口从0开始编号。通常有0,1或2个并行端口。

串口
... ...
<devices>
  <serial type ='pty'>
    <source path ='/ dev/pts/3' />
    <target port ='0' />
  </serial>
</device>
... ...

target可以有一个port属性,它指定的端口号。端口从0开始编号。通常有0,1或2个串行端口。此外,还有一个可选的 type属性,因为1.0.2 有其价值三个选择,一个是isa-serial,那么usb-serial一个和最后一个是pci- serial。如果type丢失,isa-serial将默认使用。对于usb-serial一个可选的子元素 <address/>type='usb'能装置绑在特定的控制器,上面记载。同样地 ,pci-serial可以用来将设备连接到PCI总线(自1.2.16)。再次,它具有可选子元素<address/>type='pci'到PCI总线上选择所希望的位置。

控制台

控制台元素用于表示交互式控制台。根据使用的guest虚拟机的类型,控制台可能是半虚拟化设备,或者它们可能是串行设备的克隆,根据以下规则:

  • 如果没有targetType属性设置,则默认设备类型根据虚拟机管理程序的规则。当重新查询进入libvirt的XML时,将添加默认类型。对于完全虚拟化的客户机,默认设备类型通常是串行端口。
  • 如果该targetType属性是serial,那么,如果没有<serial>元件存在,控制台元件将被复制到串行元件。如果一个<serial> 元素不存在,控制台元件将被忽略。
  • 如果该targetType属性不serial,它将被正常处理。
  • 只有第一console元件可以使用targetTypeserial。辅助控制台必须全部被半虚拟化。
  • 上S390中,console元件可以使用 targetTypesclpsclplm (行模式)。SCLP是S390的本机控制台类型。没有与SCLP控制器相关的控制器。 自1.0.2

已将virtio一个控制台设备在来宾暴露为/ dev/HVC [0-7](有关详细信息,请参阅 http://fedoraproject.org/wiki/Features/VirtioSerial) 由于0.8.3

... ...
<devices>
  <console type ='pty'>
    <source path ='/ dev/pts/4' />
    <target port ='0' />
  </console>

  <! -  KVM virtio console  - >
  <console type ='pty'>
    <source path ='/ dev/pts/5' />
    <target type ='virtio'port ='0' />
  </console>
</device>
... ...

... ...
<devices>
  <! -  KVM S390 sclp console  - >
  <console type ='pty'>
    <source path ='/ dev/pts/1' />
    <target type ='sclp'port ='0' />
  </console>
</device>
... ...

如果控制台是作为一个串行端口,该target 元件具有相同的属性作为用于串行端口。通常只有1个控制台。

通道

这表示主机和客户之间的专用通信信道。

... ...
<devices>
  <channel type ='unix'>
    <source mode ='bind'path ='/ tmp/guestfwd' />
    <target type ='guestfwd'address='10 .0.2.1'port ='4600' />
  </channel>

  <! -  KVM virtio channel  - >
  <channel type ='pty'>
    <target type ='virtio'name ='arbitrary.virtio.serial.port.name' />
  </channel>
  <channel type ='unix'>
    <source mode ='bind'path ='/ var/lib/libvirt/qemu/f16x86_64.agent' />
    <target type ='virtio'name ='org.qemu.guest_agent.0'state ='connected' />
  </channel>
  <channel type ='spicevmc'>
    <target type ='virtio'name ='com.redhat.spice.0' />
  </channel>
</device>
... ...

这可以以各种方式实现。信道的具体类型是在给定type的属性 target元素。不同的信道类型具有不同 target的属性。

guestfwd

客户端向给定IP地址和端口发送的TCP流量被转发到主机上的通道设备。该`target` 元素必须具有`address`和`port`属性。 自0.7.3

virtio

半虚拟化virtio通道。通道暴露在/ dev /下VPORT *客人,如果可选元素`name`被指定为/ dev /已将virtio端口/ $名称(更多信息,请参阅 [http://fedoraproject.org/wiki/Features/VirtioSerial](http://fedoraproject.org/wiki/Features/VirtioSerial))。可选的元素`address`可以配合通道到一个特定的`type='virtio-serial'` 控制器,[上面记载](http://libvirt.org/formatdomain.html#elementsAddress)。随着QEMU,如果`name`是"org.qemu.guest_agent.0",然后libvirt的可以安装在来宾一个来宾代理交互,如来宾关机或文件系统的静止动作。 自从0.7.7,来宾代理交互自0.9.10此外,因为1.0.6 有可能有已将virtio UNIX渠道生成的源路径自动。这在qemu客户代理的情况下非常有用,用户通常不关心源路径,因为libvirt与客户代理通信。如果用户想要使用此功能,他们应该离开`<source>`元素了。由于1.2.11的通道已将virtio积极XML可能包含一个可选的 `state`,它反映在客户的过程是否处于活动状态的通道上属性。这是仅输出属性。可能的值`state`属性是 `connected`和`disconnected`。 

xen

半虚拟化Xen通道。通道在客户端中作为Xen控制台显示,但使用名称标识。Xen的通道设置和消费依赖于软件和配置在客人(更多信息,请参阅[http://xenbits.xen.org/docs/unstable/misc/channel.txt](http://xenbits.xen.org/docs/unstable/misc/channel.txt))。通道源路径语义与virtio目标类型相同。在`state`不支持的属性,因为Xen的渠道缺乏必要的探测机制。 自2.3.0

spicevmc

半虚拟化SPICE通道。该域还必须有一个SPICE服务器作为[图形设备](http://libvirt.org/formatdomain.html#elementsGraphics),在横跨点主机小猪背上的消息`main`渠道。该`target` 元素必须存在,与属性`type='virtio'`; 可选属性`name`控制客人将如何访问的通道,默认为`name='com.redhat.spice.0'`。可选的`address`元素可以配合通道到一个特定的`type='virtio-serial'`控制器。 自0.8.8
主机接口

字符设备将自身作为以下类型之一呈现给主机。

域日志文件

这将禁用字符设备上的所有输入,并将输出发送到虚拟机的日志文件中

... ...
<devices>
  <console type ='stdio'>
    <target port ='1' />
  </console>
</device>
... ...
设备日志文件

打开文件,并将发送到字符设备的所有数据写入文件。

... ...
<devices>
  <serial type ="file">
    <source path ="/ var/log/vm/vm-serial.log"/>
    <target port ="1"/>
  </serial>
</device>
... ...
虚拟控制台

将字符设备连接到虚拟控制台中的图形帧缓冲区。这通常通过特殊的热键序列访问,例如"ctrl + alt + 3"

... ...
<devices>
  <serial type ='vc'>
    <target port ="1"/>
  </serial>
</device>
... ...
空设备

将字符设备连接到空格。不向输入提供数据。写入的所有数据都将被丢弃。

... ...
<devices>
  <serial type ='null'>
    <target port ="1"/>
  </serial>
</device>
... ...
伪TTY

使用/ dev/ptmx分配伪TTY。诸如"virsh控制台"的合适的客户端可以连接以与本地的串行端口交互。

... ...
<devices>
  <serial type ="pty">
    <source path ="/ dev/pts/3"/>
    <target port ="1"/>
  </serial>
</device>
... ...

NB特殊情况如果<console type ='pty'>,则TTY路径也作为属性tty ='/ dev/pts / 3'重复在顶层<console>标签上。这提供了兼容<console>标签的现有语法。

主机设备代理

字符设备被传递到底层物理字符设备。设备类型必须匹配,例如仿真串行端口应该只连接到主机串行端口 - 不要将串行端口连接到并行端口。

... ...
<devices>
  <serial type ="dev">
    <source path ="/ dev/ttyS0"/>
    <target port ="1"/>
  </serial>
</device>
... ...
命名管道

字符设备将输出写入命名管道。有关详细信息,请参阅pipe(7)。

... ...
<devices>
  <serial type ="pipe">
    <source path ="/ tmp/mypipe"/>
    <target port ="1"/>
  </serial>
</device>
... ...
TCP客户端/服务器

字符设备充当连接到远程服务器的TCP客户端。

... ...
<devices>
  <serial type ="tcp">
    <source mode ="connect"host ="0.0.0.0"service ="2445"/>
    <protocol type ="raw"/>
    <target port ="1"/>
  </serial>
</device>
 ... ...

或者作为等待客户端连接的TCP服务器。

... ...
<devices>
  <serial type ="tcp">
    <source mode ="bind"host ="127.0.0.1"service ="2445"/>
    <protocol type ="raw"/>
    <target port ="1"/>
  </serial>
</device>
... ...

或者您可以使用telnet,而不是rawTCP,以便利用该连接的Telnet协议。

自从0.8.5,某些虚拟机管理程序支持兼用的telnets(安全的telnet)或tls (通过安全套接字层)作为连接的传输协议。

... ...
<devices>
  <serial type ="tcp">
    <source mode ="connect"host ="0.0.0.0"service ="2445"/>
    <protocol type ="telnet"/>
    <target port ="1"/>
  </serial>
  ... ...
  <serial type ="tcp">
    <source mode ="bind"host ="127.0.0.1"service ="2445"/>
    <protocol type ="telnet"/>
    <target port ="1"/>
  </serial>
</device>
... ...

自2.4.0,可选属性 tls可以用来控制一个chardev TCP通信信道是否将利用配置的TLS X.509证书环境管理程序以加密数据信道。对于QEMU管理程序,一个TLS环境的使用可以在主机上由受控chardev_tlschardev_tls_x509_cert_dirdefault_tls_x509_cert_dir在文件/etc/libvirt/qemu.conf设置。如果chardev_tls被启用,则除非该tls属性被设置为"否",libvirt的将使用配置TLS环境的主机。如果chardev_tls被禁用,但是tls 属性被设置为"是",那么libvirt的将尝试如果任一使用主机的TLS环境chardev_tls_x509_cert_dirdefault_tls_x509_cert_dirTLS目录结构存在。

... ...
<devices>
  <serial type ="tcp">
    <source mode ='connect'host ="127.0.0.1"service ="5555"tls ="yes"/>
    <protocol type ="raw"/>
    <target port ="0"/>
  </serial>
</device>
... ...
UDP网络控制台

字符设备充当UDP网络服务,发送和接收数据包。这是一个有损的服务。

... ...
<devices>
  <serial type ="udp">
    <source mode ="bind"host ="0.0.0.0"service ="2445"/>
    <source mode ="connect"host ="0.0.0.0"service ="2445"/>
    <target port ="1"/>
  </serial>
</device>
... ...
UNIX域套接字的客户机/服务器

字符设备充当UNIX域套接字服务器,接受来自本地客户端的连接。

... ...
<devices>
  <serial type ="unix">
    <source mode ="bind"path ="/ tmp/foo"/>
    <target port ="1"/>
  </serial>
</device>
... ...
辣妹通道

字符设备通过在指定通道名称香料连接访问channel 属性。 自1.2.2

注:根据不同的虚拟机管理程序,spiceports可能(也可能不会)被带还是不带域启用香料图形

... ...
<devices>
  <serial type ="spiceport">
    <source channel ="org.qemu.console.serial.0"/>
    <target port ="1"/>
  </serial>
</device>
... ...
Nmdm设备

在FreeBSD上提供的nmdm设备驱动程序提供了两个通过虚拟零调制解调器电缆连接在一起的tty设备。 自1.2.4

... ...
<devices>
  <serial type ="nmdm">
    <source master ="/ dev/nmdm0A"slave ="/ dev/nmdm0B"/>
  </serial>
</device>
... ...

source元素具有以下属性:

master

主设备对,即传递到管理程序。设备由完全限定路径指定。

slave

从设备对,即传递到客户端以连接到客户控制台。设备由完全限定路径指定。

声音设备

虚拟声卡可以附加到经由所述主机 sound元件。自0.4.3

... ...
<devices>
  <sound model ='es1370' />
</device>
... ...

sound

 该`sound`元素有一个强制性的属性, `model`,指定什么是真正的声音设备效仿。有效值特定于底层管理程序,虽然典型的选择是'es1370','sb16','ac97','ich6'和'usb'。( "AC97'只因为0.6.0,只因为0.8.8"ICH6","USB"只因为1.2.7) 

自0.9.13,具有完善的要素ich6模型可以有可选的子元素<codec>的各种音频编解码器连接到音频设备。如果未指定,将附加默认编解码器以允许播放和录制。有效值为'duplex'(通告线路输入和线路输出)和'micro'(通告扬声器和麦克风)。

... ...
<devices>
  <sound model ='ich6'>
    <codec type ='micro' />
  </sound>
</device>
... ...

每个sound元素都有一个可选的子元素<address>,可以在设备绑在特定的PCI插槽,上面记载

看门狗设备

虚拟硬件看门狗设备可以经由被添加到来宾watchdog元件。 自0.7.3以来,只有QEMU和KVM

看门狗设备在客户机中需要额外的驱动程序和管理守护程序。只在libvirt配置中启用看门狗不会自己做任何有用的事情。

目前libvirt不支持看门狗触发时的通知。此功能计划用于未来版本的libvirt。

... ...
<devices>
  <watchdog model ='i6300esb' />
</device>
... ...

  ... ...
  <devices>
    <watchdog model ='i6300esb'action ='poweroff' />
  </device>
</domain>

model

所需的model属性指定什么是真正的看门狗设备效仿。有效值特定于底层管理程序。

QEMU和KVM支持:

  • 'i6300esb' - 推荐的设备,模拟PCI Intel 6300ESB
  • 'ib700' - 模拟ISA iBase IB700
  • "diag288' -模拟的S390 DIAG288装置 自1.2.17

action

可选的action属性描述了当看门狗过期采取行动。有效值特定于底层管理程序。

QEMU和KVM支持:

  • 'reset' - 默认情况下,强制重置guest虚拟机
  • 'shutdown' - 正常关闭guest(不推荐)
  • 'poweroff' - 强制关闭客户电源
  • "暂停" - 暂停客户
  • "没有" - 什么也不做
  • '倾倒' -自动转储客人 自0.8.7
  • "注资- NMI' -注入非屏蔽中断到客户 自1.2.17

注1:"关闭"操作要求客户端响应ACPI信号。在看门狗已经过期的情况下,客户通常不能响应ACPI信号。因此,不建议使用'shutdown'。

注2:该目录保存转储文件可以通过配置auto_dump_path文件/etc/libvirt/qemu.conf。

内存气球装置

将向所有Xen和KVM/QEMU guest虚拟机添加虚拟内存气球设备。它将被视为memballoon元件。它将在适当时自动添加,因此无需在访客XML中显式添加此元素,除非需要分配特定的PCI插槽。 自0.8.3,Xen的,QEMU和KVM仅 此外,因为0.8.4,如果memballoon设备需要明确禁用, model='none'也可以使用。

示例:使用KVM自动添加设备

... ...
<devices>
  <membranealloon model ='virtio' />
</device>
... ...

示例:手动添加要求静态PCI插槽2的设备

  ... ...
  <devices>
    <memballoon model ='virtio'>
      <address type ='pci'domain ='0x0000'bus ='0x00'slot ='0x02'function ='0x0' />
      <stats period='10' />
    </memballoon>
  </device>
</domain>

model

所需的model属性指定提供什么气囊装置的类型。有效值特定于虚拟化平台

  • 'virtio' - 默认使用QEMU/KVM
  • 'xen' - 默认为Xen

autodeflate

可选的autodeflate属性允许("开"/"关"的值,分别)启用/禁用的Virtio QEMU内存气球在最后时刻一个客人的过程中得到由内存杀手杀害之前释放一些内存的能力。 自1.3.1以来,只有QEMU和KVM

period

可选period允许的Virtio QEMU内存气球驾驶者提供通过统计virsh dommemstat [domain]命令。默认情况下,未启用收集。为了使,使用virsh dommemstat [domain] --period [number]命令或virsh edit命令添加的选项的XML定义。该virsh dommemstat会接受的选项--live--current--config。如果未提供选项,则仅对活动guest虚拟机执行正在运行的域的更改。如果QEMU驱动程序的版本不正确,则尝试设置周期将失败。大值(例如多年)可能被忽略。 从1.1.1开始,需要QEMU 1.5

随机数生成器

虚拟随机数发生器设备允许主机将熵传递到客户操作系统。 自1.0.3

示例:RNG设备的用法:

... ...
<devices>
  <rng model ='virtio'>
    <rate period ="2000"bytes ="1234"/>
    <backend model ='random'>/dev/random </backend>
    <! -  OR  - >
    <backend model ='egd'type ='udp'>
      <source mode ='bind'service ='1234' />
      <source mode ='connect'host ='1.2.3.4'service ='1234' />
    </backend>
  </rng>
</device>
... ...

model

所需的model属性指定提供什么类型的RNG设备。有效值特定于虚拟化平台:

  • 'virtio' - 由qemu和virtio-rng内核模块支持

rate

可选rate元素允许限制了在熵可以从源被消耗的速率。强制性属性bytes指定字节数是如何允许每个周期被消耗。可选period属性指定毫秒的周期的持续时间; 如果省略,则周期为1000毫秒(1秒)。 自1.0.4

backend

backend元素指定要用于该域熵源。源模型是使用配置的 model属性。支持的源模型有:

random

此后端类型需要非阻塞字符设备作为输入。文件名指定为内容 backend元素。由于1.3.4 任何路径被接受。之前,/ dev/random和/ dev/hwrng是唯一接受的路径。当未指定文件名时,将使用管理程序缺省值。对于qemu,默认值为/ dev/random

egd

此后端使用EGD协议连接到源。源被指定为字符设备。请参阅 字符设备主机接口 的详细信息。

TPM设备

TPM设备使QEMU客户机能够访问TPM功能。

TPM直通设备类型提供对一个QEMU guest虚拟机的主机TPM的访问。在QEMU客户机启动时,没有其他软件可以使用TPM设备,通常为/ dev / tpm0。 'passthrough'自1.0.5

示例:TPM直通设备的用法

... ...
<devices>
  <tpm model ='tpm-tis'>
    <backend type ='passthrough'>
      <device path ='/ dev/tpm0' />
    </backend>
  </tpm>
</device>
... ...

model

model属性指定了设备型号QEMU提供给客人。如果没有提供的型号名称, tpm-tis将自动被选择。

backend

backend元素指定TPM设备的类型。支持以下类型:

passthrough

使用主机的TPM设备。

此后端类型需要对主机上的TPM设备进行独占访问。这样的设备的示例是/ dev/tpm0。完整的文件名由路径属性指定 source的元素。如果没有指定文件名,则自动使用/ dev/tpm0。

NVRAM设备

nvram设备始终添加到PPC64上的pSeries guest虚拟机,并且允许更改其地址。元件nvram(仅适用于pSeries的旅客,因为1.0.5)被提供,以使地址设置。

示例:NVRAM配置的使用

... ...
<devices>
  <nvram>
    <address type ='spapr-vio'reg ='0x3000' />
  </nvram>
</device>
... ...

spapr-vio

VIO设备地址类型,仅对PPC64有效。

reg

设备地址

恐慌设备

panic设备使libvirt能够从QEMU guest虚拟机接收紧急通知。 自1.2.1以来,只有QEMU和KVM

此功能始终启用于:

  • pSeries客户端,因为它是由客户端固件实现的
  • S390客户,因为它是S390架构的一个组成部分

对于上面列出的旅客类型,libvirt的自动添加一个 panic到域XML元素。

示例:panic配置的用法

... ...
<devices>
  <panic模型='hyperv' />
  <panic model ='isa'>
    <address type ='isa'iobase ='0x505' />
  </panic>
</device>
... ...

model

可选model属性指定提供什么恐慌设备的类型。此属性缺失时使用的紧急模型取决于虚拟机管理程序和来宾拱。

  • 'isa' - 用于ISA pvpanic设备
  • 'pseries' - 默认值,仅对pSeries客户机有效。
  • 'hyperv' - 用于Hyper-V崩溃CPU功能。 自1.3.0以来,只有QEMU和KVM
  • 's390' - 默认为S390客人。 自1.3.5

address

地址恐慌。默认ioport是0x505。大多数用户不需要指定地址,这样做完全禁止s390,pseries和hyperv模型。

共享存储设备

共享存储器设备允许在不同虚拟机和主机之间共享存储器区域。 从1.2.10开始,只有QEMU和KVM

... ...
<devices>
  <shmem name ='my_shmem0'>
    <model type ='ivshmem-plain' />
    <size unit ='M'> 4 </size>
  </shmem>
  <shmem name ='shmem_server'>
    <model type ='ivshmem-doorbell' />
    <size unit ='M'> 2 </size>
    <server path ='/ tmp/socket-shmem' />
    <msi vectors='32'ioeventfd ='on' />
  </shmem>
</device>
... ...

shmem

 该`shmem`元素有一个强制属性, `name`以确定共享内存。 

model

 属性`type`的可选元素的`model` 指定提供的底层设备的型号 `shmem`设备。目前所支持的模型是 `ivshmem`(同时支持服务器和服务器少SHMEM,而是由新QEMU赞成-标准的和-doorbell变种弃用), `ivshmem-plain`(只用于服务器更少SHMEM)和 `ivshmem-doorbell`(仅用于与服务器SHMEM) 。 

size

 可选`size`元素指定的共享存储器的大小。这必须是2的幂和大于或等于1 MiB。 

server

 可选`server`元素可用于配置服务器套接字设备是应该连接。可选的 `path`属性指定的Unix套接字,默认的绝对路径`/var/lib/libvirt/shmem/$shmem-$name-sock`。 

msi

 可选的`msi`元素使能/禁用(值"开"/"关",分别)MSI中断。此选项目前可以使用的唯一一起使用`server`的元素。该`vectors` 属性可以被用来指定中断向量的数目。该`ioeventd`属性使能/禁止("开"/"关"的值,分别)ioeventfd。 

存储设备

除了分配给访客的初始存储器之外,存储器设备允许以存储器模块的形式将附加存储器分配给访客。根据访客的存储器资源需要,存储器设备可以被热插拔或热插拔。某些管理程序可能需要为guest虚拟机配置NUMA。 自1.2.14

示例:内存设备的使用

... ...
<devices>
  <memory model ='dimm'>
    <target>
      <size unit ='KiB'> 524287 </size>
      <node> 0 </node>
    </target>
  </memory>
  <memory model ='dimm'>
    <source>
      <pagesize unit ='KiB'> 4096 </pagesize>
      <nodemask> 1-3 </nodemask>
    </source>
    <target>
      <size unit ='KiB'> 524287 </size>
      <node> 1 </node>
    </target>
  </memory>
</device>
... ...

model

目前,只有dimm模型以虚拟DIMM模块添加到来宾支持。

source

可选的源元件允许微调用于给定存储器设备的存储器的源。如果该元素没有提供通过默认配置numatune使用。

pagesize可以可选地用于覆盖用于备份存储器设备的默认主机页大小。配置的值必须对应于主机支持的页面大小。

nodemask 可以可选地用于覆盖将被分配内存的NUMA节点的默认集合。

target

强制性target元素配置从客户的角度增加内存的位置和大小。

强制性的size子元素配置增加的内存作为缩放整数的大小。

node子元素配置来宾NUMA节点到内存重视。仅当guest虚拟机配置了NUMA节点时,才使用该元素。

IOMMU设备

iommu元件可被用于添加IOMMU设备。 自2.1.0

例:

... ...
<devices>
  <iommu model ='intel' />
</device>
... ...

model

目前,只有intel模型的支持。

防伪标签

seclabel元件允许对安全驾驶的操作控制。有三种基本操作模式,"动态",其中libvirt自动生成唯一的安全标签,"静态"应用程序/管理员选择标签,或"无"禁用禁止。使用动态标签生成,libvirt将始终自动重新标记与虚拟机关联的任何资源。使用静态标签分配,默认情况下,管理员或应用程序必须确保在任何资源上正确设置标签,但是,如果需要,可以启用自动重新标签。 '动态'自0.6.1,"静态"自0.6.2,和"无"自0.9.10。

如果一个以上的安全驱动程序用于由libvirt的,多种 seclabel标签可用于,每个驱动器和由每个标签引用的安全驾驶者可以使用该属性来定义model

顶级安全标签的有效输入XML配置为:

<seclabel type ='dynamic'model ='selinux' />

<seclabel type ='dynamic'model ='selinux'>
  <baselabel> system_u:system_r:my_svirt_t:s0 </baselabel>
</seclabel>

<seclabel type ='static'model ='selinux'relabel ='no'>
  <label> system_u:system_r:svirt_t:s0:c392,c662 </label>
</seclabel>

<seclabel type ='static'model ='selinux'relabel ='yes'>
  <label> system_u:system_r:svirt_t:s0:c392,c662 </label>
</seclabel>

<seclabel type ='none' />

如果在输入XML中没有提供"type"属性,则将使用安全驱动程序默认设置,可以是"none"或"dynamic"。如果设置了"baselabel",但没有设置"type",那么类型被假定为"dynamic"

当查看用于自动重新标记资源积极运行中的来宾的XML,一个额外的XML元素 imagelabel,将包括在内。这是一个仅输出元素,因此将在用户提供的XML文档中被忽略

type

或者`static`,`dynamic`或`none` 以确定的libvirt是否自动生成一个唯一的安全标签与否。 

model

有效的安全模型名称,与当前激活的安全模型匹配 

relabel

无论是`yes`或`no`。这必须始终`yes`如果使用动态标签分配。静态标签分配将默认`no`。 

label

如果使用静态标记,则必须指定要分配给虚拟域的完整安全标号。内容的格式取决于使用的安全驱动程序: 
  • SELinux:一个SELinux上下文。
  • AppArmor:AppArmor配置文件。
  • DAC:所有者和组由冒号分隔。它们可以定义为用户/组名称或uid/gid。驱动程序将首先尝试将这些值解析为名称,但前导加号可用于强制驱动程序将其解析为uid或gid。

baselabel

如果使用动态标签,则可以可选地用于指定将用于生成实际标签的基本安全标签。内容的格式取决于正在使用的安全驱动程序。SELinux的驱动程序仅使用`type`在生成的标签baselabel领域。当使用SELinux baselabel时,其他字段从父进程继承。(上面的例子演示了使用`my_svirt_t` 作为价值`type`领域。) 

imagelabel

这是一个仅输出元素,显示在与虚拟域关联的资源上使用的安全标号。内容的格式取决于使用的安全驱动程序 

当重新标记生效时,还可以通过禁用标记(如果文件存在于NFS或其他缺少安全标记的文件系统上时有用)或请求备用标记来微调特定源文件名的标记(当管理应用程序创建一个特殊的标签,以允许一些共享有用的,但不是全部,域之间的资源),因为0.9.9。当一个seclabel元件连接到一个特定的路径,而不是顶级域分配,只有属性relabel或子元件label被支持。此外, 因为1.1.2,一个只输出的元素labelskip将出席在那里标签是由于图像是缺乏安全标签的文件系统跳过磁盘上的活动域。

密钥包装

可选的内容keywrap元素指定guest虚拟机是否将被允许执行S390加密密钥管理操作。清除密钥可以通过在为主机上运行的每个客户VM生成的唯一的包装密钥下加密来保护。生成包装密钥的两种变体:一种版本用于使用DEA / TDEA算法加密受保护的密钥,另一种版本用于使用AES算法加密的密钥。如果 keywrap不包含元素,客人将被授予AES和默认DEA/TDEA密钥包装访问。

<domain>
  ... ...
  <keywrap>
    <cipher name ='aes'state ='off' />
  </keywrap>
  ... ...
</domain>

的至少一个cipher元件必须嵌套的内 keywrap元件。

cipher

该`name`属性标识算法加密保护的密钥。支持此属性的值是`aes`加密下的AES包装密钥,或 `dea`为DEA/TDEA包装项下的加密。该 `state`属性指示加密密钥管理操作是否应打开为指定的加密算法。该值可设置为`on`或`off`。 

注意:DEA/TDEA是DES/TDES的同义词。

例如CONFIGS

下面列出的驱动程序特定页面提供了每个驱动程序的示例配置

联系

社区

在libvirt的项目的参与者同意遵守行为的项目代码

原文

http://libvirt.org/formatdomain.html


本文由 hongweipeng 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

如果对您有用,您的支持将鼓励我继续创作!