首页> 中国专利> 一种支持单根IO虚拟化用户级接口控制装置及其方法

一种支持单根IO虚拟化用户级接口控制装置及其方法

摘要

本发明公开一种支持单根IO虚拟化用户级接口控制装置及方法,所述装置包括:系统总线接口模块,用于对所述装置与处理器之间的数据传输,实现符合PCI Express协议的事务层,数据链路层,和物理层功能;操作模块,用于实现设备配置空间,以及虚功能VF的通信接口QP与操作队列OQ资源之间的映射,使用门铃机制对QP进行直接访问,其包含M个操作队列,所述M≥1;DMA模块,用于根据DMA引擎的空闲情况,对DMA引擎进行映射,所述DMA引擎进行数据的发送与接收;网络包分发仲裁模块,用于接收DMA引擎发出的网络包,将不同的DMA引擎的网络包进行仲裁选择发送,同时接收网络中的网络包,发送至DMA引擎进行处理。

著录项

  • 公开/公告号CN102650976A

    专利类型发明专利

  • 公开/公告日2012-08-29

    原文格式PDF

  • 申请/专利权人 中国科学院计算技术研究所;

    申请/专利号CN201210096454.4

  • 申请日2012-04-01

  • 分类号G06F13/28(20060101);H04L12/56(20060101);

  • 代理机构11006 北京律诚同业知识产权代理有限公司;

  • 代理人梁挥;祁建国

  • 地址 100190 北京市海淀区中关村科学院南路6号

  • 入库时间 2023-12-18 07:55:56

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-07-09

    授权

    授权

  • 2012-10-17

    实质审查的生效 IPC(主分类):G06F13/28 申请日:20120401

    实质审查的生效

  • 2012-08-29

    公开

    公开

说明书

技术领域

本发明涉及I/O虚拟化技术,尤其涉及计算机互联中的用户级通信接口技 术,涉及服务器系统中的网络接口控制器技术。

背景技术

服务器系统的性能由其计算能力和通信能力两部分共同决定。随着服务器 系统中处理器数量的不断增加,以及单个处理器性能的不断提高,对其通信的 性能提出了更高的要求。通信性能的提高与网络接口控制器的设计紧密相关。 网络接口控制器是指用于连接处理器到互连网络并具有一定网络处理能力的 硬件设备。由于网络接口控制器位于处理器和互连网络之间,它的性能决定了 处理器和互连网络之间的连接效率。

实现用户级通信接口是提高网络接口控制器性能的重要途径之一。通过用 户级通信接口,应用程序可以实现对网络接口控制器硬件的直接访问,从而消 除操作系统转发引入的通信开销,大大提高通信的效率。

然而随着云计算的快速发展,虚拟化技术得到了广泛的使用。单台服务器 上需要承载若干虚拟机的运行,相应的,网络接口控制器被若干虚拟机共享使 用。但是虚拟机运行的客户操作系统(Guest OS)之间拥有不同的地址空间, 使得传统网络接口控制器无法被各个客户操作系统直接共享访问。其提供的通 信接口必须需要虚拟控制器层(Hypervisor)的仲裁和地址重新映射,最终导 致用户级通信的效率无法发挥。

因此,新型网络接口控制器需要实现用户级通信接口技术与虚拟化技术的 有效结合,才能适应云计算中对高性能网络通信的需求。

发明内容

为解决上述问题,本发明提供了一种支持单根IO虚拟化用户级接口控制 装置及方法,目的是本发明在实现被多个虚拟机直接访问的同时,还为虚拟机 上运行的应用程序提供灵活高效的用户级通信接口;若干虚拟机对网络进行共 享访问时,本发明的网络接口控制器可以满足虚拟机对网络访问的服务质量 (QoS)要求。

本发明公开一种支持单根IO虚拟化用户级接口控制装置,包括:

系统总线接口模块,用于对所述装置与处理器之间的数据传输,实现符合 PCI Express协议的事务层,数据链路层,和物理层功能;

