码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【重识云原生】第四章云网络4.7.8节——SR-IOV方案


    1 高性能SR-IOV网络(SR-IOV)

    1.1 SR-IOV原理简介

            SR-IOV是Single Root I/O Virtualization的缩写。SR-IOV 技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。SR-IOV 标准允许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能。SR-IOV 规范定义了新的标准,根据该标准,创建的新设备可允许将虚拟机直接连接到 I/O 设备。

            SR-IOV 规范由 PCI-SIG 在 http://www.pcisig.com 上进行定义和维护。

            单个 I/O 资源可由许多虚拟机共享。共享的设备将提供专用的资源,并且还使用共享的通用资源。这样,每个虚拟机都可访问唯一的资源。因此,启用了 SR-IOV 并且具有适当的硬件和 OS 支持的 PCIe 设备(例如以太网端口)可以显示为多个单独的物理设备,每个都具有自己的 PCIe 配置空间。

    SR-IOV 技术

    SR-IOV 中的两种新功能类型是:

    • 物理功能 (Physical Function, PF)

            用于支持 SR-IOV 功能的 PCI 功能,如 SR-IOV 规范中定义。PF 包含 SR-IOV 功能结构,用于管理 SR-IOV 功能。PF 是全功能的 PCIe 功能,可以像其他任何 PCIe 设备一样进行发现、管理和处理。PF 拥有完全配置资源,可以用于配置或控制 PCIe 设备。

    • 虚拟功能 (Virtual Function, VF)

            与物理功能关联的一种功能。VF 是一种轻量级 PCIe 功能,可以与物理功能以及与同一物理功能关联的其他 VF 共享一个或多个物理资源。VF 仅允许拥有用于其自身行为的配置资源。

            每个 SR-IOV 设备都可有一个物理功能 (Physical Function, PF),并且每个 PF 最多可有 64,000 个与其关联的虚拟功能 (Virtual Function, VF)。PF 可以通过寄存器创建 VF,这些寄存器设计有专用于此目的的属性。

            一旦在 PF 中启用了 SR-IOV,就可以通过 PF 的总线、设备和功能编号(路由 ID)访问各个 VF 的 PCI 配置空间。每个 VF 都具有一个 PCI 内存空间,用于映射其寄存器集。VF 设备驱动程序对寄存器集进行操作以启用其功能,并且显示为实际存在的 PCI 设备。创建 VF 后,可以直接将其指定给 IO 来宾域或各个应用程序(如裸机平台上的 Oracle Solaris Zones)。此功能使得虚拟功能可以共享物理设备,并在没有 CPU 和虚拟机管理程序软件开销的情况下执行 I/O。

    1.2 SR-IOV 的优点

            SR-IOV 标准允许在 IO 来宾域之间高效共享 PCIe 设备。SR-IOV 设备可以具有数百个与某个物理功能 (Physical Function, PF) 关联的虚拟功能 (Virtual Function, VF)。VF 的创建可由 PF 通过设计用来开启 SR-IOV 功能的寄存器以动态方式进行控制。缺省情况下,SR-IOV 功能处于禁用状态,PF 充当传统 PCIe 设备。

            具有 SR-IOV 功能的设备可以利用以下优点:

    • 高性能-从虚拟机环境直接访问硬件。
    • 成本降低-节省的资本和运营开销包括:
      • 节能
      • 减少了适配器数量
      • 简化了布线
      • 减少了交换机端口

    1.3 SR-IOV限制

            在SR-IOV passthrough的场景下,虚拟机(VM)可以获得与裸金属主机上相比拟的网络性能。但是,仍然存在两个限制:

            (1)SR-IOV VF passthrough到VM后,VM的迁移性会受限,主要原因在于SR-IOV这种passthrough I/O借助了Intel CPU VT-d(Virtualization Technology for Directed I/O)或AMD的IOMMU(I/O Memory Management Unit)技术,在VM上VF网卡初始化的时候,建立了Guest虚拟地址到Host物理地址的映射表,所以这种“有状态”的映射表在热迁移的过程中会丢失。

            (2)由于SR-IOV VF passthrough到VM,而SR-IOV PF直接连接到TOR上,在这种部署环境中虚拟机(VM)对外的网络需要自定义,如需要像OVS-DPDK那样自动开通网络,则需要将TOR加入SDN控制器的管理范畴,由SDN控制器统一管控,这样做通常会使网络运营变的非常复杂。

            针对上面第二个问题,Mellanox最早提出在其智能网卡上支持OVS Fastpath硬件卸载,结合SR-IOV VF passthrough到VM一起使用,提供临近线速转发的网络能力,解决了虚拟机(VM)租户网络自动化编排开通的问题。

            在OVS Fastpath卸载后,OVS转发报文时,数据流首包仍然做软件转发,在转发过程中生成Fastpath转发流表并配置到硬件网卡上,这个数据流的后续报文则通过硬件直接转发给虚拟机(VM)。由于早期的Mellanox智能网卡还没有集成通用CPU核,OVS的控制面依然在物理主机上运行。

    1.4 SR-IOV内部架构

            以上图为例逐个解释关键词:

    1. PF就是物理网卡所支持的一项PCI功能,PF可以扩展出若干个VF
    2. VF是支持SRIOV的物理网卡所虚拟出的一个“网卡”或者说虚出来的一个实例,它会以一个独立网卡的形式呈现出来,每一个VF有它自己独享的PCI配置区域,并且可能与其他VF共享着同一个物理资源(公用同一个物理网口)
    3. PF miniport driver即PF驱动是工作于Hyper-V虚拟化平台父区域的,并在VF之前最先加载
    4. VF miniport driver即VF驱动是工作于Hyper-V虚拟化平台子区域的,即guestOS;需要注意的是,VF及PF之间是隔离的,任何经由VF驱动或所执行的结果都不会影响到其他的VF或PF
    5. Network Interface Card即物理网卡,在启用SRIOV之后会生成若干vport,物理NIC所要做的就是转发physical port与vport之间的流量
    6. physical port顾名思义就是物理网口,在SRIOV场景中physical port充当一个面向对外的网络媒介
    7. VPort是个抽象出来的接口,类似于物理网口,它们被映射给每一个VF或者PF,供parentOS或guestOS来使用

            通过以上架构的描述就可以看出,启用SRIOV之后,物理NIC将通过VF与虚拟机(VF driver)进行数据交互,反之亦然。那么这样一来即可跳过中间的虚拟化堆栈(即VMM层),以达到近乎于纯物理环境的性能;这一点也是SRIOV最大的价值所在

    参考链接

    DPU和CPU互联的接口之争:Virtio还是SR-IOV? - 极术社区 - 连接开发者与智能计算生态

    KVM 虚拟化详解 - 知乎

    DPU应用场景系列(一)网络功能卸载 - 知乎

    SR-IOV 基本原理 - 灰信网(软件开发博客聚合)

    虚拟化中的SR-IOV_谢睿的工作博客的技术博客_51CTO博客

    网络虚拟化——SR-IOV_dillanzhou的博客-CSDN博客_sr-iov

    SR-IOV虚拟化简解_来杯清咖_的博客-CSDN博客_sr-iov

    SR-IOV 简介 - 编写设备驱动程序

    SR-IOV是什么?性能能好到什么程度? - 知乎

    SR-IOV_百度百科

    SR-IOV 简介 - 编写设备驱动程序

    IO虚拟化——SR-IOV 原理

    SR-IOV详解_43259260的博客-CSDN博客_sr-iov

    虚拟化中的SR-IOV_谢睿的工作博客的技术博客_51CTO博客

    SR-IOV 基本原理 - 灰信网(软件开发博客聚合)

     《重识云原生系列》专题索引: 

    1. 第一章——不谋全局不足以谋一域
    2. 第二章计算第1节——计算虚拟化技术总述
    3. 第三章云存储第1节——分布式云存储总述
    4. 第四章云网络第一节——云网络技术发展简述
    5. 第四章云网络4.2节——相关基础知识准备
    6. 第四章云网络4.3节——重要网络协议
    7. 第四章云网络4.3.1节——路由技术简述
    8. 第四章云网络4.3.2节——VLAN技术
    9. 第四章云网络4.3.3节——RIP协议
    10. 第四章云网络4.3.4节——OSPF协议
    11. 第四章云网络4.3.5节——EIGRP协议
    12. 第四章云网络4.3.6节——IS-IS协议
    13. 第四章云网络4.3.7节——BGP协议
    14. 第四章云网络4.3.7.2节——BGP协议概述
    15. 第四章云网络4.3.7.3节——BGP协议实现原理
    16. 第四章云网络4.3.7.4节——高级特性
    17. 第四章云网络4.3.7.5节——实操
    18. 第四章云网络4.3.7.6节——MP-BGP协议
    19. 第四章云网络4.3.8节——策略路由
    20. 第四章云网络4.3.9节——Graceful Restart(平滑重启)技术
    21. 第四章云网络4.3.10节——VXLAN技术
    22. 第四章云网络4.3.10.2节——VXLAN Overlay网络方案设计
    23. 第四章云网络4.3.10.3节——VXLAN隧道机制
    24. 第四章云网络4.3.10.4节——VXLAN报文转发过程
    25. 第四章云网络4.3.10.5节——VXlan组网架构
    26. 第四章云网络4.3.10.6节——VXLAN应用部署方案
    27. 第四章云网络4.4节——Spine-Leaf网络架构
    28. 第四章云网络4.5节——大二层网络
    29. 第四章云网络4.6节——Underlay 和 Overlay概念
    30. 第四章云网络4.7.1节——网络虚拟化与卸载加速技术的演进简述
  • 相关阅读:
    一幅长文细学CSS3
    png转pdf怎么转换?这些图片格式转换工具确定不来看看?
    【Kaggle竞赛总结】ECCV2020全球小麦检测(Global Wheat Detection)竞赛总结
    Zookeeper
    【PCL自学:Segmentation3】基于PCL的点云分割:区域增长分割
    【C++】线程库
    第三章:Qt Creator 之 3.3 新建项目
    URL中的参数提取
    浅谈6种流行的API架构风格
    2024年度“阳江市惠民保”正式发布!阳江市专属补充医疗保险全新升级
  • 原文地址:https://blog.csdn.net/junbaozi/article/details/125417368
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号