SR-IOV Overview

当在主机接口之后使用普通共享设备时,本地共享设备会为每个接口提供单独的内存空间,工作队列,中断和命令处理。这些共享资源也需要被管理,它们会向Hypervisor中可信分区提供一系列用于管理自己的寄存器。

当拥有独立的工作队列和命令处理机制后,这些设备就可以同时从多种资源接受命令,并将这些命令智能的融合在一起,在传递给下一级结构之前。
虚拟化软件不用再对I/O请求进行复用,这减少了软件的压力。
本地共享设备能够通过很多方式实现,可以按照标准实现也可以使用其他专门的实现方式。
因为大多数这些设备都是通过PCI 访问的,PCI-SIG 决定定义一种实现标准用语创建和管理本地共享设备,也就是现在的Single Root I/O Virtualization 和 Sharing (SR-IOV) specification.

SR-IOV Goal
PCI-SIG SR-IOV 标准目的在于标准化化在虚拟环境中共享一个 I/O 设备的方式。
这个目标绕开了Hypervisor 的参与,提供了独立的内存空间、中断、DMA 流给每一个虚拟机用于数据的移动。
SR-IOV 引入了两种新的function 类型:
Physical Function(PF):这是一个拥有所用PCIe 功能的fucntion,当然也包含了SR-IOV 扩展的能力
Virtual Function (VF): 这是一个轻量级的PCIe function,包含了数据移动所需的资源。
High Level Overview of PCI-SIG SR-IOV
虚拟化方法中的直接赋值提供了非常快速的I/O。 然而,这种方式使得I/O设备不能被共享。SR-IOV 标准提供了一个机制,通过这个机制使得一个单根的功能模块(比如一个以太网端口)看起来像是多个单独的物理设备。
一个支持SR-IOV 的设备能够通过配置(一般由Hypervisor来配置)在PCI的配置空间看起来像是拥有多个功能。每个功能都拥有自己的配置空间,拥有自己的基地址寄存器(BAR)。

支持SR-IOV 的设备为每个独立的虚拟功能提供了一个配置号,每个虚拟空能都拥有独立的PCI 配置空间。 Hypervisor 可以将一个活多个虚拟功能分配给一个虚拟机。内存地址翻译技术比如Intel VT-d 提供的硬件辅助技术使得可以针对每个虚拟机进行DMA传输。
SR-IOV 标准详细列出了PCI配置空间信息该如何呈现。这些信息与标准PCI设备的信息有些不同。Hypervisor必须知道如何访问和读取这些信息,以便使得VM可以访问它们。
High Level Architecture:

在虚拟化的环境中,系统中包含SR-IOV设备,Hypervisor都必须将PCI 配置空间的信息传递给虚拟机的I/O设备。对于SR-IOV 来说,Hypervisor 将实际的配置空间信息传递给特定的VF,允许虚拟机中的VF 驱动访问这些VF资源。
SR-IOV标准的一部分规定了一个支持SR-IOV的设备需要如何表明自身具有SR-IOV的能力,PCI配置空间的虚拟VF信息是如何被存储,可以怎样被访问。这是SR-IOV特有的机制。Hypervisor必须知道如何读取和分析这些信息。Linux和Xen内核已经更新,现已能够使用这项新功能。
VT-d 使得一个I/O设备通过DMA重映射操作可以直接分配给一个虚拟机。Hypervisor 必须使用I/O地址来进行配置,以便进行重映射。
注:1. 文章其实是对 Intel 提供的文档和代码的理解和翻译,
2. 这里没有讲SR-IOV具体是一个什么东西(或者说讲的太简略),如果有一定基础的朋友会知道,之后可能有会有专门的文章补充介绍

