【linux-虚拟化】 SR-IOV技术

文章目录

      • 参考
      • 1. 什么是 SR-IOV?
      • 1.2. 将 SR-IOV 网络设备附加到虚拟机
      • 1.3. SR-IOV 分配支持的设备

参考

管理 SR-IOV 设备

1. 什么是 SR-IOV?

单根 I/O 虚拟化(SR-IOV)是一种规范,它允许单个 PCI Express(PCIe)设备向主机系统呈现多个独立的 PCI 设备,称为 虚拟功能 (VF)。这样的每个设备:

  • 提供与原始 PCI 设备相同的或类似的服务。
  • 出现在主机 PCI 总线的不同地址上。
  • 可使用 VFIO 分配功能分配到不同的虚拟机。

例如,单个具有 SR-IOV 的网络设备可以向多个虚拟机显示 VF。虽然所有 VF 都使用相同的物理卡、相同的网络连接和相同的网线,但每个虚拟机都直接控制其自己的硬件网络设备,并且不使用主机的额外资源。

SR-IOV 的工作原理

SR-IOV 功能可能会因为引进了以下 PCI 功能:

  • 物理功能(PF) - 为主机提供设备(如网络)功能的 PCIe 功能,但也可以创建和管理一组 VF。每个具有 SR-IOV 功能的设备都有一个或多个 PF。
  • 虚拟功能(VF) - 充当独立设备的轻量级 PCIe 功能。每个 VF 都是从 PF 中派生的。一个设备可依赖于设备硬件的最大 VF 数。每个 VF 每次只能分配给一个虚拟机,但虚拟机可以分配多个 VF。

VM 将 VF 识别为虚拟设备。例如,由 SR-IOV 网络设备创建的 VF 显示为分配给虚拟机的网卡,其方式与主机系统上显示的物理网卡相同。

图 10.1. SR-IOV 架构

Virt SR IOV

优点

使用 SR-IOV VF 而不是模拟设备的主要优点是:

  • 提高的性能
  • 减少主机 CPU 和内存资源使用量

例如,作为 vNIC 附加到虚拟机的 VF 性能几乎与物理 NIC 相同,并且优于半虚拟化或模拟的 NIC。特别是,当多个 VF 在单个主机上同时使用时,其性能优势可能非常显著。

缺点

  • 要修改 PF 的配置,您必须首先将 PF 公开的 VF 数量改为零。因此,您还需要将这些 VF 提供的设备从分配给虚拟机的设备中删除。
  • 附加了 VFIO 分配设备的虚拟机(包括 SR-IOV VF)无法迁移到另一台主机。在某些情况下,您可以通过将分配的设备与模拟的设备进行配对来临时解决这个限制。例如,您可以将分配的网络 VF 绑定 到模拟的 vNIC 中,并在迁移前删除 VF。
  • 另外,分配了 VFIO 的设备需要固定虚拟机内存,这会增加虚拟机的内存消耗,并防止在虚拟机上使用内存膨胀。

其它资源

  • SR-IOV 分配支持的设备
  • 在 IBM Z 中配置透传 PCI 设备

1.2. 将 SR-IOV 网络设备附加到虚拟机

要将 SR-IOV 网络设备附加到 Intel 或 AMD 主机上的虚拟机(VM),您必须从主机上支持 SR-IOV 的网络接口创建一个虚拟功能(VF),并将 VF 作为设备分配给指定虚拟机。详情请查看以下步骤。

先决条件

  • 您的主机的 CPU 和固件支持 I/O 内存管理单元(IOMMU)。

    • 如果使用 Intel CPU,它必须支持 Intel 的直接 I/O 虚拟化技术(VT-d)。
    • 如果使用 AMD CPU,则必须支持 AMD-Vi 功能。
  • 主机系统使用访问控制服务(ACS)来为 PCIe 拓扑提供直接内存访问(DMA)隔离。与系统供应商一起验证这一点。

    如需更多信息,请参阅实施 SR-IOV 的硬件注意事项。

  • 物理网络设备支持 SR-IOV。要验证系统上的任何网络设备是否支持 SR-IOV,请使用 lspci -v 命令,并在输出中查找 单根 I/O 虚拟化(SR-IOV)

    # lspci -v
    [...]
    02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)Subsystem: Intel Corporation Gigabit ET Dual Port Server AdapterFlags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0Memory at fcba0000 (32-bit, non-prefetchable) [size=128K]
    [...]Capabilities: [150] Alternative Routing-ID Interpretation (ARI)Capabilities: [160] Single Root I/O Virtualization (SR-IOV)Kernel driver in use: igbKernel modules: igb
    [...]
    
  • 用于创建 VF 的主机网络接口正在运行。例如:要激活 eth1 接口并验证它正在运行:

    # ip link set eth1 up
    # ip link show eth1
    8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ffvf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state autovf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state autovf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state autovf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
    
  • 要使 SR-IOV 设备分配正常工作,必须在主机 BIOS 和内核中启用 IOMMU 功能。要做到这一点:

    • 在 Intel 主机上启用 VT-d:

      1. 使用 intel_iommu=oniommu=pt 参数重新生成 GRUB 配置:

        # grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
        
      2. 重启主机。

    • 在 AMD 主机上启用 AMD-Vi:

      1. 使用 iommu=pt 参数重新生成 GRUB 配置:

        # grubby --args="iommu=pt" --update-kernel=ALL
        
      2. 重启主机。