操作模块,用于实现设备配置空间,以及虚功能VF的通信接口QP与操作 队列OQ资源之间的映射,使用门铃机制对QP进行直接访问,其包含M个操作 队列,所述M≥1;

DMA模块,用于根据DMA引擎的空闲情况,对DMA引擎进行映射,所述DMA 引擎进行数据的发送与接收;

网络包分发仲裁模块,用于接收DMA引擎发出的网络包,将不同的DMA 引擎的网络包进行仲裁选择发送,同时接收网络中的网络包,发送至DMA引擎 进行处理。

所述的支持单根IO虚拟化用户级接口控制装置,所述操作模块还包括:

操作队列映射模块,用于对所述设备配置空间中的一个物理功能PF配置 空间和N个虚功能VF配置空间,实现虚功能VF的通信接口QP与操作队列OQ 资源之间的映射;

操作队列模块,用于将M个操作队列缓存每个虚功能VF的通信接口QP 的DMA门铃,并且供DMA模块读取后分配给DMA引擎使用,每个操作队列由一 个FIFO组成。

所述的支持单根IO虚拟化用户级接口控制装置,包括:

所述通信接口QP,为所述装置与通信进程之间的接口,用于实现用户级 通信,每个虚功能均包含Q个QP,每个通信进程独占一个QP,并使用门铃机 制对QP的直接访问,向所述装置发起DMA操作请求。

所述的支持单根IO虚拟化用户级接口控制装置,包括:

所述门铃机制,门铃由DMA描述符的内存首地址和DMA描述符的长度组成; 通信进程将门铃写入通信接口QP用户控制页面中的门铃地址寄存器,收到门 铃写入动作后,从门铃携带的DMA地址中读取完整的DMA描述符,启动相应的 DMA操作。

所述的支持单根IO虚拟化用户级接口控制装置,所述操作队列映射模块 还包括:

设备配置空间子模块,用于物理功能PF配置空间和虚功能VF配置空间, 在虚功能VF基址寄存器对应的存储空间包含Q个通信接口QP所需的用户控制 页面和系统控制页面信息,所述Q≥1;

映射子模块,用于将收到的DMA门铃、虚功能VF和通信接口QP,写入到 操作队列中,该模块使用的仲裁算法,在满足上层软件对QoS需求的同时,还 要实现对M个操作队列的公平使用。

所述的支持单根IO虚拟化用户级接口控制装置,所述设备配置空间子模 块还包括:

所述虚功能VF基址寄存器对应的用户控制页面信息,将存储虚功能中通 信队列QP私有相关配置,其中,

门铃地址寄存器,只写,64位,通信进程通过将DMA描述符所在的内存 地址写入该寄存器,来启动一次DMA操作;

流控更新寄存器,只写,1位,通信进程每写一次该寄存器,表示增加S 个门铃,其中S是该用户级接口控制装置与上层驱动软件协定的、每次增加的 门铃数目,S的具体取值在虚功能VF基址寄存器对应的系统控制页面信息控 制页面中的流控粒度寄存器获得;

接收数据地址寄存器,可读可写,64位,通信进程在内存中开辟的接收 数据缓冲区首地址;

发送完成事件地址寄存器,可读可写,64位,通信进程在内存中开辟的 发送完成事件缓冲区首地址;

接收完成事件地址寄存器,可读可写,64位,通信进程在内存中开辟的 接收完成事件缓冲区首地址。

所述的支持单根IO虚拟化用户级接口控制装置,所述设备配置空间子模 块还包括:

所述虚功能VF基址寄存器对应的系统控制页面信息,将存储虚功能VF 中通信队列QP公有相关配置,其中,

接收完成事件缓冲区深度,32位,可读可写,配置接收完成事件缓冲区 深度;

发送完成事件缓冲区深度,32位,可读可写,配置发送完成事件缓冲区 深度;

流控粒度寄存器,32位,可读可写,配置每次更新的门铃数量;

VF优先级寄存器,32位,可读可写,配置当前虚功能DMA请求的优先级;

QP状态寄存器,Q位,只读,每个QP对应1位,用来表示对应QP的状态, 0为未初始化,1为已初始化。

