长期支持版本

    社区创新版本

      StratoVirt-VFIO使用

      管理设备直通

      虚拟化平台使用设备直通,可以使虚拟机直接使用相关硬件设备,提升虚拟机性能。本章介绍 StratoVirt 支持的设备直通特性。

      前提条件

      使用设备直通,主机需要满足如下条件:

      1. 开启 IOMMU 功能

        IOMMU 全称是 Input/Output Memory Management Unit,该技术可以让 PCI/PCIe 设备的资源直接分配给虚拟机。

        在主机上执行如下命令,查看 IOMMU 是否已经开启。

        # dmesg | grep iommu
        

        若已开启,回显如下:

        iommu: Default domain type: Translated
        hibmc-drm 0000:0a:00.0: Adding to iommu group 0
        ehci-pci 0000:7a:01.0: Adding to iommu group 1
        ehci-pci 0000:ba:01.0: Adding to iommu group 2
        ohci-pci 0000:7a:00.0: Adding to iommu group 3
        ohci-pci 0000:ba:00.0: Adding to iommu group 4
        xhci_hcd 0000:7a:02.0: Adding to iommu group 5
        ......
        

        若未开启,则没有回显或只显示如下信息:

        iommu: Default domain type: Translated
        

        开启IOMMU:

        1. 为linux内核增加启动参数: intel_iommu=on iommu=pt;

          vim /boot/grub2/grub.cfg
          linux /vmlinuz-5.15.0+ root=/dev/mapper/openeuler-root ro resume=/dev/mapper/openeuler-swap rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap crashkernel=512M intel_iommu=on iommu=pt
          
        2. 重启Host OS;

      2. 加载 vfio-pci 内核模块

        # modprobe vfio-pci
        # lsmod | grep vfio_pci
        

        成功加载 vfio-pci 模块,则回显如下:

        vfio_pci              327680  0
        vfio_virqfd           327680  1 vfio_pci
        vfio                  327680  2 vfio_iommu_type1,vfio_pci
        
      3. 将 PCI 设备从主机解绑,重新绑定到 vfio-pci 驱动

        假设使用 VFIO 直通 Hi1822 网卡设备,首先查看网卡设备对应的 PCI 设备信息:

        # lspci -v | grep "Eth" | grep 1822
        03:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45)
        04:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45)
        05:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45)
        06:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45)
        

        选择其中 bus 号 03,slot 号 00,function 号 0 的设备,即上述的 03:00.0。然后将该 PCI 设备从主机上解绑

        # echo 0000:03:00.0 > /sys/bus/pci/devices/0000:03:00.0/driver/unbind
        

        最后将该 PCI 设备重新绑定到 vfio-pci 驱动。

        lspci -ns 0000:03:00.0 |awk -F':| ' '{print $5" "$6}' > /sys/bus/pci/drivers/vfio-pci/new_id
        

        将网卡绑定到 vfio-pci 驱动后,在主机上无法查询到对应网卡信息,只能查询到对应的 PCI 设备信息。

      VFIO 设备直通

      简介

      VFIO(Virtual Function I/O) 是内核提供的一种用户态设备驱动方案。VFIO 驱动可以安全地把设备 I/O,中断,DMA 等能力呈现给用户空间。StratoVirt 虚拟化平台使用 VFIO 设备直通方案后,在虚拟机可以极大限度地提升 I/O 性能。

      使用 VFIO 直通

      StratoVirt 支持 libvirt 管理,可以使用 XML 文件配置虚拟机。以下内容介绍通过修改虚拟机 XML 文件的方式,使用 VFIO 设备直通功能。

      一、修改 XML 文件

      1. 在主机上执行如下命令,查询 CPU 架构信息

        # uname -m
        
      2. aarch64 和 x86_64 架构分别下载 StratoVirt 自带的 XML 文件 stratovirt_aarch64.xml 或 stratovirtvirt_x86.xml,并存放到任一目录,例如 /home:

        # cp stratovirt/docs/stratovirt_$arch.xml /home
        
      3. 根据实际需求,修改XML文件中的VFIO配置。 bus,slot,function 为上述绑定到 vfio-pci 驱动的 PCI 设备。相关配置如下:

        <!-- vfio -->
        <hostdev mode='subsystem' type='pci' managed='yes'>
        <driver name='vfio'/>
        <source>
            <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
        </source>
        </hostdev>
        

        上例中,设备类型为 PCI 设备,managed='yes' 表示 libvirt 将把 PCI 设备从主机解绑,并重新绑定到 vfio-pci 驱动。source 项配置了需要作为 VFIO 直通设备的 domain,bus,slot,function 信息。

      二、使用 libvirt 命令行创建并登录虚拟机

      # virsh create stratovirt_$arch.xml
      # virsh list --all
      Id  Name   State
      --------------------
      1  StratoVirt  running
      # virsh console 1
      

      三、在虚拟机内查看并使用 VFIO 直通网卡。

      1. 配置前查看网卡信息

        # ip a
        1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
         link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
         inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
        2: enp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
         link/ether 72:b8:51:9d:d1:27 brd ff:ff:ff:ff:ff:ff
        
      2. 动态配置网卡的 IP 地址

        # dhclient
        
      3. 查询 IP 是否配置成功

        # ip a
        1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
         link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
         inet 127.0.0.1/8 scope host lo
          valid_lft forever preferred_lft forever
        2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
         link/ether 72:b8:51:9d:d1:27 brd ff:ff:ff:ff:ff:ff
         inet 192.168.1.3/16 brd 192.168.255.255 scope global dynamic enp1s0
          valid_lft 86453sec preferred_lft 86453sec
        

        如上回显可知,成功分配了 IP 地址 192.168.1.3,虚拟机可以直接使用配置的网卡

        说明:使用的直通网卡如果没有连接物理网络,将获取不到网络信息。

      解绑 VFIO 驱动

      如果需要将直通给虚拟机使用的网卡解除绑定,可以登录主机,执行如下命令,将网卡设备重新绑定到主机上。其中,hinic是对应网卡设备驱动的类型:

      # echo 0000:03:00.0 > /sys/bus/pci/drivers/vfio-pci/unbind
      # echo 0000:03:00.0 > /sys/bus/pci/drivers/hinic/bind
      

      说明:绑定 VFIO 驱动前,可以再主机上执行 ethtool -i enp0 命令,获取网卡设备驱动类型。enp0 为对应网卡名称。

      SR-IOV 直通

      简介

      使用 VFIO 设备直通时,虚拟机能直接访问硬件,但每个设备只能被一个虚拟机独占。SR-IOV 直通技术支持将一个 PF(Physical Function) 虚拟出多个 VF (Virtual Function),并直通给不同虚拟机,解决了设备直通的独占问题,增加可用的设备。

      操作步骤

      1. 创建多个 VF:

        sriov_numvfs 文件用于描述 SR-IOV 提供的 VF 个数,存放在 /sys/bus/pci/devices/domain:bus:slot.function/ 路径下,例如上述例子中的 bus 号 03,slot 号 00,function 号 0 的设备,可以使用如下命令创建4个 VF:

        # echo 4 > /sys/bus/pci/devices/0000\:03\:00.0/sriov_numvfs
        
      2. 确认 VF 设备创建成功

        # lspci -v | grep "Eth" | grep 1822
        

        回显如下,说明成功创建了4个 VF 03:00.1、03:00.2、03:00.3、03:00.4:

        03:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45)
        03:00.1 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
        03:00.2 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
        03:00.3 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
        03:00.4 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
        
      3. 上述创建的 VF 设备均可以直通给虚拟机,使用 SR-IOV 设备的方法与普通 PCI 设备的直通方法相同。

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份