长期支持版本

    管理设备直通

    虚拟化平台使用设备直通,可以使虚拟机直接使用相关硬件设备,提升虚拟机性能。本章介绍 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备份