所述的支持单根IO虚拟化用户级接口控制装置,所述映射子模块还包括:

根据VF优先级寄存器中记录的优先级进行仲裁,将获得仲裁的DMA请求 写入存储DMA请求数目最少的操作队列。

所述的支持单根IO虚拟化用户级接口控制装置,所述DMA模块还包括:

DMA引擎映射模块,用于根据DMA引擎的空闲情况,将M个操作队列中的 DMA门铃分配给P个DMA引擎,具有较高优先级的门铃将被优先分配,其中P 是DMA引擎模块中实现的DMA引擎的数目;

DMA引擎模块,用于将P个DMA引擎对DMA门铃进行并行处理,对数据进 行发送和接收。

所述的支持单根IO虚拟化用户级接口控制装置,所述DMA引擎模块还包 括:

DMA下传模块,用于数据发送过程,根据门铃机制读取DMA描述符,进而 根据DMA描述符的内容,读取需要传输的数据和控制信息,再将数据打包成网 络包发出,网络包发送完成后,再根据操作队列中存储的虚功能VF和通信接 口QP,在设备配置空间中读取对应通信接口QP的发送完成事件地址寄存器, 向发送完成事件缓冲区中写入发送完成事件;

DMA上传模块,用于数据接收过程,根据网络包携带的虚功能VF和通信 接口QP,在设备配置空间中读取对应通信接口QP的接收数据地址寄存器和接 收完成事件地址寄存器,将数据写入接收数据缓冲区中,待数据均写入缓冲区 后,再将接收完成事件写入接收完成事件缓冲区中。

本发明公开一种支持单根IO虚拟化用户级接口控制方法,包括:

步骤1,对支持单根IO虚拟化用户级接口控制装置与处理器之间数据进 行传输,实现符合PCI Express协议的事务层,数据链路层,和物理层功能;

步骤2,实现设备配置空间,以及虚功能VF的通信接口QP与操作队列OQ 资源之间的映射,使用门铃机制对QP进行直接访问,其包含M个操作队列, 所述M≥1;

步骤3,根据DMA引擎的空闲情况,对DMA引擎进行映射,所述DMA引擎 进行数据的发送与接收;

步骤4,接收DMA引擎发出的网络包,将不同的DMA引擎的网络包进行仲 裁选择发送,同时接收网络中的网络包,发送至DMA引擎进行处理。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤2还包括:

步骤21,对所述设备配置空间中的一个物理功能PF配置空间和N个虚功 能VF配置空间,实现虚功能VF的通信接口QP与操作队列OQ资源之间的映射;

步骤22,将M个操作队列缓存每个虚功能VF的通信接口QP的DMA门铃, 并且供DMA模块读取后分配给DMA引擎使用,每个操作队列由一个FIFO组成。

所述的支持单根IO虚拟化用户级接口控制方法,包括:

所述通信接口QP,为所述装置与通信进程之间的接口,用于实现用户级 通信,每个虚功能均包含Q个QP,每个通信进程独占一个QP,并使用门铃机 制对QP的直接访问,向所述装置发起DMA操作请求。

所述的支持单根IO虚拟化用户级接口控制方法,包括:

所述门铃机制,门铃由DMA描述符的内存首地址和DMA描述符的长度组成; 通信进程将门铃写入通信接口QP用户控制页面中的门铃地址寄存器,收到门 铃写入动作后,从门铃携带的DMA地址中读取完整的DMA描述符,启动相应的 DMA操作。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤21还包括:

步骤23,物理功能PF配置空间和虚功能VF配置空间,在虚功能VF基址 寄存器对应的存储空间包含Q个通信接口QP所需的用户控制页面和系统控制 页面信息,所述Q≥1;

步骤24,将收到的DMA门铃、虚功能VF和通信接口QP,写入到操作队列 中,该模块使用的仲裁算法,在满足上层软件对QoS需求的同时,还要实现对 M个操作队列的公平使用。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤23还包括:

所述虚功能VF基址寄存器对应的用户控制页面信息,将存储虚功能中通 信队列QP私有相关配置,其中,

