目录

Single Root I/O虚拟化(SR-IOV)概述

SR-IOV架构

Hyper-V可扩展交换机简介

SR-IOV物理功能(PF)

编写SR-IOV PF微型端口驱动程序概述

SR-IOV虚拟功能(VF)

编写SR-IOV VF微型端口驱动程序概述

NIC交换机

管理NIC交换机

SR-IOV数据路径

相关阅读


Single Root I/O虚拟化(SR-IOV)概述

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/overview-of-single-root-i-o-virtualization--sr-iov-


Single Root I / O虚拟化(SR-IOV)接口是对PCI Express(PCIe)规范的扩展。SR-IOV允许设备(例如网络适配器)在各种PCIe硬件功能之间分离对其资源的访问。这些功能包括以下类型:

  • 一个的PCIe物理功能(PF) 。此功能是设备的主要功能,并通告设备的SR-IOV功能。PF与虚拟化环境中的Hyper-V父分区关联。
  • 一个或多个PCIe虚拟功能(VF)。每个VF与设备的PF相关联。VF与设备上的PF和其他VF共享设备的一个或多个物理资源,例如内存和网络端口。每个VF与虚拟化环境中的Hyper-V子分区关联。

每个PF和VF均分配有唯一的PCI Express请求者ID(RID),该ID允许I / O内存管理单元(IOMMU)区分不同的业务流,并在PF和VF之间应用内存和中断转换。这样可以将流量直接传递到适当的Hyper-V父分区或子分区。结果,非特权数据流量从PF流向VF,而不会影响其他VF。

SR-IOV使网络流量可以绕过Hyper-V虚拟化堆栈的软件交换层。由于VF已分配给子分区,因此网络流量直接在VF和子分区之间流动。结果,减少了软件仿真层中的I / O开销,并实现了与非虚拟化环境几乎相同的网络性能。

有关更多信息,请参见以下主题:

SR-IOV架构

SR-IOV数据路径

SR-IOV架构

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/sr-iov-architecture


本节简要概述了单根I / O虚拟化(SR-IOV)接口及其组件。

下图显示了Windows Server 2012中从NDIS 6.30开始的SR-IOV的组件。

SR-IOV接口包含以下组件:

  1. Hyper-V可扩展交换机模块:可扩展交换机模块,用于配置SR-IOV网络适配器上的NIC交换机,以提供与Hyper-V子分区的网络连接。注意  Hyper-V子分区称为虚拟机(VM)
  2. 如果子分区连接到PCI Express(PCIe)虚拟功能(VF),则可扩展交换机模块将不参与VM和网络适配器之间的数据通信。取而代之的是,数据流量直接在VM和它所连接的VF之间传递。有关可扩展交换机的更多信息,请参见Hyper-V可扩展交换机。
  3. 物理功能(PF):PF是支持SR-IOV接口的网络适配器的PCI Express(PCIe)功能。PF在PCIe配置空间中包括SR-IOV扩展功能。该功能用于配置和管理网络适配器的SR-IOV功能,例如启用虚拟化和公开VF。有关更多信息,请参阅SR-IOV物理功能(PF)。
  4. PF微型端口驱动程序:PF微型端口驱动程序负责管理一个或多个VF使用的网络适配器上的资源。因此,在为VF分配任何资源之前,将PF微型端口驱动程序加载到管理操作系统中。释放为VF分配的所有资源后,将停止PF微型端口驱动程序。有关更多信息,请参见编写SR-IOV PF微型端口驱动程序。
  5. 虚拟功能(VF):VF是支持SR-IOV接口的网络适配器上的轻型PCIe功能。VF与网络适配器上的VF关联,并且代表网络适配器的虚拟实例。每个VF都有自己的PCI配置空间。每个VF还与PF和其他VF共享网络适配器上的一个或多个物理资源,例如外部网络端口。有关更多信息,请参见SR-IOV虚拟功能(VF)。
  6. VF微型端口驱动程序:VF微型端口驱动程序安装在VM中以管理VF。VF微型端口驱动程序执行的任何操作都不得影响同一网络适配器上的任何其他VF或PF。有关更多信息,请参见编写SR-IOV VF微型端口驱动程序。
  7. 网络接口卡(NIC)开关:NIC开关是支持SR-IOV接口的网络适配器的硬件组件。NIC交换机在适配器的物理端口和内部虚拟端口(VPort)之间转发网络流量。每个VPort都连接到PF或VF。有关更多信息,请参阅NIC交换机。
  8. 虚拟端口(VPort ):VPort是一个数据对象,代表支持SR-IOV接口的网络适配器的NIC交换机上的内部端口。类似于物理交换机上的端口,NIC交换机上的VPort向与该端口相连的PF或VF传递数据包。有关更多信息,请参阅NIC交换机。
  9. 物理端口:物理端口是网络适配器的硬件组件,支持SR-IOV接口。物理端口提供了适配器上与外部网络介质的接口。

