---
title: KAE在KVM虚拟机中的使用
description: "KAE支持在KVM（Kernel-based Virtual Machine）虚拟机中使用，使用前要求HostOS上已经建立虚拟机，且已经安装KAE，最后在HostOS上完成相关配置后方可使用。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/accel/kunpengaccel_16_0024.html
sourcePath: /source/zh/kunpengboostkithistory/2300/accel/kunpengaccel_16_0024.html
indexId: efae066b6f0d4c6fb4d8e8c4a946686d5a6b85fc7a85cdfb3199b87ffc77d6dc70
---
# KAE在KVM虚拟机中的使用

KAE支持在KVM（Kernel-based Virtual Machine）虚拟机中使用，使用前要求HostOS上已经建立虚拟机，且已经安装KAE，最后在HostOS上完成相关配置后方可使用。

加速器设备遵循 PCIe （Peripheral Component Interconnect Express）规范，在操作系统内呈现为PCIe设备，并支持SR-IOV（Single Root I/O Virtualization）能力。每个加速器提供了1024个队列，单个PF（Physical Function）默认使用256个队列，其余768个队列预留给VF（Virtual Function）使用。VF队列数量 = (1024-PF队列数量) / VF个数，余数队列会加到最后一个VF上。推荐一个PF虚拟化出8个VF数目。

#### 在HostOS上进行虚拟化配置

1. 查询HostOS环境中安装的加速器和对应的bdf号。

```
ls -al /sys/class/uacce
```


2. 虚拟化加速器VF（以hisi_sec设备为例，各虚拟出3个VF，对应hisi_sec - 8 ~ hisi_sec - 13）。
  1 2 echo 3 > /sys/devices/pci0000:74/0000:74:01.0/0000:76:00.0/sriov_numvfs echo 3 > /sys/devices/pci0000:b4/0000:b4:01.0/0000:b6:00.0/sriov_numvfs


#### 在虚拟机上配置加速器

1. 编辑虚拟机vm1的配置文件。

```
virsh edit vm1
```


2. 在配置文件中添加vcpu配置（以配置4个core为例）。
  1 2 3 4 5 6 7 <cputune> <vcpupin vcpu='0' cpuset='4'/> <vcpupin vcpu='1' cpuset='5'/> <vcpupin vcpu='2' cpuset='6'/> <vcpupin vcpu='3' cpuset='7'/> <emulatorpin cpuset='4-7'/> </cputune>

  上述的配置完成后，虚拟机进程运行会固在指定的主机的物理CPU上。

3. 虚拟机配置VF。

  - 给虚拟机配置一个VF

```
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address bus='0x76' slot='0x00' function='0x1'/>
</source>
</hostdev>
```


    上述的配置完成后，虚拟机挂载了加速器虚拟出来的一个VF。

  - 给虚拟机配置多个VF

```
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address bus='0x76' slot='0x00' function='0x1'/>
</source>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address bus='0x76' slot='0x00' function='0x2'/>
</source>
</hostdev>
```


- 本文给虚拟机配置的VF是hisi_sec-8，它对应的编码是：hisi_sec-8 -> ../../devices/pci0000:74/0000:74:01.0/0000:76:00.1/uacce/hisi_sec-8。虚拟机xml配置的数据来自于编码里的“76:00.1”，bus对应“76”，slot对应“00”，function对应“1”，而且这些数据都是16进制的，所以要加上“0x”。
- 本文只给虚拟化并配置了SEC设备，所以虚拟机安装完成后，只有这个SEC设备可用。如果虚拟机需要zip或者HPRE设备，请参考操作SEC设备的方式进行增加。

- hisi_sec设备SBDF号以0000:7x:xx.x，其对应CPU0上设备；以0000:bx:xx.x为开头，对应CPU1上设备。
- 为保证性能稳定，推荐虚拟机上核选取对应CPU上的core，同时VF也选择对应加速器上虚拟出来的VF。
- HostOS对单个虚拟机上VF挂载个数存在上限，默认为11个。


4. 启动虚拟机。
  1 virsh start vm1

  如果启动虚拟机失败，并提示“Unknown PCI header type '127'”，则需要对挂载的VF进行解绑操作，然后重新启动虚拟机。 1 2 3 echo 0000:76:00.1 > /sys/bus/pci/drivers/hisi_sec/unbind echo vfio-pci > /sys/devices/pci0000:74/0000:74:01.0/0000:76:00.1/driver_override echo 0000:76:00.1 > /sys/bus/pci/drivers_probe

5. 登录虚拟机并安装KAE。
  请参见安装KAE在虚拟机上安装KAE。

6. 在虚拟机上查询设备。
  1 ls /sys/class/uacce/

  显示如下，说明挂载的VF已经在虚拟机上读取成功。

  1 hisi_sec-0