门铃地址寄存器,只写,64位,通信进程通过将DMA描述符所在的内存 地址写入该寄存器,来启动一次DMA操作;

流控更新寄存器,只写,1位,通信进程每写一次该寄存器,表示增加S 个门铃,其中S是该用户级接口控制装置与上层驱动软件协定的、每次增加的 门铃数目,S的具体取值在虚功能VF基址寄存器对应的系统控制页面信息控 制页面中的流控粒度寄存器获得;

接收数据地址寄存器,可读可写,64位,通信进程在内存中开辟的接收 数据缓冲区首地址;

发送完成事件地址寄存器,可读可写,64位,通信进程在内存中开辟的 发送完成事件缓冲区首地址;

接收完成事件地址寄存器,可读可写,64位,通信进程在内存中开辟的 接收完成事件缓冲区首地址。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤23还包括:

所述虚功能VF基址寄存器对应的系统控制页面信息,将存储虚功能VF 中通信队列QP公有相关配置,其中,

接收完成事件缓冲区深度,32位,可读可写,配置接收完成事件缓冲区 深度;

发送完成事件缓冲区深度,32位,可读可写,配置发送完成事件缓冲区 深度;

流控粒度寄存器,32位,可读可写,配置每次更新的门铃数量;

VF优先级寄存器,32位,可读可写,配置当前虚功能DMA请求的优先级;

QP状态寄存器,Q位,只读,每个QP对应1位,用来表示对应QP的状态, 0为未初始化,1为已初始化。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤24还包括:

根据VF优先级寄存器中记录的优先级进行仲裁,将获得仲裁的DMA请求 写入存储DMA请求数目最少的操作队列。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤3还包括:

步骤31,根据DMA引擎的空闲情况,将M个操作队列中的DMA门铃分配 给P个DMA引擎,具有较高优先级的门铃将被优先分配,其中P是DMA引擎模 块中实现的DMA引擎的数目;

步骤32,将P个DMA引擎对DMA门铃进行并行处理,对数据进行发送和 接收。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤32还包括:

步骤33,数据发送过程,所述数据是指从主机内存读取并发往网络的数 据,根据门铃机制读取DMA描述符,进而根据DMA描述符的内容,读取需要传 输的数据和控制信息,再将数据打包成网络包发出,网络包发送完成后,再根 据操作队列中存储的虚功能VF和通信接口QP,在设备配置空间中读取对应通 信接口QP的发送完成事件地址寄存器,向发送完成事件缓冲区中写入发送完 成事件;

步骤34,数据接收过程,所述数据是指从网络中获取并写入主机内存的 数据,根据网络包携带的虚功能VF和通信接口QP,在设备配置空间中读取对 应通信接口QP的接收数据地址寄存器和接收完成事件地址寄存器,将数据写 入接收数据缓冲区中,待数据均写入缓冲区后,再将接收完成事件写入接收完 成事件缓冲区中。

本发明的有益效果为:

本发明提出的网络接口控制器,实现用户级通信接口和单根虚拟化技术的 融合,可为每个虚拟机提供高效的用户级通信接口,满足服务器系统中对高速 网络通信的需求。

本发明首先提出了一种高效的用户级通信接口设计,为通信效率提供保 障。然后在该接口的基础上,实现了基于硬件的单根虚拟化技术(SR-IOV:Sing  Root IO Virtualization),客户虚拟机可以直通方式(Pass-through IO)访 问设备,减少了虚拟控制器层(Hypervisor)的转发,使得每个客户操作系统 (Guest OS)都能直接使用其独占的用户级通信接口,充分发挥了用户级通信 接口的性能。

附图说明

图1为本发明的设备结构图;

图2为本发明操作队列映射模块结构;

图3为本发明门铃结构;

图4为本发明设备配置空间子模块;

图5为本发明用户控制页面结构;

图6为本发明系统控制页面结构;

图7为本发明初始化流程图;

图8为本发明发送流程图;

图9为本发明接收流程图;

图10为本发明支持单根IO虚拟化用户级接口控制方法流程图。

具体实施方式