Hyper-V可扩展交换机简介

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/hyper-v-extensible-switch


Hyper-V可扩展交换机支持一个接口,该接口允许NDIS筛选器驱动程序实例(称为可扩展交换机扩展)绑定到可扩展交换机驱动程序堆栈中。绑定和启用它们之后,扩展可以监视,修改数据包并将其转发到可扩展的交换机端口。这还允许扩展拒绝,重定向数据包或将数据包发送到Hyper-V分区使用的端口。

从Windows Server 2012中的NDIS 6.30开始支持Hyper-V可扩展开关。

本节包括以下主题,这些主题描述了Hyper-V可扩展交换机及其接口:

  • 开始编写Hyper-V可扩展交换机扩展
  • Hyper-V可扩展交换机概述
  • Hyper-V可扩展交换机体系结构
  • 编写Hyper-V可扩展交换机扩展
  • 安装Hyper-V可扩展交换机扩展
  • Hyper-V可扩展交换机OID

SR-IOV物理功能(PF)

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/sr-iov-physical-function--pf-


物理功能(PF)是网络适配器的PCI Express(PCIe)功能,支持单根I / O虚拟化(SR-IOV)接口。PF在PCIe配置空间中包括SR-IOV扩展功能。该功能用于配置和管理网络适配器的SR-IOV功能,例如启用虚拟化和公开PCIe虚拟功能(VF)。

PF在Hyper-V父分区的管理操作系统中作为虚拟网络适配器公开。PF微型端口驱动程序是在管理操作系统中管理PF的NDIS微型端口驱动程序。VF的配置和配置,以及用于支持VF的其他硬件和软件资源,是通过PF微型端口驱动程序执行的。PF微型端口驱动程序使用传统的NDIS微型端口驱动程序功能来提供对管理操作系统的网络I / O资源的访问。PF驱动程序还用作管理适配器上为VF分配的资源的方法。

PF在其PCIe配置空间中支持SR-IOV扩展功能结构。此结构在PCI-SIG单根I / O虚拟化和共享1.1规范中定义。该结构包括以下成员:

TotalVFs
一个只读字段,指定可以与PF关联的VF的最大数量。

NumVFs
一个读写字段,它指定SR-IOV网络适配器上可用的VF的当前数量。

SR-IOV控制
一个读写字段,它指定用于启用或禁用网络适配器上的SR-IOV功能的各种控制位。例如,如果VF使能位设置为1 ,则VF可以与适配器上的PF关联。如果此位设置为零,则VF被禁用,并且在适配器上不可见。

PF还为管理操作系统提供了与外部物理网络进行通信的机制。PF提供了与连接到Hyper-V可扩展交换机模块的所有虚拟网络适配器的网络连接。这包括以下内容:

  • 提供与Hyper-V父分区的网络连接的虚拟网络适配器。

  • 提供与未为其分配VF的Hyper-V子分区的网络连接的虚拟网络适配器。

PF miniport驱动程序负责管理一个或多个VF使用的网络适配器上的资源。因此,在为VF分配任何资源之前,将PF微型端口驱动程序加载到管理操作系统中。释放为VF分配的所有资源后,将停止PF微型端口驱动程序。

编写SR-IOV PF微型端口驱动程序概述

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/writing-sr-iov-pf-miniport-drivers


本节讨论为单个根I / O虚拟化(SR-IOV)网络适配器的PCI Express(PCIe)物理功能(PF)编写NDIS微型端口驱动程序的要求和准则。

本节包括以下主题:

初始化PF Miniport驱动程序

管理NIC交换机

管理虚拟端口

管理虚拟功能