流程

  1. 可选: 确认您的网络设备可使用的最大 VF 数。要做到这一点,请使用以下命令,将 eth1 替换为您的 SR-IOV 兼容网络设备。

    # cat /sys/class/net/eth1/device/sriov_totalvfs
    7
    
  2. 使用以下命令来创建虚拟功能(VF):

    # echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs
    

    在命令中,替换:

    • 使用您要在其上创建 PF 的 VF 数替换 VF-number
    • 使用 VF 要创建的网络接口的名称替换 network-interface

    以下示例从 eth1 网络接口创建 2 个 VF:

    # echo 2 > /sys/class/net/eth1/device/sriov_numvfs
    
  3. 确定已添加了 VF:

    # lspci | grep Ethernet
    82:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    
  4. 通过为您用于创建 VF 的网络接口创建一个 udev 规则,使创建的 VF 持久化。例如,对于 eth1 接口,创建 /etc/udev/rules.d/eth1.rules 文件,并添加以下行:

    ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"
    

    这样可确保使用 ixgbe 驱动程序的两个 VF 在主机启动时可自动对 eth1 接口可用。如果不需要持久性 SR-IOV 设备,请跳过这一步。

    警告

    目前,当试图在 Broadcom NetXtreme II BCM57810 适配器上保留 VF 时,上述设置无法正常工作。另外,基于这些适配器将 VF 附加到 Windows 虚拟机当前还不可靠。

  5. 将新添加的 VF 接口设备热插到正在运行的虚拟机中。

    # virsh attach-interface testguest1 hostdev 0000:82:10.0 --managed --live --config
    

验证

  • 如果过程成功,客户机操作系统会检测新的网络接口卡。

1.3. SR-IOV 分配支持的设备

并非所有设备都可用于 SR-IOV。以下设备已在 RHEL 8 中进行了测试,并验证了与 SR-IOV 兼容。

网络设备

  • Intel 82599ES 10 千兆以太网控制器 - 使用 ixgbe 驱动程序
  • Intel 以太网控制器 XL710 系列 - 使用 i40e 驱动程序
  • Mellanox ConnectX-5 以太网适配器卡 - 使用 mlx5_core 驱动程序
  • Intel 以太网络适配器 XXV710 - 使用 i40e 驱动程序
  • Intel 82576 千兆以太网控制器 - 使用 igb 驱动程序
  • Broadcom NetXtreme II BCM57810 - 使用 bnx2x 驱动程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT获取本机网络信息

QT获取本机网络信息 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();void getinform…

vue3中的vuex理解

vuex,概念理论什么的&#xff0c;我就不多说了。懂的人都懂。不懂的&#xff0c;请自己谷歌。本博文主要讲解它的一些常用方法和持数据的持久化&#xff08;本文是以模块化来写的&#xff09;。 1、安装 npm install vuexnext --save npm i vuex-persistedstate #持久化插件2、…

openssl3.2/test/certs - 075 - non-critical unknown extension

文章目录 openssl3.2/test/certs - 075 - non-critical unknown extension概述笔记END openssl3.2/test/certs - 075 - non-critical unknown extension 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev\my_local_git_prj\study\openSSL\test_c…

视频智能分析:冶炼/冶金工厂视频智能监管方案的设计和应用

一、背景与需求 随着工业4.0的推进&#xff0c;冶金行业正面临着转型升级的压力。为了提高生产效率、降低能耗、保障安全&#xff0c;冶金智能工厂视频监管方案应运而生。该方案通过高清摄像头、智能分析技术、大数据处理等手段&#xff0c;对工厂进行全方位、实时监控&#x…

编程笔记 html5cssjs 059 css多列

编程笔记 html5&css&js 059 css多列 一、CSS3 多列属性二、实例小结 CSS3 可以将文本内容设计成像报纸一样的多列布局. 一、CSS3 多列属性 下表列出了所有 CSS3 的多列属性&#xff1a; 属性 描述 column-count 指定元素应该被分割的列数。 column-fill 指定如何填充…

没有可用软件包 mysql-community-server

User [rootecm-a08e ~]# sudo yum install -y mysql-community-server 已加载插件&#xff1a;fastestmirror Loading mirror speeds from cached hostfile base: mirrors.aliyun.comepel: mirror.01link.hkextras: mirrors.ustc.edu.cnupdates: mirrors.ustc.edu.cn 没有可用…

k8s的安全机制

k8s的安全机制。分布式集群管理工具&#xff0c;就是容器编排 安全机制的核心&#xff1a;APIserver作为整个内部通信的中介&#xff0c;也是外部控制的入口&#xff0c;所有的安全机制都是围绕API server来进行设计 请求API资源&#xff1a; 1、认证 2、鉴权 3、准入机制 …