下面给出本发明的具体实施方式,结合附图对本发明做出了详细描述。

本发明提供了一种支持单根IO虚拟化(SR-IOV:Single Root IO  Virtualization),且提供用户级通信接口的网络接口控制器,并给出其使用 方法。本发明的网络接口控制器在实现被多个虚拟机直接访问的同时,还为虚 拟机上运行的应用程序提供灵活高效的用户级通信接口;若干虚拟机对网络进 行共享访问时,本发明的网络接口控制器可以满足虚拟机对网络访问的服务质 量(QoS)要求。

为了达到客户虚拟机对于设备的直通方式(Pass-through IO)访问, 在设备物理功能PF(Physical Function)的基础上,实现了多个虚功能VF (Virtual Function),每个虚功能都包含必要的硬件资源,以支持虚拟机对 设备的直接访问和使用。实现网络接口控制器虚功能VF与用户级通信接口间 的灵活映射,是本发明的核心内容之一。本发明中涉及的物理功能PF和虚功 能VF功能均符合PCI-SIG(PCI特别兴趣组织)的SR-IOV标准。

所述设备由以下几个模块组成:PCIe系统总线接口模块,操作模块,DMA 模块,网络包分发仲裁模块。如图1所示。

所述系统总线接口模块,负责网络接口控制器与处理器间的数据传输,除 不包含设备配置空间(Configuration Space)外,完整实现了符合PCI Express 协议的事务层(Transaction Layer),数据链路层(Data link Layer),和 物理层(Physical Layer)。

操作模块,用于实现设备配置空间,以及虚功能VF的通信接口QP与操作 队列OQ资源之间的映射,使用门铃机制对QP进行直接访问,其包含M个操作 队列,所述M≥1;

DMA模块,用于根据DMA引擎的空闲情况,对DMA引擎进行映射,所述DMA 引擎进行数据的发送与接收;

所述操作队列映射模块,实现设备配置空间,包括1个物理功能PF配置 空间和N个虚功能配置空间;实现虚功能中的通信接口(QP:Queue Pair)与 网络接口控制器中操作队列(OQ:Operation Queue)资源之间的映射。其结 构如图2所示,由设备配置空间子模块和映射子模块组成。

所述操作队列映射模块中的通信接口QP,是网络接口控制器与通信进程 间的接口,用于实现用户级通信。每个虚功能均包含Q(Q为通信接口QP的总 数目)个QP,每个通信进程独占一个QP,并使用门铃机制对QP的直接访问, 向网络接口控制器发起DMA操作请求(无需操作系统参与)。

所述门铃机制,如图3所示,门铃由DMA(直接内存访问:Direct Memory  Access)描述符的内存首地址和DMA描述符的长度组成;通信进程将门铃写入 QP用户控制页面中的门铃地址寄存器,本发明的网络接口控制器收到门铃写 入动作后,即从门铃携带的内存地址中读取完整的DMA描述符,启动相应的 DMA操作。

所述操作队列映射模块中的设备配置空间子模块,包括1个PCIe  Endpoint(PCIe端点设备)物理功能PF配置空间和N个虚功能的配置空间。设 备配置空间子模块结构如图4所示,物理功能配置空间和虚功能配置空间结构 均符合标准PCI-Express协议。在虚功能VF基址寄存器(BAR:Basic Address  Register)的功能定义上:BAR 0对应的存储空间包含Q个QP所需的用户控制 页面信息;BAR 1对应的存储空间包含Q个QP所需的系统控制页面信息。

所述虚功能VF BAR 0对应的用户控制页面结构如图5所示,用于存储虚 功能中QP私有的配置信息,包括:

1、门铃地址寄存器:只写,64位,通信进程通过将DMA描述符所在的内 存地址写入该寄存器,来启动一次DMA操作;

2、流控更新寄存器:只写,1位,通信进程每写一次该寄存器,表示增 加S个“门铃”,S在BAR 1系统控制页面中的流控粒度寄存器获得;

3、接收数据地址寄存器:可读可写,64位,通信进程在内存中开辟的接 收数据缓冲区首地址;