停止PF微型端口驱动程序

PF微型端口驱动程序的INF要求

注意:  有关如何为SR-IOV网络适配器的PCIe虚拟功能(VF)编写微型端口驱动程序的信息,请参阅《编写SR-IOV VF微型端口驱动程序》。

SR-IOV虚拟功能(VF)

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/sr-iov-virtual-functions--vfs-


PCI Express(PCIe)虚拟功能(VF)是网络适配器上的轻量级PCIe功能,支持单根I / O虚拟化(SR-IOV)。VF与网络适配器上的PCIe物理功能(PF)关联,并且代表网络适配器的虚拟实例。每个VF都有自己的PCI配置空间。每个VF还与PF和其他VF共享网络适配器上的一个或多个物理资源,例如外部网络端口。

VF不是成熟的PCIe设备。但是,它提供了用于在Hyper-V子分区和基础SR-IOV网络适配器之间直接传输数据的基本机制。与数据传输相关的软件资源可直接用于VF,并且与其他VF或PF隔离使用。但是,大多数这些资源的配置由运行在Hyper-V父分区的管理操作系统中的PF微型端口驱动程序执行。

在Hyper-V子分区中运行的来宾操作系统中,VF作为虚拟网络适配器(VF网络适配器)公开。在将VF与SR-IOV网络适配器的NIC交换机上的虚拟端口(VPort)关联之后,在VM中运行的虚拟PCI(VPCI)驱动程序将公开VF网络适配器。公开后,来宾操作系统中的PnP管理器将加载VF微型端口驱动程序。

注意  Hyper-V子分区也称为虚拟机(VM)

VF微型端口驱动程序是VM中安装的用于管理VF的NDIS微型端口驱动程序。VF微型端口驱动程序执行的任何操作都不得影响同一网络适配器上的任何其他VF或PF。

VF微型端口驱动程序可以像任何PCI设备驱动程序一样运行。它可以读写VF的PCI配置空间。但是,对虚拟PCI设备的访问是特权操作,并且由PF微型端口驱动程序通过以下方式进行管理:

  • 当VF微型端口驱动程序调用NdisMGetBusData从VF网络适配器的PCI配置空间读取数据时,将通知虚拟化堆栈。该堆栈在Hyper-V父分区的管理操作系统中运行。当堆栈被告知读取请求时,它将向PF微型端口驱动程序发出OID_SRIOV_READ_VF_CONFIG_SPACE的对象标识符(OID)方法请求。OID请求中包含的NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS结构中指定了要读取的数据。

    驱动程序从VF PCI配置空间读取请求的数据,并通过完成OID请求返回数据。当对NdisMGetBusData的调用完成时,此数据然后返回到VF微型端口驱动程序。

  • 当VF微型端口驱动程序调用NdisMSetBusData将数据写入VF网络适配器的PCI配置空间时,将向虚拟化堆栈通知写入请求。它向PF微型端口驱动程序发出OID_SRIOV_WRITE_VF_CONFIG_SPACE的OID方法请求。OID请求中包含的NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS结构中指定了要写入的数据。

    驱动程序将数据写入VF PCI配置空间,并在完成OID请求后返回请求的状态。对NdisMSetBusData的调用完成后,此状态将返回到VF微型端口驱动程序。

VF微型端口驱动程序也可以与PF微型端口驱动程序进行通信。该通信路径通过反向通道接口。有关更多信息,请参见SR-IOV PF / VF反向通道通信。

注意  VF微型端口驱动程序必须知道它正在虚拟环境中运行,以便它可以与PF微型端口驱动程序进行某些操作的通信。有关驱动程序如何执行此操作的更多信息,请参见初始化VF微型端口驱动程序。

编写SR-IOV VF微型端口驱动程序概述

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/writing-sr-iov-vf-miniport-drivers


本节讨论为单根I / O虚拟化(SR-IOV)网络适配器的PCI Express(PCIe)虚拟功能(VF)编写NDIS微型端口驱动程序的要求和准则。

本节包括以下主题:

初始化VF微型端口驱动程序

停止VF微型端口驱动程序

VF Miniport驱动程序的INF要求

注意:  有关如何为SR-IOV网络适配器的PCIe物理功能(PF)编写微型端口驱动程序的信息,请参阅《编写SR-IOV PF微型端口驱动程序》。

