PF 驱动是一个专门管理SR-IOV设备全局功能驱动,而且还要配置相关共享资源。PF 驱动 随着Hypervisor 的不同而不同,一般需要具有比普通虚拟机更高的权限才能对其进行操作。PF驱动包含了所有传统驱动的功能,使得Hypervisor能够访问设备I/O资源。也可以通过调用PF驱动执行相关操作从而影响整个设备。PF驱动必须在VF驱动之前加载,而且需要等VF驱动卸载之后才能卸载。

     
     Intel SR-IOV 驱动包含了所有 Intel 以太网卡的功能,并且还有下面使用SR-IOV时拥有的特殊功能:
     ·给每个VF生成一个MAC 地址
     ·通过信箱系统与VF驱动通信:
          ·通过VF驱动配置VLAN过滤器
          ·通过VF驱动配置多播地址
          ·通过VF驱动配置最大包长
          ·处理VF驱动资源复位请求
 
 
Virutal Function Driver
 
     标准设备驱动(驱动不会意识到自己所处的虚拟化环境)期望获知如何控制设备和设备是如何工作的。在虚拟化环境下,一个标准的驱动一般与一个软件间接层进行交互,这个软件间接层模拟了底层的物理硬件设备。大多数情况下,该驱动不会意识到这个间接层的存在。
 
     通过直接赋值,我们期望改变本地共享设备的功能。VF 接口并没有包含完整的PCIe控制功能,而且一般不能直接控制共享设备和资源,比如设置以太网连接速率。这时候有必要告知VF 驱动,使其意识到自己所处的虚拟环境。当VF驱动意识到自己所处的虚拟化环境之后,就能够直接与硬件进行数据交互。同时这些VF驱动也能够知道这些设备都是共享设备,依赖于PF驱动提供的服务来进行操作,这些操作都具有全局效果,比如初始化和下一级结构的控制。
 
PF Driver - VF Driver Communication
 
     设备共享需要一个功能就是VF驱动与PF驱动通信,这样VF驱动就能够请求具有全局功能的操作。这个信道需要具有传递信息和产生中断的能力。
 
     SR-IOV标准并没有定义这条通信线路的实现机制。Intel 选择了通过使用一系列硬件信箱和门铃寄存器来为每个VF实现这个通信信道。
     
     Intel选择使用一件信箱的根本原因是为了确保实现一个独立于Hypervisor且持久可靠的通信机制。然而, 基于软件的信道也能够用来实现该通信功能,这个功能需要由Hypervisor子系统提供。这些信道的实现各个生产商并不相同,需要客户自己启动这些支持。硬件信道则不同,总是能够工作,除非被Hypervisor禁用。现在看来,并不是所用Hypervisor生产商都提供基于软件的消息机制,因此Intel 相关度去哦那个提供了利用硬件信道的API。
 
 
Example Receive Flow
 
     一个包是如何被一个虚拟机接收和发送的:

 
第一、二步:包到达,被送往L2 进行分类和交换
第三步:       根据目的MAC地址进行分类,这时候,改包与 缓冲池1匹配
第四步:       网卡发起DMA操作,将一个包传递给一个VM
第五步:       DMA操作到达Intel 芯片集,在这里VT-d(由Hypervisor 配置)进行DMA操作所需的地址翻译;结果使得该包     
                    被直接送入到虚拟机的VF驱动缓冲里面
第六步:       网卡发起了MSI-X中断,表明该接收操作已经完成。该中断由Hypervisor接收。
第七步:       Hypervisor向虚拟机注入一个虚拟中断表明传输已经结束,这时候虚拟机的VF驱动就开始处理该包。
 
 
Mailbox Communication System
 
     有时候VF驱动必须与PF驱动通信,以便完成一些工作,这些工作在VF提供的PCI资源基础上是无法完成的。
     
     例如:当VF驱动想要定义一个VLAN过滤器。这个功能在VF中并没有暴露,因此VF驱动也不能直接配置VLAN过滤器。
 
     VF驱动能够代替VF 向PF驱动发起这种类型的配置请求。
 

 
 
Virtual Function Mailbox
 
     当一个虚拟机获得访问VF的权限后,VF 资源中的信箱功能就会暴露给该虚拟机。这个功能相当简单,这是一系列的缓冲区,可以从这些缓冲区中读取或者写入信息,并增加一个寄存器(VFMailbox)用于提供PF和VF之间的同步功能。
 
      
     VF和PF都可以访问该缓冲区,可以通过这个缓冲区来传递信息。因为信箱缓冲和VFMailbox寄存器是VF资源的一部分,因此这些资源对于特定的VF来说是独占的。这意味着针对特定VF的VF驱动不能对分配给其他虚拟机的信箱进行写入。
 
     更多的关于信箱缓冲的信息可以参见:Intel ®82559 10Gigabit Ethernet Controller Datasheet。
 
 
Physical Function Mailbox
     
     PF 驱动能够访问所有的VF信箱,通过VF信箱的信箱内(VFMBMEM:VF Mailbox Mailbox Memory)存和PF信箱(Physical Function Mailbox)寄存器阵列.
     

     当一个VF驱动向VFMBMEM缓冲写入信息并在VFMailbox寄存器中设置适当的比特位之后,就向给PF产生一个中断。PF驱动获取这些信息,并给予这条消息进行回复。
 
     这时候,PF驱动会使用信箱发送一个异步消息给VF,这就是IXGBE_PF_CONTORL_MSG 消息。
 
 