4、发送完成事件地址寄存器:可读可写,64位,通信进程在内存中开辟 的发送完成事件缓冲区首地址;

5、接收完成事件地址寄存器:可读可写,64位,通信进程在内存中开辟 的接收完成事件缓冲区首地址。

所述虚功能VF BAR 1对应的系统控制页面结构如图6所示,用于存储虚 功能中所有QP公用的配置信息,包括:

1、接收完成事件缓冲区深度:32位,可读可写,配置接收完成事件缓冲 区深度;

2、发送完成事件缓冲区深度:32位,可读可写,配置发送完成事件缓冲 区深度;

3、流控粒度寄存器:32位,可读可写,配置每次更新的“门铃”数量;

4、VF优先级寄存器:32位,可读可写,配置当前虚功能DMA请求的优先 级;

5、QP状态寄存器:Q位,只读,每个QP对应1位,用来表示对应QP的 状态,0为未初始化,1为已初始化。

所述操作队列映射模块中的映射子模块,将收到的DMA门铃机制、VF号 和QP号,写入到合适的操作队列中。映射子模块使用的仲裁算法,在满足上 层软件对QoS需求的同时,还要实现对M个操作队列的公平使用,因此映射子 模块根据VF优先级寄存器中记录的优先级进行仲裁,将获得仲裁的DMA请求 写入存储DMA请求数目最少的操作队列。

所述操作队列模块,共包含M个操作队列,操作队列缓存来自各个虚功能 QP的DMA门铃,并供DMA引擎映射模块读取后分配给DMA引擎使用,每个操 作队列由一个FIFO组成。

所述DMA引擎映射模块,根据DMA引擎的空闲情况,将M个操作队列中的 DMA门铃分配给P个DMA引擎,具有较高优先级的门铃将被优先分配。

所述DMA引擎模块,共包含P个DMA引擎,P个DMA引擎对DMA门铃进行 并行处理。每个DMA引擎由DMA下传模块和DMA上传模块组成,本发明不限定 DMA引擎的实现类型(如Scatter-Gather DMA)。

所述DMA下传模块,负责数据发送过程,DMA下传模块根据门铃机制读取 DMA描述符,进而根据DMA描述符的内容,读取需要传输的数据和控制信息, 再将数据打包成网络包发出,网络包发送完成后,再根据操作队列中存储的 VF号和QP号,在设备配置空间中读取对应QP的发送完成事件地址寄存器, 向发送完成事件缓冲区中写入发送完成事件。

所述DMA上传模块,负责数据接收过程,DMA上传模块根据网络包携带的 VF号和QP号,在设备配置空间中读取对应QP的接收数据地址寄存器和接收 完成事件地址寄存器,将数据写入接收数据缓冲区中,待数据均写入缓冲区后, 再将接收完成事件写入接收完成事件缓冲区中。

所述网络包分发仲裁模块,负责接收DMA引擎发出的网络包,将来自不 同DMA引擎的网络包进行仲裁选择发送,同时也负责接收网络上的网络包,发 送至合适的DMA引擎进行处理。

本发明的实施过程将分解为初始化流程、发送流程和接收流程进行阐述。

初始化流程如图7所示,包括进行数据传输之前,由BIOS和驱动配置网 络接口控制器、以及由通信进程初始化QP的过程,具体过程是:

S701.系统的BIOS启动标准PCIe设备搜索过程,获取本发明的网络接口 控制器相关信息;

S702.虚拟机控制器层(Hypervisor)的系统域Domain 0启动对网络接 口控制器物理功能PF和虚拟功能VF的配置;

S703.Hypervisor的Domain 0将一系列虚功能VF分配给各个虚拟机 (Guest OS);

S704.随着对虚功能的配置过程,南北桥芯片的IO内存管理单元(IOMMU: Input/output Memory Management Unit)建立宿主机物理地址与虚拟机物理 地址的映射表;

S705.基于步骤4建立的地址映射表,Guest OS对QP系统控制页面进行 初始化,具体设计对QP系统控制页面中可写寄存器的配置;