NIC交换机

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/nic-switches


支持单根I / O虚拟化(SR-IOV)的网络适配器必须实现硬件桥,该硬件桥可在适配器的物理端口和内部虚拟端口(VPort)之间转发网络流量。该网桥称为NIC交换机,如下图所示。

每个NIC交换机包含以下组件:

  • 一个外部或物理端口,用于提供与外部物理网络的网络连接。

  • 一个内部端口,可为网络适配器上的PCI Express(PCIe)物理功能(PF)提供对外部物理网络的访问。内部端口称为虚拟端口(VPort)

    PF始终具有一个已创建并分配给它的VPort。该VPort被称为默认VPort,并由DEFAULT_VPORT_ID标识符引用。

    有关VPort的更多信息,请参见虚拟端口(VPort)。

  • 一个或多个VPort,它们在网络适配器上提供PCIe虚拟功能(VF)并可以访问外部物理网络。

    注意  可以创建其他VPort,并将其分配给PF以进行网络访问。

注意  从Windows Server 2012中的NDIS 6.30开始,SR-IOV接口仅在网络适配器上支持一个NIC开关。此开关被称为默认NIC开关,并由NDIS_DEFAULT_SWITCH_ID标识符引用。

NIC交换机的硬件资源由SR-IOV网络适配器的PF微型端口驱动程序管理。驱动程序通过以下方法之一创建和配置NIC交换机:

  • 基于标准化SR-IOV和NIC开关INF关键字的静态创建。有关这些关键字的更多信息,请参见SR-IOV的标准化INF关键字。

  • 基于OID_NIC_SWITCH_CREATE_SWITCH的对象标识符(OID)方法请求的动态创建。NDIS或Hyper-V可扩展交换机模块发出这些OID请求,以在SR-IOV网络适配器上创建NIC交换机。

有关如何创建,配置和管理NIC交换机的更多信息,请参阅《管理NIC交换机》。

管理NIC交换机

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/managing-nic-switches


本节介绍了管理支持单根I / O虚拟化(SR-IOV)的网络适配器的NIC交换机的要求和准则。SR-IOV网络适配器的PCI Express(PCIe)物理功能(PF)的微型端口驱动程序管理适配器上的NIC开关。

本节包括以下主题:

创建一个NIC交换机

删除网卡交换机

枚举网络适配器上的NIC交换机

查询网卡参数

设置网卡交换机参数

有关SR-IOV网络适配器的NIC交换机的更多信息,请参阅NIC交换机。

注意  只有PF微型端口驱动程序可以配置网络适配器的硬件资源,例如NIC交换机。SR-IOV网络适配器上的PCIe虚拟功能(VF)的微型端口驱动程序无法直接访问适配器的大多数硬件资源。有关更多信息,请参见编写SR-IOV VF微型端口驱动程序。

SR-IOV数据路径

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/sr-iov-data-paths


本节介绍了支持单根I / O虚拟化(SR-IOV)的网络适配器与Hyper-V父分区和子分区之间的可能数据路径。

本节包括以下主题:

SR-IOV数据路径概述

SR-IOV VF数据路径

SR-IOV综合数据路径

SR-IOV VF故障转移和实时迁移支持

相关阅读


《DPDK 20.05 | rte_pci_bus思维导图 | 第一版》

《linux系统下:IO端口,内存,PCI总线 的 读写(I/O)操作》

《Linux指令:lspci显示PCI总线设备信息》

《Linux PCI驱动框架分析:(Peripheral Component Interconnect,外部设备互联)》

《关于英特尔® 以太网服务器适配器中 SR-IOV 的常见问题解答》