Intel 82599 ixgbe ixgbevf CNA 卡驱动分析01——SR-IOV相关推荐

  1. Linux SD卡驱动开发(五) —— SD 卡驱动分析Core补充篇

    Core层中有两个重要函数 mmc_alloc_host 用于构造host,前面已经学习过,这里不再阐述:另一个就是 mmc_add_host,用于注册host 前面探测函数s3cmci_probe, ...

  2. DPDK — 网卡初始化流程(Intel 82599 ixgbe 网卡驱动示例)

    目录 文章目录 目录 总览 rte_eth_dev/rte_eth_dev_data 数据结构 rte_eth_dev_count 函数 rte_eth_dev_configure 函数 ixgbe_ ...

  3. SD卡驱动分析(二)

    三.下面分析一下高通的android2.3的代码中SD卡驱动的流程. 在kernel中,SD卡是作为平台设备加入到内核中去的,在/kernel/arch/arm/mach-msm/devices-ms ...

  4. SD卡驱动分析(一)

    Android下的SD卡驱动与标准LINUX下的SD卡驱动好像没有太大的区别,这里就以高通的ANDROID 2.3以代表,来简要分析一下LINUX下SD卡驱动的写法.由于小弟的技术有限,分析的有错的地 ...

  5. (linux)MMC 卡驱动分析

    最近花时间研究了一下 MMC 卡驱动程序,开始在网上找了很多关于 MMC 卡驱动的分析文章,但大都是在描述各个层,这对于初学者来讲帮助并不大,所以我就打算把自己的理解写下来,希望对大家有用.个人觉得理 ...

  6. S3C2440上MMC/SD卡驱动分析(二)

    下面的文章主要是转载的,先记录下自己的经验. MMC/SD驱动有两种模式:FIFO和DMA.在代码中两种方式都予以了实现,在make menuconfig时候,可以选择是使用fifo方式还是DMA方式 ...

  7. Linux SD卡驱动开发(二) —— SD 卡驱动分析HOST篇

    回顾一下前面的知识,MMC 子系统范围三个部分: HOST 部分是针对不同主机的驱动程序,这一部是驱动程序工程师需要根据自己的特点平台来完成的. CORE 部分: 这是整个MMC 的核心存,这部分完成 ...

  8. linux SD卡驱动分析

    1. 硬件基础: SD/MMC/SDIO 概念区分概要 SD (Secure Digital )与 MMC (Multimedia Card ) SD 是一种 flash memory card 的标 ...

  9. sd 卡驱动--基于高通平台

    点击打开链接 内容来自以下博客: http://blog.csdn.net/qianjin0703/article/details/5918041 Linux设备驱动子系统第二弹 - SD卡 (有介绍 ...

  10. rt-thread SDIO驱动框架分析(SD卡驱动\SD Nand驱动)

    rt-thread SDIO驱动框架分析之SD卡驱动 文章目录 rt-thread SDIO驱动框架分析之SD卡驱动 1. 前言 2. SDIO通用驱动框架介绍 3. 文件架构分析 4. SDIO设备 ...

最新文章

  1. thinkphp 调用php文件上传,ThinkPHP实现带验证码的文件上传功能实例
  2. 常微分方程数值求解【python】
  3. 基于 abp vNext 和 .NET Core 开发博客项目 - 使用Redis缓存数据
  4. 机器学习(四)决策树
  5. 几何与代数(1)知识框架(出题根据)
  6. 怎么去除表中的系统导出的字符_EXCEL非常有用的字符函数LEN、LENB,财务工作者的必备利器...
  7. 行!人工智能玩大了!程序员:太牛!你怎么看?
  8. python大学什么专业学校_好学校的差专业和一般大学的好专业,该怎么选?我来说真话……...
  9. ThihkPHP开发聚合支付系统源码 兼容所有易支付程序
  10. 共用体变量不能在定义时初始化_【C语言资料更新】共用体联合体
  11. leetcode题库3-- 无重复字符的最长子串
  12. Failed to create AppDomain 'xxx'. Exception has been Failed to create AppDomain
  13. matlab2c使用c++实现matlab函数系列教程-wilkinson函数
  14. tftp怎么给服务器传文件,(tftp) - 在本机和tftp服务器之间使用TFTP协议传输文件...
  15. TongWeb8知识总结
  16. RGB与CMYK几其他颜色模式的区别
  17. 前端的一些实用算法题
  18. linux新建用户退格键(删除键)无法正常使用的问题总结
  19. 计算机教师师徒结对协议,学期信息技术师徒结对总结
  20. Thinkpad L440 无线驱动突然无法使用,无法搜索到无线上网

热门文章

  1. android中listview没有item也能点击事件,ListView中的Item不能点击的解决方法
  2. 锁相环环路滤波器计算公式_锁相环和射频振荡器简介
  3. mysql中的on的执行顺序_MySQL -- join , on , where 的执行顺序
  4. varchar长度可以任意设置吗_户内金属软管长度可以超过2m吗?
  5. redux-saga源码解析
  6. Vue+Webpack打造todo应用
  7. Moya网络层 + ObjectMapper数据转模型
  8. centos6 revive-adserver
  9. 菜比如我的漫漫react学习路(二)
  10. AC日记——计算循环节长度 51nod 1035