Skip to main content

高级操作

高级操作

自定义 CPU Model

通过修改 XML 文件,可以自定义虚拟机的 CPU 型号和特性。

<domain type='kvm'>
    ...
    <vcpu>4</vcpu>
    <memory unit='GiB'>8</memory>
    <cpu mode='custom'>
        <model>Kunpeng-920</model>
        <feature policy='disable' name='pmull'/>
    </cpu>
    ...
</domain>

修改完成后启动虚拟机并验证:

virsh create uos.xml

# 登录虚拟机后执行
lscpu

CPU 热插拔

在虚拟机运行状态下动态增加 vCPU 数量。

1. 配置 XML 文件:

<vcpu placement='static' current='4'>8</vcpu>
<cpu mode='host-passthrough' check='none'>
    <topology sockets="2" cores="4" threads="1"/>
</cpu>

2. 启动虚拟机:

virsh define uos.xml
virsh start uos

3. 执行热插拔:

virsh setvcpus <vm_name> <vcpu_counts> --config --live

# 示例:将 vCPU 扩容到 6 个
virsh setvcpus uos 6 --config --live

:::tip 参数说明

  • vm_name:虚拟机名称
  • vcpu_counts:扩容后的 vCPU 目标数量(不是增量) :::

4. 验证:

lscpu

内存热插拔

在虚拟机运行状态下动态扩展内存。

1. 配置 XML 文件,添加 maxMemory 参数:

<memory unit='GiB'>4</memory>
<maxMemory slots='4' unit='GiB'>16</maxMemory>
<vcpu placement='static' current='4'>8</vcpu>

<cpu mode='host-passthrough' check='none'>
    <numa>
        <cell id='0' cpus='0-3' memory='4' unit='GiB'/>
    </numa>
</cpu>

2. 创建内存扩容 XML 文件:

vi mem.xml
<memory model='dimm'>
    <target>
        <size unit='GiB'>2</size>
        <node>0</node>
    </target>
</memory>

3. 启动虚拟机并执行扩容:

virsh create uos.xml

# 附加内存设备
virsh attach-device uos mem.xml

4. 验证:

free -g

磁盘热插拔

:::note 前提条件 虚拟机需处于正常运行状态。 :::

1. 创建外挂磁盘:

qemu-img create -f qcow2 extra_disk.qcow2 20G

2. 创建磁盘 XML 文件:

vi disk.xml
<disk type='file' device='disk'>
    <driver name='qemu' type='qcow2' cache='none'/>
    <source file='/uos/disk.img'/>
    <target dev='sdb' bus='scsi'/>
    <backingStore/>
</disk>

3. 附加磁盘:

virsh attach-device uos disk.xml

4. 验证:

lsblk

网卡热插拔

:::note 前提条件 虚拟机需处于正常运行状态。 :::

1. 创建网卡 XML 文件:

vi vnic.xml
<interface type="bridge">
    <mac address="22:49:27:44:3F:16"/>
    <source bridge="br0"/>
    <model type="virtio"/>
</interface>

2. 附加网卡:

virsh attach-device uos_test vnic.xml

3. 验证:

ifconfig -a

NUMA 配置

通过 NUMA 绑定可优化虚拟机的内存访问性能,将 vCPU 和内存绑定到特定的物理 NUMA 节点。

1. 在 XML 文件中添加 NUMA 配置:

<vcpu placement='static' cpuset='0-3,64-67'>8</vcpu>

<cputune>
    <vcpupin vcpu='0' cpuset='0-3'/>
    <vcpupin vcpu='1' cpuset='0-3'/>
    <vcpupin vcpu='2' cpuset='0-3'/>
    <vcpupin vcpu='3' cpuset='0-3'/>
    <vcpupin vcpu='4' cpuset='64-67'/>
    <vcpupin vcpu='5' cpuset='64-67'/>
    <vcpupin vcpu='6' cpuset='64-67'/>
    <vcpupin vcpu='7' cpuset='64-67'/>
</cputune>

<numatune>
    <memnode cellid='0' mode='strict' nodeset='0'/>
    <memnode cellid='1' mode='strict' nodeset='1'/>
</numatune>

<cpu mode='host-passthrough' check='none'>
    <topology sockets='2' cores='4' threads='1'/>
    <numa>
        <cell id='0' cpus='0-3' memory='4' unit='GiB'/>
        <cell id='1' cpus='4-7' memory='4' unit='GiB'/>
    </numa>
</cpu>

2. 启动虚拟机并验证:

virsh create uos.xml

# 登录虚拟机后执行
lscpu

输出中应显示 NUMA 节点: 2,且 NUMA 节点 0 和 1 分别绑定对应的 CPU。