PCIe规范的扩展:SR-IOV(Single Root I/O virtual)网卡直通技术相关推荐

  1. SR-IOV(Single Root I/O Virtualization):将PCIe共享给虚拟机的标准

    目录 SR-IOV要求 SR-IOV vs PCI path-through 架构上的比较(以网卡为例) Virtio 和 Pass-Through 的详细比较 SR-IOV vs DPDK SR-I ...

  2. 实现不同符合PCI规范的适配器 需求说明:PCI是一种规范,所有实现了该规范的适配器,必如显卡、声卡、网卡都可以安装到PCI插槽上并工作。模拟实现该功能。

    实现不同符合PCI规范的适配器 需求说明:PCI是一种规范,所有实现了该规范的适配器,必如显卡.声卡.网卡都可以安装到PCI插槽上并工作.模拟实现该功能. 实现思路及关键代码 1)定义PCI接口,具有 ...

  3. PCIe的capability扩展空间字段解释

    解释 这是一段关于高级错误报告的信息,其中包含多个字段和值.以下是每个字段的详细解释: Capabilities: [100 v1] Advanced Error Reporting 这是该设备支持高 ...

  4. Ubuntu 20.04 开启root权限登陆、网卡配置

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长

  5. pci-e串口卡linux 驱动下载,万能PCI串口卡驱动下载

    下面点击下载安装,最新更新的这个版本对于很多用户来说,体验感觉还是可以的.虽然有一些小问题没有解决,但是大体上还是符合用户使用需求.尤其是针对之前版本的修改,就比较OK的感觉. 万能PCI串口卡驱动官 ...

  6. 2021年二月下旬文章导读与开源项目仓库 | scatter-gather DMA,SR-IOV,ARP欺骗,中断,Lockdep,virtio,vhost

    目录 文章目录 开源项目仓库 [转]浅谈scatter-gather DMA SR-IOV:网卡直通技术 [黑客入门] 连接公共WIFI有多危险(ARP欺骗) DPDK ACL算法介绍 文章目录 Li ...

  7. 深入理解SR-IOV和IO虚拟化

    一.背景 SR-IOV(Single Root I/O Virtualization)是由PCI-SIG组织定义的PCIe规范的扩展规范<Single Root I/O Virtualizati ...

  8. 网络虚拟化——SR-IOV

    之前的多篇文章介绍了网络虚拟化常见的技术实现,特别是virtio/vhost技术的实现.虽然virtio/vhost架构显著改善了虚拟网络的性能,但virtio网卡仍然是软件模拟的设备,其性能稳定性和 ...

  9. 华为dra路由方式分为relay和proxy_华为云计算(3)——网络虚拟化

    ​关注微信公众号IT小组,获取更多干货知识~ 一.网络虚拟化 网络虚拟化在介绍网络虚拟化之前,需要考虑一个问题--为什么需要网络虚拟化呢?之所以要对网络进行虚拟化,是因为在没有进行虚拟化之前,每个服务 ...

最新文章

  1. linux快捷上传下载文件
  2. “重置”不是“清空”
  3. exe编辑器_windows下的EXE文件大揭密
  4. HyperLedger Fabric区块链技术形成(1.2)
  5. conda install pytorch torchvision cudatoolkit=10.2 -c pytorch 报错
  6. cmd c语言 文件,DSP,如何编写CMD文件!(转)
  7. java 线程状态_【19期】为什么Java线程没有Running状态?
  8. 互联网,就像一条条丝线一样,将每个个体、每个组织串联在一起
  9. python 中 enumerate() 函数使用
  10. Mysql 全局锁入门
  11. android模拟器模拟nfc功能吗,打开NFC模拟器不适用于Android模拟器
  12. 微软vc运行库地址VC9VC11
  13. 高中计算机会考操作题frontpage,高中信息技术会考frontpage操作题要点
  14. 恢复chrome浏览器书签
  15. 开机自动启动程序的操作(就是这么简单)
  16. java文档翻译,将word文件翻译该怎么操作?
  17. 怎么对电脑的DNS进行设置从而使网速更快
  18. 马陆计算机专业学校,“大路考”有变!智能化监考系统首次投入应用[图]
  19. 打造T型人才,团队管理,研发效能
  20. BART中文摘要生成,(nplcc与LCSTS数据集)

热门文章

  1. 剑指Offer09-用两个栈实现队列
  2. Java并发编程-八锁问题带你彻底理解对象锁和类锁
  3. MSDN 教程短片 WPF 20(绑定3-ObjectDataProvider)
  4. C# WebService发布 未能创建类型 问题
  5. Python3多进程与多线程区别及使用(1.进程)
  6. bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级【分层图+spfa】
  7. 方法 -------JavaScript
  8. 官网下载旧版本的Xcode
  9. 二维码的生成和扫描识别
  10. 使用Velocity(VTL)调用自定义C# .net 中的方法