如何使用WinSCP公网远程访问本地CentOS服务器编辑上传文件

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…

大创项目推荐 题目:基于FP-Growth的新闻挖掘算法系统的设计与实现

文章目录 0 前言1 项目背景2 算法架构3 FP-Growth算法原理3.1 FP树3.2 算法过程3.3 算法实现3.3.1 构建FP树 3.4 从FP树中挖掘频繁项集 4 系统设计展示5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于FP-Growth的新闻挖掘算法系统的设计与实现…

Mediasoup Demo-v3笔记(五)——Mediasoup 的启动

Mediasoup是由两部分组成的&#xff0c;一部分是js的控制模块&#xff0c;一部分是c的传输模块&#xff0c;在这里我们用mediasoup demo的代码开始&#xff0c;分析整个进程的启动过程 1、在mediasoup-demo-3的server.js中&#xff0c;调用启动方法 mediasoup-demo-3是一个dem…

Zoomit 安装与使用

Zoomit 安装与使用 1&#xff09;工具介绍 ZoomIt 是一款非常实用的投影演示辅助软件 ZoomIt 是一种在所有 Windows 设备上运行的工作的注释和缩放工具 2&#xff09;下载地址 地址&#xff1a;https://zoomit.en.softonic.com/ 3&#xff09;安装教程 第一步 第二步 …

国外服务器全攻略,国外服务器的特点和优势是什么?

随着互联网的快速发展&#xff0c;越来越多的企业和个人选择将网站、应用程序等部署在国外服务器上。那么&#xff0c;国外服务器有哪些特点和优势呢&#xff1f;本文将对这一问题进行详细探讨。 一、国外服务器的特点 1.全球化的网络连接&#xff1a;国外服务器通常拥有全球化…

ThreeJS官方示例

1 月球绕地球旋转 材质贴图的颜色显示可能和原图看起来不一致&#xff0c;需要设置色彩空间&#xff1a; 线性色彩空间&#xff08;LinearSRGBColorSpace&#xff09;&#xff1a;根据光照强度均匀分布sRGB色彩空间&#xff08;SRGBColorSpace&#xff09;&#xff1a;根据人…

svn和git的本质区别是什么

参考&#xff1a; https://blog.csdn.net/feiying0canglang/article/details/126550676 上边图中&#xff0c;跨越了区的箭头&#xff0c;它中间的区数据都会同步。例如&#xff1a;git checkout &#xff0c;它是将本地仓库数据更新到暂存区和工作区的。\ 理解 gitlab和svn都…

计算机网络的体系结构的各层在整个过程中起到什么作用?

ps&#xff1a;本文章的图片内容来源都是来自于湖科大教书匠的视频&#xff0c;声明&#xff1a;仅供自己复习&#xff0c;里面加上了自己的理解 这里附上视频链接地址&#xff1a;1.6 计算机网络体系结构&#xff08;4&#xff09;—专用术语_哔哩哔哩_bilibili 目录 &#x…

Springboot项目启动报错:Command line is too long问题解决

启动项目报错:Error running ‘xxxxxxxx’: Command line is too long. Shorten command line for ‘xxxxxxxx’ or also for Application default configuration 方法一 点击提示中的&#xff1a;default&#xff1a;然后在弹出窗口中选择&#xff1a;JAR xxxx xxx&#xff0…

DataKit迁移MySQL到openGauss

前言 本文将分享DataKit迁移MySQL到openGauss的项目实战&#xff0c;供广大openGauss爱好者参考。 1. 下载操作系统 https://www.openeuler.org/zh/download https://support.huawei.com/enterprise/zh/doc/EDOC1100332931/1a643956 https://support.huawei.com/enterprise…

mysql优化,and和where的区别

前情提要&#xff1a;and 则是在表连接前过滤A表或B表里面哪些记录符合连接条件&#xff0c;同时会兼顾是left join还是right join。即 假如是左连接的话&#xff0c;如果左边表的某条记录不符合连接条件&#xff0c;那么它不进行连接&#xff0c;但是仍然留在结果集中&#xf…

JOSEF约瑟 静态中间继电器 RZY-600D 110VDC 六常开 导轨安装

RZ-D系列中间继电器 系列型号&#xff1a; RZY-004D中间继电器 RZL-004D中间继电器 RZY-022D中间继电器 RZL-022D中间继电器 RZY-112D中间继电器 RZL-112D中间继电器 RZY-202D中间继电器 RZL-202D中间继电器 RZY-002D中间继电器 RZL-002D中间继电器 RZY-060D中间继电器 RZL-060…

mysql学习打卡day17

今日成果&#xff1a; insert into products (name,quantity_in_stock,unit_price) values(t1,10,1.1),(tom,20,1.23),(t2,11,12.2); -- 一次插入多条数据 -- 字符串和日期需要加引号 -- PK代表主键记录的唯一标识 -- NN表示非空 -- AI表示自动增长 感谢各位读者查阅&#x…