S706.用户进程建立,申请使用QP进行通信;

S707.通过步骤4建立的IOMMU地址映射表,将用户进程发出的虚拟机物 理地址转换为宿主机物理地址,对QP用户控制页面进行初始化,具体涉及对 QP用户控制页面中可写寄存器的配置。

步骤8.整个初始化流程结束,可以接收DMA请求。

发送流程如图8所示,具体过程是:

S801.通信进程生成DMA描述符;

S802.通信进程根据DMA描述符所在虚拟机物理地址和DMA描述符长度, 构造门铃,并写入对应QP用户控制页面的门铃地址寄存器。在此步骤中,通 信进程发出的门铃地址寄存器是虚拟机(Guest OS)物理地址,因此需要IOMMU 将其转换为宿主机物理地址;

S803.网络接口控制器将收到的门铃,以及虚功能VF号和QP号,写入合 适的操作队列中缓存;

S804.网络接口控制器将门铃、虚功能VF号和QP号从操作队列中取出, 并提交给合适的DMA引擎处理;

S805.DMA下传模块根据门铃的内容,从内存中读取DMA描述符。在此步 骤中,由于门铃中携带的是虚拟机物理地址,因此在从内存中读取DMA描述符 的过程中,需要IOMMU将虚拟机物理地址转换为宿主机物理地址;

S806.DMA下传模块根据DMA描述符中的内容,从内存中读取要发送的数 据和相关控制信息。在此步骤中,由于DMA描述符中携带的是虚拟机物理地址, 因此在从内存中读取数据和控制信息的过程中,需要IOMMU将虚拟机物理地址 转换为宿主机物理地址;

S807.DMA下载模块将要发送的数据,连同控制信息(如目的VF号和QP 号),构造成网络包和发送完成事件;

S808.将网络包发送至网络;

S809.根据虚功能VF号和QP号,读取发送完成事件地址寄存器,将发送 完成事件写入对应的内存地址中,此步骤不涉及虚拟机物理地址和宿主机物理 地址间的转换。

接收流程如图9所示,具体过程是:

S901.接收到网络包;

S902.将网络包分发至合适的DMA引擎处理;

S903.DMA上传模块从网络包中解析出目的VF号和QP号;

S904.DMA上传模块根据目的VF号和QP号,从设备配置空间模块中读取 接收数据地址寄存器和接收完成事件地址寄存器的值;

S905.DMA上传模块将网络包中的数据上传至接收数据缓冲区;

S906.DMA上传模块在数据上传完成后,构造接收完成事件,并将其上传 至接收完成事件缓冲区,接收流程结束。

如图10所示,本发明公开一种支持单根IO虚拟化用户级接口控制方法, 包括:

步骤1,对支持单根IO虚拟化用户级接口控制装置与处理器之间数据进 行传输,实现符合PCI Express协议的事务层,数据链路层,和物理层功能;

步骤2,实现设备配置空间,以及虚功能VF的通信接口QP与操作队列OQ 资源之间的映射,使用门铃机制对QP进行直接访问,其包含M个操作队列, 所述M≥1;

步骤3,根据DMA引擎的空闲情况,对DMA引擎进行映射,所述DMA引擎 进行数据的发送与接收;

步骤4,接收DMA引擎发出的网络包,将不同的DMA引擎的网络包进行仲 裁选择发送,同时接收网络中的网络包,发送至DMA引擎进行处理。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤2还包括:

步骤21,对所述设备配置空间中的一个物理功能PF配置空间和N个虚功 能VF配置空间,实现虚功能VF的通信接口QP与操作队列OQ资源之间的映射;

步骤22,将M个操作队列缓存每个虚功能VF的通信接口QP的DMA门铃, 并且供DMA模块读取后分配给DMA引擎使用,每个操作队列由一个FIFO组成。

所述的支持单根IO虚拟化用户级接口控制方法,包括:

所述通信接口QP,为所述装置与通信进程之间的接口,用于实现用户级 通信,每个虚功能均包含Q个QP,每个通信进程独占一个QP,并使用门铃机 制对QP的直接访问,向所述装置发起DMA操作请求。