Virtual Function Driver
     
     Intel VF驱动实例代码是标准 Intel ixgbe 10 Gigabit Ethernet 驱动的一个修改后的版本。通过设备ID来加载。Intel VF有一个设备ID表明它们是一个VF, 这样祥光的驱动就可以被加载。
 
     Intel VF 驱动可以被分割为三个部分:
     ·操作系统界面——虚拟机操作系统可以通过该界面调用各种API
     ·I/O操作——使用SR-IOV 功能来进行I/O操作,而避免Hypervisor的干预
     ·配置任务——配置像VLAN过滤器等需要与PF驱动进行通信的任务
 
注:PF & VF 有时候只实际的PCIe 物理功能模块,有时候就是泛指,注意区别

高性能网络 SR-IOV机制--VF与PF的通信的更多相关文章

  1. 可靠通信的保障 —— 使用ACK机制发送自定义信息——ESFramework 通信框架4.0 快速上手(12)

    使用ESPlus.Application.CustomizeInfo.Passive.ICustomizeInfoOutter接口的Send方法,我们已经可以给服务端或其它在线客户端发送自定义信息了, ...

  2. Android中的常见通信机制和Linux中的通信机制

    Handler Handler是Android系统中的一种消息传递机制,起作用是应对多线程场景.将A进程的消息传递给B线程,实现异步消息处理.很多情况是将工作线程中需要更新UI的操作消息传递给UI主线 ...

  3. java之等待唤醒机制(线程之间的通信)

    线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同.比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消 ...

  4. java-等待唤醒机制(线程中的通信)-线程池

    为什么需要线程间的通信 多个线程并发执行时,在默认情况下CPU时随机切换线程的,当我们需要多个线程共同完成一件任务,并且 希望他们有规律的执行,那么多线程之间需要一些协调通信,以此来帮我们达到多线程共 ...

  5. android学习-IPC机制之ACtivity绑定Service通信

    bindService获得Service的binder对象对服务进行操作 Binder通信过程类似于TCP/IP服务连接过程binder四大架构Server(服务器),Client(客户端),Serv ...

  6. HTTPS协议机制

    转载:http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html 一.作用 不使用SSL/TLS的HTTP通信,就是不加密的通信.所有信息明文传播,带来了三 ...

  7. SSL/TLS协议运行机制的概述

    互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 ...

  8. SSL/TLS协议运行机制

      转载自http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行 ...

  9. 【转】SSL/TLS协议运行机制的概述

    互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 ...

随机推荐

  1. 【转】EI收录的中国期刊

    ISSN     期刊名  0567-7718 Acta Mechanica Sinica  1006-7191 Acta Metallurgica Sinica (English Letters)  ...

  2. R-FCN论文翻译

    R-FCN论文翻译 R-FCN: Object Detection viaRegion-based Fully Convolutional Networks 2018.2.6   论文地址:R-FCN ...

  3. ------- 软件调试——还原 QQ 过滤驱动对关键内核设施所做的修改 -------

    -------------------------------------------------------------------------------- 在前一篇博文中,我们已经处理完最棘手的 ...

  4. MOBA 游戏技能系统设计 2.0

    随着游戏开发的完整度提升,技能系统的设计复杂性也越来越高,导致了用模板方式的配置方法和处理方法会导致以下几个问题: 代码冗余 排错困难 配置项冗余 熟悉业务流程时间长 扩展性低 经过我思考决定重写之. ...

  5. BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]

    4518: [Sdoi2016]征途 题意:\(n\le 3000\)个数分成m组,一组的和为一个数,求最小方差\(*m^2\) DP方程随便写\(f[i][j]=min\{f[k][j-1]+(s[ ...

  6. 应用负载均衡之LVS(二):VS_TUN和VS_DR的arp问题

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  7. 通过SVG与CSS3实现向上图标

    需求 H5活动页需要用的图标很少,暂时没有使用iconfont的必要性,而通过图片的话额外增加UI的工作量以及增加请求数,前端也有很多实现简单图标的方法,所以就尝试自己去解决,写一个"返回顶 ...

  8. Jenkins实现PHP的自动部署

    1.汉化jenkins 1).安装汉化包 系统管理 -> 插件管理 -> 安装插件 ->选择插件(Locale plugin) 2).设置语言为中文 系统管理 -> 系统设置 ...

  9. 通过云主机(网关机)远程登录内网mysql

    国内的一些云主机平台(UCloud,阿里云,腾讯云等)走的都是网关机+内网机(即局域网)模式,网关机代理外网访问,不能直接连接内网机器.本文介绍通过远程登录云主机,并设置本地代理的方式,通过sqlyo ...

  10. Python自动化--语言基础4--模块、文件读写、异常

    模块1.什么是模块?可以理解为一个py文件其实就是一个模块.比如xiami.py就是一个模块,想引入使用就在代码里写import xiami即可2.模块首先从当前目录查询,如果没有再按path顺序逐一 ...