computing-offload/generic_vdpa/README.md
jiangdongxu fac818adb1 vdpa: change libvirt/qemu/kernel base version and docs
Change-Id: I574115f5e44e56ac2baaad71eeab6b9fd7149747
2024-10-15 17:39:52 +08:00

6.9 KiB
Raw Blame History

generic vDPA

介绍

vDPA是一种基于VirtIO 半虚拟化技术的提出的数据面加速的框架。

DPU卡呈现的VirtIO类型的存储/网络/文件系统设备通过对接vDPA框架提供与硬件持平的IO性能并通过统一上层管理的接口实现多种设备类型、多种DPU卡的接口统一。

软件架构

vdpa framework

部署教程

目录说明:

  • kernelgeneric vdpa基本功能及热迁移依赖的内核代码
  • qemu: generic vdpa设备基本功能及热迁移依赖的qemu代码
  • libvirt: generic vdpa设备管理及支持生命周期依赖的libvirt代码
  • doc: 项目资料等

generic vDPA当前开源社区尚未完全支持因此需要在开源软件的基础上打上补丁代码来支持相关功能主要涉及的有三个开源软件kernel、qemu、libvirt。

基于kernel-6.6、qemu-8.2.0、libvirt-9.10.0版本进行软件编译以及安装。

内核编译以及安装:

1. cd kernel
2. wget -O kernel-6.6.tar.gz https://codeload.github.com/torvalds/linux/tar.gz/refs/tags/v6.6
3. tar xvf kernel-6.6.tar.gz & cd linux-6.6
4. for p in $(ls ../*.patch); do patch -p 1 -F 0 < $p; done
5. 打开内核VHOST_VDPA的编译选项
6. make -j64 && make modules_install -j64 && make install

qemu编译及安装

1. cd qemu
2. tar xvf qemu-8.2.0.tar.gz && cd qemu-8.2.0
3. for p in $(ls ../*.patch); do patch -p 1 -F 0 < $p; done
4. ./configure --target-list=aarch64-softmmu --enable-kvm --enable-vhost-vdpa
5. make -j64 && make install

libvirt编译及安装

1. cd libvirt
2. tar xvf libvirt-9.10.0.tar.gz && cd libvirt-9.10.0
3. meson setup build -Dsystem=true -Ddriver_qemu=enabled -Ddriver_lxc=disabled -Dlogin_shell=disabled
4. ninja -C build
5. ninja -C build install

操作方法

请使用root用户按照如下操作步骤配置

  1. 开启网卡SRIOV模式

    1. 在HostOS的BIOS中开启SMMU的支持不同厂家服务器的开启可能不同请参考各服务器的帮助文档。

    2. HostOS中对需要配置给虚拟机的PF配置SRIOV创建VF以virtio-net设备为例

      # lspci -s 83:00.6 
      83:00.6 Ethernet controller: Virtio: Virtio network device
      # echo 16 > /sys/bus/pci/devices/0000\:83\:00.6/sriov_numvfs 
      # lspci | grep Virtio
      83:00.6 Ethernet controller: Virtio: Virtio network device
      83:01.1 Ethernet controller: Virtio: Virtio network device
      83:01.2 Ethernet controller: Virtio: Virtio network device
      83:01.3 Ethernet controller: Virtio: Virtio network device
      83:01.4 Ethernet controller: Virtio: Virtio network device
      83:01.5 Ethernet controller: Virtio: Virtio network device
      83:01.6 Ethernet controller: Virtio: Virtio network device
      83:01.7 Ethernet controller: Virtio: Virtio network device
      83:02.0 Ethernet controller: Virtio: Virtio network device
      83:02.1 Ethernet controller: Virtio: Virtio network device
      83:02.2 Ethernet controller: Virtio: Virtio network device
      83:02.3 Ethernet controller: Virtio: Virtio network device
      83:02.4 Ethernet controller: Virtio: Virtio network device
      83:02.5 Ethernet controller: Virtio: Virtio network device
      83:02.6 Ethernet controller: Virtio: Virtio network device
      83:02.7 Ethernet controller: Virtio: Virtio network device
      
  2. 解绑VF驱动并绑定对应硬件的厂商vdpa驱动

    echo 0000:83:01.1 > /sys/bus/pci/devices/0000\:08\:01.1/driver/unbind
    echo 0000:83:01.2 > /sys/bus/pci/devices/0000\:08\:01.2/driver/unbind
    echo 0000:83:01.3 > /sys/bus/pci/devices/0000\:08\:01.3/driver/unbind
    echo 0000:83:01.4 > /sys/bus/pci/devices/0000\:08\:01.4/driver/unbind
    echo 0000:83:01.5 > /sys/bus/pci/devices/0000\:08\:01.5/driver/unbind
    echo -n "1af4 1000" > /sys/bus/pci/drivers/${vendor_vdpa}/new_id
    
  3. 绑定vDPA设备后可以通过vdpa命令查询vdpa管理设备列表

    # vdpa mgmtdev show 
    pci/0000:83:01.1: 
      supported_classes net
    pci/0000:83:01.2: 
      supported_classes net
    pci/0000:83:01.3: 
      supported_classes net
    pci/0000:83:01.4: 
      supported_classes net
    pci/0000:83:01.5: 
      supported_classes net
    
  4. 完成vdpa设备的创建后创建vhost-vDPA设备

    vdpa dev add name vdpa0 mgmtdev pci/0000:83:01.1
    vdpa dev add name vdpa1 mgmtdev pci/0000:83:01.2
    vdpa dev add name vdpa2 mgmtdev pci/0000:83:01.3
    vdpa dev add name vdpa3 mgmtdev pci/0000:83:01.4
    vdpa dev add name vdpa4 mgmtdev pci/0000:83:01.5
    
  5. 完成vhost-vDPA的设备创建后可以通过vdpa命令查询vdpa设备列表也可以通过libvirt命令查询环境的vhost-vDPA设备信息

    # vdpa dev show
    vdpa0: type network mgmtdev pci/0000:83:01.1 vendor_id 6900 max_vqs 3 max_vq_size 256
    vdpa1: type network mgmtdev pci/0000:83:01.2 vendor_id 6900 max_vqs 3 max_vq_size 256
    vdpa2: type network mgmtdev pci/0000:83:01.3 vendor_id 6900 max_vqs 3 max_vq_size 256
    vdpa3: type network mgmtdev pci/0000:83:01.4 vendor_id 6900 max_vqs 3 max_vq_size 256
    vdpa4: type network mgmtdev pci/0000:83:01.5 vendor_id 6900 max_vqs 3 max_vq_size 256
    
    # virsh nodedev-list vdpa
    vdpa_vdpa0
    vdpa_vdpa1
    vdpa_vdpa2
    vdpa_vdpa3
    vdpa_vdpa4
    
    # virsh nodedev-dumpxml vdpa_vdpa0
    <device>
      <name>vdpa_vdpa0</name>
      <path>/sys/devices/pci0000:00/0000:00:0c.0/0000:83:01.1/vdpa0</path>
      <parent>pci_0000_83_01_1</parent>
      <driver>
        <name>vhost_vdpa</name>
      </driver>
      <capability type='vdpa'>
        <chardev>/dev/vhost-vdpa-0</chardev>
      </capability>
    </device>
    
  6. 创建虚拟机时在虚拟机配置文件中增加vDPA直通设备的配置项其中source dev为host上创建的vhost-vdpa设备的字符设备路径

    <devices>
        <hostdev mode='subsystem' type='vdpa'>
            <source dev='/dev/vhost-vdpa-0'/>
        </hostdev>
    </devices>
    
  7. 虚拟机创建后可以在虚拟机内看到对应的virtio-net设备配置IP后网卡功能正常

    # lspci | grep -i eth
    05:00.0 Ethernet controller: Virtio: Virtio network device (rev 01)
    
    # ifconfig eth0 192.168.1.100
    # ping 192.168.1.200
    PING 192.168.1.200 (192.168.1.200) 56(84) bytes of data.
    64 bytes from 192.168.1.200: icmp_seq=1 ttl=64 time=0.324 ms
    64 bytes from 192.168.1.200: icmp_seq=2 ttl=64 time=0.141 ms
    
    --- 192.168.1.200 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 0.141/0.232/0.324/0.091 ms
    

Release 计划

  • generic vDPA基本功能实现 - 2024.08.30
  • generic vDPA热迁移功能实现 - 2024.10.30
  • generic vDPA相关文档输出 - 2024.11.30