所述的支持单根IO虚拟化用户级接口控制方法,包括:

所述门铃机制,门铃由DMA描述符的内存首地址和DMA描述符的长度组成; 通信进程将门铃写入通信接口QP用户控制页面中的门铃地址寄存器,收到门 铃写入动作后,从门铃携带的DMA地址中读取完整的DMA描述符,启动相应的 DMA操作。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤21还包括:

步骤23,物理功能PF配置空间和虚功能VF配置空间,在虚功能VF基址 寄存器对应的存储空间包含Q个通信接口QP所需的用户控制页面和系统控制 页面信息,所述Q≥1;

步骤24,将收到的DMA门铃、虚功能VF和通信接口QP,写入到操作队列 中,该模块使用的仲裁算法,在满足上层软件对QoS需求的同时,还要实现对 M个操作队列的公平使用。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤23还包括:

所述虚功能VF基址寄存器对应的用户控制页面信息,将存储虚功能中通 信队列QP私有相关配置,其中,

门铃地址寄存器,只写,64位,通信进程通过将DMA描述符所在的内存 地址写入该寄存器,来启动一次DMA操作;

流控更新寄存器,只写,1位,通信进程每写一次该寄存器,表示增加S 个门铃,其中S是该用户级接口控制装置与上层驱动软件协定的、每次增加的 门铃数目,S的具体取值在虚功能VF基址寄存器对应的系统控制页面信息控 制页面中的流控粒度寄存器获得;

接收数据地址寄存器,可读可写,64位,通信进程在内存中开辟的接收 数据缓冲区首地址;

发送完成事件地址寄存器,可读可写,64位,通信进程在内存中开辟的 发送完成事件缓冲区首地址;

接收完成事件地址寄存器,可读可写,64位,通信进程在内存中开辟的 接收完成事件缓冲区首地址。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤23还包括:

所述虚功能VF基址寄存器对应的系统控制页面信息,将存储虚功能VF 中通信队列QP公有相关配置,其中,

接收完成事件缓冲区深度,32位,可读可写,配置接收完成事件缓冲区 深度;

发送完成事件缓冲区深度,32位,可读可写,配置发送完成事件缓冲区 深度;

流控粒度寄存器,32位,可读可写,配置每次更新的门铃数量;

VF优先级寄存器,32位,可读可写,配置当前虚功能DMA请求的优先级;

QP状态寄存器,Q位,只读,每个QP对应1位,用来表示对应QP的状态, 0为未初始化,1为已初始化。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤24还包括:

根据VF优先级寄存器中记录的优先级进行仲裁,将获得仲裁的DMA请求 写入存储DMA请求数目最少的操作队列。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤3还包括:

步骤31,根据DMA引擎的空闲情况,将M个操作队列中的DMA门铃分配 给P个DMA引擎,具有较高优先级的门铃将被优先分配,其中P是DMA引擎模 块中实现的DMA引擎的数目;

步骤32,将P个DMA引擎对DMA门铃进行并行处理,对数据进行发送和 接收。

所述的支持单根IO虚拟化用户级接口控制方法,所述步骤32还包括:

步骤33,数据发送过程,所述数据是指从主机内存读取并发往网络的数 据,根据门铃机制读取DMA描述符,进而根据DMA描述符的内容,读取需要传 输的数据和控制信息,再将数据打包成网络包发出,网络包发送完成后,再根 据操作队列中存储的虚功能VF和通信接口QP,在设备配置空间中读取对应通 信接口QP的发送完成事件地址寄存器,向发送完成事件缓冲区中写入发送完 成事件;

步骤34,数据接收过程,所述数据是指从网络中获取并写入主机内存的 数据,根据网络包携带的虚功能VF和通信接口QP,在设备配置空间中读取对 应通信接口QP的接收数据地址寄存器和接收完成事件地址寄存器,将数据写 入接收数据缓冲区中,待数据均写入缓冲区后,再将接收完成事件写入接收完 成事件缓冲区中。

本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条 件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于 以上的说明,而是由权利要求书的范围来确定的。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号