CN103034524A - 半虚拟化的虚拟gpu - Google Patents
半虚拟化的虚拟gpu Download PDFInfo
- Publication number
- CN103034524A CN103034524A CN2012103830467A CN201210383046A CN103034524A CN 103034524 A CN103034524 A CN 103034524A CN 2012103830467 A CN2012103830467 A CN 2012103830467A CN 201210383046 A CN201210383046 A CN 201210383046A CN 103034524 A CN103034524 A CN 103034524A
- Authority
- CN
- China
- Prior art keywords
- virtual machine
- gpu
- driver
- client
- passage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/4555—Para-virtualisation, i.e. guest operating system has to be modified
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
Abstract
本发明的一个实施例提出一种计算机系统,包括初级处理单元,耦合到初级处理单元并且经由多个通道可访问的二级处理单元,在初级处理单元上执行的多个客户虚拟机,其中每个客户虚拟机包括与二级处理单元相关联的驱动程序,以及特权虚拟机,其在初级处理单元上执行并配置为将包括在多个通道中的不同通道组分配给包括在多个客户虚拟机中的每个驱动程序,其中分配给包括在第一客户虚拟机中的第一驱动程序的第一通道组使第一驱动程序能够访问二级处理单元并且通过直接访问二级处理单元通道而不与包括在多个客户虚拟机中的任意其他驱动程序相冲突且具有最小的性能开销。
Description
技术领域
本发明总地涉及虚拟化计算机架构,并且,更具体地,涉及一种半虚拟化的虚拟GPU。
背景技术
计算机虚拟化是一种涉及将物理计算机器平台封装到在硬件计算平台或者“主机”上在虚拟化软件的控制下执行的虚拟机中的技术。虚拟机既具有虚拟系统硬件又具有客户操作系统软件。在典型的虚拟化系统中,系统中所包括的任何物理硬件资源经由仿真模块呈现给虚拟机。仿真模块允许设计用于单个用途的设备功能性扩至允许多个用途的模型。例如,为了虚拟机与硬件输入设备交互,诸如鼠标,需要提供呈现鼠标操作的软件仿真模块。虚拟机然后经由软件仿真模块与鼠标交互。
对于使用通用接口和低性能需要的简单设备,诸如鼠标或者键盘,软件仿真模块是有效的。然而,在虚拟化系统中经由软件仿真模型访问具有更综合接口和更高性能需要的更复杂的设备,诸如图形处理单元(GPU),产生两个主要的问题。第一,因为GPU是高度繁复的处理单元,提供综合的而且呈现GPU所提供的大范围的功能性的软件仿真模块是非常困难的任务。因此,当前缺乏试图呈现GPU的所有功能性的软件仿真模块,以致就算真的存在,消耗GPU的、运行在虚拟机中的应用也运行不佳。第二,因为GPU接口更复杂并且性能严格,提取的低效率经常生成瓶颈和低效率。
一个用于上面描述的低效率的解决方案是为执行在主机上的每个虚拟机提供独立的GPU。但是,这样的解决方案实现起来非常昂贵并且不可扩展。因此,这样的解决方案不能在各种需要从虚拟机访问GPU的用户中有效地实现。
因此,本领域中需要一种用于在多个顾客或者虚拟机中有效地共享单个GPU而没有必要扩展硬件的系统和方法。
发明内容
本发明的一个实施例提出一种计算机系统,包括初级处理单元,耦合到初级处理单元并且经由多个可指派接口可访问的二级处理单元,在初级处理单元上执行的多个客户虚拟机,其中每个客户虚拟机包括与二级处理单元相关联的驱动程序,以及特权虚拟机,其在初级处理单元上执行并配置为将包括在多个可指派接口中的不同可指派接口组分配给包括在多个客户虚拟机中的每个驱动程序,其中分配给包括在第一客户虚拟机中的第一驱动程序的第一可指派接口组使第一驱动程序能够访问二级处理单元而不与包括在多个客户虚拟机中的任意其他驱动程序相冲突。
这里所描述的技术的一个优点是在客户虚拟机中执行的客户GPU驱动程序能经由所分配的一组接口直接利用GPU的处理能力的至少一部分。因为对于建立和控制对客户虚拟机的访问,虚拟化层执行最小干预,所以这样的直接访问提升了多客户虚拟机竞争访问GPU的系统的性能。
附图说明
因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对上面所简要概括的本发明的更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅用于示意本发明的典型实施例,由于本发明可以具有其他等效的实施例,因此附图不应被认为是对本发明范围的限制。
图1是示意出配置为实现本发明的一个或多个方面的计算机系统的框图;
图2是示意出根据本发明的一个实施例的在图1中的计算机系统中执行的虚拟化计算环境的框图;
图3是根据本发明的一个实施例的图2的特权VM和客户VM的更详细的视图;
图4是根据本发明的一个实施例的图2的特权VM和客户VM与图1的GPU之间的交互的概念上的示意图;以及
图5A和图5B是根据本发明的一个实施例的用于使客户VM能够以半虚拟化的方式访问GPU的方法步骤的流程图。
具体实施方式
在下面的描述中,将阐述大量的细节以提供对本发明更为彻底的理解。然而,对于本领域技术人员来说显而易见地是,缺少这些具体细节的一个或多个也可以实践本发明。在其他实例中,没有描述公知的特征,以免对本发明造成混淆。
图1是示意出配置为实现本发明一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理器(CPU)102以及经由互连路径进行通信的系统存储器104,该互连路径可包括存储器桥105。存储器桥105例如可以是北桥芯片,其经由总线或者其它的通信路径106(例如超传输链路)与I/O(输入/输出)桥107相连。I/O桥107例如可以是南桥芯片,其从一个或多个用户输入设备108(例如,键盘,鼠标)接收用户输入,并且将该输入经由路径106和存储器桥105转发给CPU 102。GPU 112经由总线或者其它的通信路径113(例如,PCI Express,加速图形端口,或者超传输链路)耦合至存储器桥105;在一个实施例中,GPU 112为图形子系统,其向显示设备110(例如,常规的基于CRT或者LCD的监视器)递送像素。系统磁盘114也连接到I/O桥107。开关116提供了I/O桥107与诸如网络适配器118和不同的插卡(add-in card)120和121的其他组件之间的连接。其它组件(未明确的示出),包括USB或者其它端口连接、CD驱动器、DVD驱动器、胶片录制设备等等,其也可以连接到I/O桥107。图1中将各组件互连的通信路径可以使用任何适宜的协议来实现,诸如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或者任何其它总线或者点对点通信协议,并且如本领域中公知的,不同设备之间的连接可使用不同协议。
在一个实施例中,GPU 112包含被优化用于图形和视频处理的电路,例如包括视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,GPU 112包含被优化用于通用目的处理的电路,同时保留底层(underlying)的计算架构,本文将进行更为详细的描述。在另一个实施例中,GPU 112可以与一个或多个其他系统元件集成,诸如存储器桥105、CPU 102以及I/O桥107,以形成片上系统(SoC)。
应该理解,本文所示系统是示例性的,可以对其进行变形和修改。可根据需要修改连接拓扑,包括桥的数目和布置、CPU 102的数目以及GPU112的数目。例如,在一些实施例中,系统存储器104直接连接到CPU 102而不是通过桥,其他设备经由存储器桥105以及CPU 102与系统存储器104通信。在其他替代拓扑中,GPU 112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。在又一些实施例中,I/O桥107和存储器桥105可被集成到单个芯片中。大量的实施例可包括两个或更多个CPU102以及两个或更多个GPU 112。本文所示的特定组件是可选的;例如,可以支持任意数目的插卡或外围设备。在一些实施例中,开关116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。
在一个实施例中,GPU 112包括一个或多个并行处理单元(PPU)(未示出),其中每个均耦合至本地并行处理(PP)存储器(也未示出)。通常,GPU包括U个PPU,其中U≥1。PPU和并行处理存储器可使用一个或多个集成电路设备来实现,该集成电路设备诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或以任何其他技术上可行的方式来实现。在一些实施例中,GPU 112中的一些或所有PPU是具有渲染管线的图形处理器,其可以配置为执行与下述各项相关的各种任务:由CPU 102和/或系统存储器104经由存储器桥105和总线113所提供的图形数据生成像素数据、与本地并行处理存储器(可被用作图形存储器,包括例如常用的帧缓冲区)交互以存储和更新像素数据、递送像素数据到显示设备110等等。在一些实施例中,GPU 112可包括一个或多个作为图形处理器操作的PPU,以及一个或多个用作通用计算的其他PPU。PPU可以是相同的或不同的,并且每个PPU均可有自己的专用并行处理存储器设备或非专用并行处理存储器设备。一个或多个PPU可输出数据到显示设备110,或每个PPU均可输出数据到一个或多个显示设备110。
在操作中,CPU 102是计算机系统100的主处理器,控制和协调其他系统组件的操作。具体地,CPU 102发出控制GPU 112的操作的命令。在一些实施例中,CPU 102将用于GPU 112的命令流写入到命令缓冲区中,该命令缓冲区可位于系统存储器104、并行处理存储器204、或可由CPU102和GPU 112访问的其他存储位置处。GPU 202从命令缓冲区读取命令流,然后相对于CPU 102的操作异步地执行命令。
图2是示意出根据本发明的一个实施例的、在图1的计算机系统100中执行的虚拟化计算环境的框图。如所示,系统存储器104包括特权虚拟机(VM)202,一组客户虚拟机204和虚拟化层206。
虚拟化层206包括管理程序208、硬件虚拟化模块210和输入/输出存储器管理单元(IOMMU)212。管理程序208是系统级软件模块,其允许多个客户VM 204在计算机系统100中同时运行。管理程序208在硬件虚拟化模块210和IOMMU 212之上执行。硬件虚拟化模块210配置为支持计算机系统100内的诸如CPU 102的硬件资源的共享。IOMMU 212是存储器管理单元,其连接DMA-capable I/O总线至系统存储器104,并配置为将设备可见的虚拟地址映射到物理地址。在操作中,管理程序208通过消耗由硬件虚拟化模块210和IOMMU 212所提供的服务,来为每个客户VM204仿真单独的物理地址空间,并且配置为将虚拟机页面锁定(“固定(pin)”)至诸如系统存储器104的物理存储器,以支持I/O设备和虚拟机页面之间的直接存储器访问(DMA)。
在一个实施例中,包括在虚拟化层206中的IOMMU 212不是本发明所必需的组件。
特权VM 202提供I/O仿真软件和允许客户VM 204经由管理程序208访问计算机系统100中的硬件资源的资源管理器。以下论述更详细地描述了特权VM 202在为客户VM 204提供对GPU 112和显示设备110的访问中的操作。在以下论述中,“主操作系统”是用于特权VM 202的操作系统,而“客户操作系统”是用于客户VM 204的操作系统。操作系统的类型可随客户VM 204和特权VM 202变化。客户操作系统的示例包括任意公知的商品操作系统,诸如Microsoft Windows、Linux等等。
图3是根据本发明一个实施例的、图2的特权VM 202和客户VM 204的更详细的视图。如图所示,特权VM 202包括硬件仿真软件302、插入到硬件仿真软件302中的GPU仿真模块304和主资源管理器(RM)306,其中GPU仿真模块304包括显示仿真模块305。仍如所示,客户VM 204包括应用308、客户GPU驱动程序310和代理RM 312。
应用308为软件模块,当其执行时发送将由GPU 112处理的一个或多个指令。应用308消耗由客户GPU驱动程序310所呈现的诸如应用程序接口(API)311的一个或多个API来控制GPU 112的操作。客户GPU驱动程序310是与没有意识到应用308或客户GPU驱动程序310正在虚拟机中而非直接在CPU 102的执行环境中执行的GPU 112相关联的驱动程序。
在操作中,当应用308首先发送初始化指令至要求访问GPU 112的不同组件或处理能力的客户GPU驱动程序310时,客户GPU驱动程序310发送请求至客户GPU驱动程序310假设是在CPU 102上执行的操作系统,用于建立对GPU 112的访问。由客户GPU驱动程序310所发送的请求由GPU仿真模块304捕获。
代理资源管理器312提供客户GPU驱动程序310和特权VM 202之间的通信通道。重要的是,代理资源管理器312意识到应用308、客户GPU驱动程序310和代理资源管理器正在虚拟机中执行。因此,代理资源管理器312将要求访问计算机系统100中的硬件资源的初始化命令路由至特权VM 202用于操控。在一个实施例中,代理资源管理器312经由远程过程调用(RPC)在特权VM 202中通信。在虚拟硬件接口和共享存储器上实现RPC通信路径,因此允许RPC路径独立于包括在虚拟化层206中的管理程序208的类型。
在操作中,用于建立对GPU 112的访问的请求由代理资源管理器312路由至GPU仿真模块304,然后该GPU仿真模块304将请求发送至包括在特权VM 202中的主资源管理器306。主资源管理器306是软件模块,其对包括在计算机系统100中的硬件资源与不同的客户VM 304之间的访问和交互进行管理。更具体地,主资源管理器306从客户VM 204接收针对诸如输入设备108、GPU 112等的硬件资源的访问请求,并且确定用于为客户VM提供对这些硬件资源的访问的机制。
一旦接收到用于建立对GPU 112进行访问的请求,主资源管理器306分配与GPU 112相关联的通道给客户VM 204。通道为硬件构造,其允许诸如应用308的应用当发送用于在GPU 112中执行的命令时直接访问GPU112。每个通道对应于不同组通道控制寄存器,其可编程为填充对应的通道。GPU 112与预先确定数目的指派接口(本文称之为“通道”)相关联,并且主资源管理器306将预先配置数目的这些通道分配给客户VM 204。在一个实施例中,分配给客户VM 204的数目和具体通道由主资源管理器306随机确定。
一旦通道由主资源管理器306分配给客户VM 204,便通知包括在硬件仿真软件302中的GPU仿真模块304。GPU仿真模块304是GPU 112的半虚拟化模型,其仿真GPU 112的诸如某些配置信息寄存器的部分,并且为客户VM 204提供对GPU 112的其他部分的直接访问。一旦特权VM202完成客户VM 204经由GPU仿真模块304对GPU 112的仿真部分的访问以及客户VM 204对GPU 112的诸如通道的可直接访问的部分的直接访问的建立,则进行上述访问。在一个实施例中,GPU仿真模块304经由插件API耦合至硬件仿真软件302,并且因此独立于管理程序308的类型。
当GPU仿真模块304被通知已经分配通道给客户VM 204,GPU仿真模块304将对应于所分配通道的一组控制寄存器316映射至客户VM 204可访问的存储空间。GPU仿真模块304为不同的客户VM 204提供地址空间隔离,使得所映射的存储空间对于每个客户VM 204是单独的。因此客户VM 204不能访问经映射用于不同客户VM 204的存储空间,从而不会造成分配给不同客户VM 204的通道上的冲突。为达到这样的隔离,GPU仿真模块304利用虚拟化层206来锁定VM地址,并将经锁定的物理地址转译为系统存储器104中的物理地址。然后,将经转译的地址映射到与GPU112相关联的地址空间。
一旦与所分配的通道相对应的一组控制寄存器316被映射,则通知代理资源管理器312通道已经分配给客户GPU驱动程序310,该代理资源管理器312发送通知给客户GPU驱动程序310来指示通道已经被分配。然后客户GPU驱动程序310将经映射的存储空间映射到应用308。
如上所述,一旦建立对GPU 112的访问,根据应用308的命令,客户GPU驱动程序310可通过操纵与所分配的通道相关联的一组控制寄存器316来直接访问GPU 112。更具体地,客户GPU驱动程序310采用将发送至GPU 112的命令来填充存储器区域(本文称之为“命令缓冲区”)。然后,客户GPU驱动程序310对被映射到客户VM 204可访问的存储空间中的一组控制寄存器316进行编程,来指示所填充的命令缓冲区的起始存储器地址和终止存储器地址。一旦终止存储器地址被编程到一组控制寄存器中,则GPU 112自动地开始获取包括在命令缓冲区中的命令用于执行。重要的是,在该阶段没有执行捕获或仿真操作。
回顾GPU仿真模块304,其如上所述对GPU 112的部分进行仿真,诸如配置寄存器、快速外围组件互连(PCIe)总线寄存器、事件/中断。客户VM 204,更具体地客户GPU驱动程序310,经由GPU仿真模块304来访问这些经仿真的资源,而不直接访问GPU 112。对于由GPU 112发起的诸如通道故障和完成通知的事件,客户GPU驱动程序310将客户GPU驱动程序310想要注册的事件指示给GPU仿真模块304。每次GPU 112发起事件,GPU仿真模块304确定客户VM 204是否已经针对该具体事件注册。如果如此,GPU仿真模块304将通知转发给包括在客户VM 204中的客户GPU驱动程序310,指示该事件发起。此外,GPU仿真模块304接收由与具体通道相关联的GPU命令处理所造成的故障事件。然后,GPU仿真模块304确定为其分配通道的客户VM 204,并将故障事件转发给该客户VM204。
此外,当地址被重新映射或损坏时,GPU仿真模块304跟踪GPU虚拟地址的状态。当对于固定客户页面的所有GPU参考已经被重写或损坏,客户页面是非固定的。另外,GPU仿真模块304包括用于保留计算机系统100中的资源给给定的客户VM 204的规定,使得避免意外分配失败。最后,GPU仿真模块304通过当暂停时对至系统存储器104或诸如系统磁盘114的外部存储设备的GPU通道和GPU虚拟地址映射的状态进行保存,以及通过当重新开始时恢复该状态,来支持暂停和重新开始可能在不同物理系统或在不同GPU上的客户VM 204。在暂停虚拟机之后,GPU仿真模块304释放诸如所分配的通道的GPU资源,并解除对任意固定虚拟机页面的固定。重新开始时,GPU仿真模块304固定并且转译所有经映射的虚拟机地址,并且重新创建GPU虚拟映射。
当生成用于显示的图形帧时,客户VM 204生成图形帧,同时假设整个显示设备110被分配给该客户VM 204。因此,由包括在客户VM 204中的显示驱动程序(未示出)所发送的显示命令被显示仿真模块305所捕获。使用GPU 112来转译经捕获的显示命令,以根据针对客户VM 204的显示设备110的实际分配来对显示帧的合成、缩放和其他处理进行模拟。
此外,主资源管理器306还对诸如存储器的资源进行跨多个客户VM204的划分。针对单个客户VM 204静态地或动态地划分、指派和保护资源,并且随后给该资源以(经由存储器地址)回到客户VM 204的直接访问以使用。与通道非常类似的,然后,这样的资源可用于由客户GPU驱动程序310直接保护地访问。
图4是根据本发明一个实施例的图2的特权VM 202和客户VM 204与图1的GPU之间的交互的概念示意图。
为访问仿真资源,诸如GPU配置寄存器,客户GPU驱动程序310,在交互402处,发送请求到GPU仿真模块304。GPU仿真模块304当接收到请求时或预先与GPU 112通信,以检索与仿真资源相关联的有关数据。响应于该请求,GPU仿真模块304将有关数据发送到客户GPU驱动程序310。
为建立对GPU的访问用于执行命令,客户GPU驱动程序310,在交互404处,发送访问请求到代理资源管理器312。代理资源管理器312,在交互406处,将请求转发到主资源管理器306。主资源管理器306,在操作408处,将与GPU 112相关联的至少一个GPU通道分配给客户GPU驱动程序310。分配可以动态进行或可以静态预定。主资源管理器306通知GPU仿真模块304该通道分配。随后,GPU仿真模块304,在操作410处,将与所分配通道相关联的一组通道控制寄存器映射到可由包括客户GPU驱动程序310的客户VM 204访问的存储空间。客户GPU驱动程序310随后以上述方式在操作412处经由一组通道控制寄存器直接访问GPU 112。
为注册由GPU 112发起的事件,将由客户GPU驱动程序310发送的针对事件注册的请求路由到GPU仿真模块304。GPU仿真模块304保持跟踪客户GPU驱动程序310已经注册的任意事件。当GPU仿真模块304从GPU 112接收到客户GPU驱动程序310已经注册的事件通知时,GPU仿真模块304将事件通知转发到客户GPU驱动程序310。
图5是根据本发明一个实施例的,用于使客户VM能够以半虚拟化的方式访问GPU的方法步骤的流程图。尽管该方法步骤结合图1-3描述,但是本领域的技术人员应该理解配置为以任意顺序执行该方法步骤的任意系统均落入本发明的范围内。
方法500始于步骤502,其中代理资源管理器312从客户GPU驱动程序310接收访问与GPU 112相关联的仿真寄存器的请求。在步骤504,代理资源管理器308经由主资源管理器306将请求发送到GPU仿真模块304。在步骤506,GPU仿真模块304经由主资源管理器306和代理资源管理器312将与仿真寄存器相关联的数据发送到客户GPU驱动程序310。
在步骤508,代理资源管理器312从客户GPU驱动程序310接收用于建立对GPU 112的访问用于执行命令的请求。在步骤510,代理资源管理器312经由远程过程调用将请求转发到主资源管理器306。主资源管理器306,在步骤512,将与GPU 112相关联的至少一个GPU通道分配给客户GPU驱动程序310。主资源管理器306随后通知GPU仿真模块304该通道分配。在步骤514,GPU仿真模块304将与分配通道相关联的一组通道控制寄存器映射到可由包括客户GPU驱动程序310的客户VM 204访问的存储空间。在步骤516,代理资源管理器312对客户GPU驱动程序310指示GPU 112可以在操作412处在没有系统100内的任意其他组件的干预的情况下以上述方式经由一组通道控制寄存器直接访问。
以这样的方式,在客户虚拟机中执行的客户GPU驱动程序310能够直接利用GPU 112的处理能力的至少一部分。因为虚拟化层206对于建立对客户VM的访问进行最小干预,所以具有这样的直接访问提高了其中多个客户VM竞争对GPU 112的访问的系统的性能。此外,因为客户GPU驱动程序310可以直接将命令发送到GPU 112,所以命令转译量和当在虚拟环境中支持不同类型的GPU驱动程序时发生的兼容性问题大大减少。
本文所述的各种实施例可以采用包括存储在计算机系统中的数据的各种计算机实现的操作。例如,这些操作可要求物理量的物理操作—通常,但并非必然,这些量可以采取电或磁信号的形式,其中它们或它们的表示能够被存储、转换、合并、比较或进行其他处理。进一步地,这样的处理通常清楚地涉及诸如产生、识别、确定或比较。本文所述的形成本发明一个或多个实施例的一部分的任意操作可以是有用的机器操作。此外,本发明的一个或多个实施例还涉及用于执行这些操作的设备或装置。装置可以是用于特定的所需目的而特别构造的,或者其可以是由存储在计算机中的计算机程序选择性激活或配置的通用计算机。特别地,各种通用机器可以与根据本文的教导所编写的计算机程序一起使用,或者构造更专用的装置以实施所需的操作可能是更方便的。
本文所述的各种实施例可以与其他计算机系统配置一起实践,其他计算机系统配置包括手持设备、微处理器系统、基于微处理器的或可编程的消费电子产品、微型计算机、大型计算机等等。
本发明的一个或多个实施例可以作为包含在一个或多个计算机可读介质中的一个或多个计算机程序或者一个或多个计算机程序模块实现。术语计算机可读介质是指可以存储其后可以输入到计算机系统的数据的任意数据存储设备-计算机可读介质可以基于用于以使其能够由计算机读取的方式体现计算机程序的任意现有的或随后开发的技术。计算机可读介质的示例包括硬盘驱动程序、网络附加存储(NAS)、只读存储器、随机存取存储器(例如,闪存设备)、CD(压缩磁盘)--CD-ROM、CD-R或CD-RW、DVD(数字多功能光盘)、磁带以及其他光学和非光学数据存储设备。计算机可读介质还可以分布在耦合网络的计算机系统上以使计算机可读代码以分布方式存储和执行。
尽管为清晰理解已经详细描述了本发明的一个或多个实施例,但是显而易见的是在权利要求的范围内可以做出某些改变和修改。因此,所描述的实施例应该视为示例性的而非限制性的,并且权利要求的范围不局限于本文所给出的细节,而是在权利要求的范围和等价内可以修改的。在权利要求中,元素和/或步骤不意味着任何特定顺序的操作,除非在权利要求中明确指出。
根据各种实施例的虚拟化系统可以实现为主实施例、非主实施例或作为趋向两者之间模糊区别的实施例,都是设想的。此外,各种虚拟化操作可以完全或部分地以硬件实现。例如,硬件实现可以采用用于对安全非磁盘数据的存储访问请求的修改的查找表。
无论虚拟化的程度,许多变化、修改、增补和改进都是可能的。因此虚拟化软件可以包括主机、控制台或执行虚拟化功能的客户操作系统的组件。可以为本文描述为单个实例的组件、操作或结构提供多个实例。最后,各种组件、操作和数据储存之间的边界在某种程度上是随意的,并且特定操作在具体示例性配置的上下文环境中示出。可以设想功能性的其他分配并其可落入本发明的范围内。一般,在示例性配置中作为单独组件表示的结构和功能性可以作为组合的结构或组件来实现。类似地,作为单个组件表示的结构和功能性可以作为单独的组件来实现。这些以及其他变化、修改、增补和改进可落入所附权利要求的范围内。
Claims (10)
1.一种计算机系统,包括:
初级处理单元;
二级处理单元,其耦合到所述初级处理单元并且经由多个通道可访问;
多个客户虚拟机,其在所述初级处理单元上执行,其中每个客户虚拟机包括与所述二级处理单元相关联的驱动程序;以及
特权虚拟机,其在所述初级处理单元上执行并且配置为将包括在所述多个通道中的不同通道组分配给包括在所述多个客户虚拟机中的每个所述驱动程序,其中分配给包括在第一客户虚拟机中的第一驱动程序的第一通道组使所述第一驱动程序能够访问所述二级处理单元而不与包括在所述多个客户虚拟机中的任意其他驱动程序相冲突并且免受其影响。
2.根据权利要求1所述的计算机系统,其中每个客户虚拟机包括配置为经由远程过程调用与所述特权虚拟机通信的代理资源管理器。
3.根据权利要求2所述的计算机系统,其中所述第一客户虚拟机包括第一代理资源管理器,其配置为:
发送请求到所述特权虚拟机,以为所述第一驱动程序建立对所述二级处理单元的访问,以及
从所述特权虚拟机接收所述第一通道组已经分配给所述第一驱动程序的通信,
其中所述特权虚拟机将与所述第一通道组相关联的一个或多个控制寄存器映射到所述第一驱动程序可访问的存储空间的一部分,其中每个控制寄存器与所述第一通道组中的不同通道相关联,并且所述第一通道组中的每个通道基于与所述通道相关联的关联控制寄存器的内容来用命令填充。
4.根据权利要求3所述的计算机系统,其中所述第一驱动程序通过将一个或多个命令写到命令缓冲区以及用与所述命令缓冲区相关联的至少第一存储器地址填充与包括在所述通道组中的第一通道相关联的通道控制寄存器来访问所述第二处理单元。
5.根据权利要求2所述的计算机系统,其中所述特权虚拟机包括配置为仿真所述二级处理单元的一部分的仿真软件模块,以及所述代理资源管理器配置为:
将访问所述第二处理单元的一部分的请求从所述第一驱动程序路由到所述仿真软件模块,以及
响应于所述请求将数据从所述仿真软件模块发送到所述第一驱动程序。
6.根据权利要求2所述的计算机系统,其中所述特权虚拟机包括每当由所述第二处理单元发起事件时得到通知的仿真软件模块,以及所述第一代理资源管理器配置为:
将注册所述第二处理单元将发起的第一事件的请求路由到所述仿真软件模块,以及
当所述第二处理单元发起所述第一事件时,将通知从所述仿真软件模块发送到所述第一驱动程序。
7.根据权利要求1所述的计算机系统,进一步包括显示器,其中每个所述客户虚拟机包括配置为将显示帧渲染到所述显示器上的显示驱动程序。
8.根据权利要求7所述的计算机系统,其中所述特权虚拟机包括配置为捕获由包括在所述第一客户虚拟机内的第一显示驱动程序所发送的、关于将第一显示帧渲染到所述显示器上的显示命令的仿真软件模块。
9.根据权利要求2所述的计算机系统,其中所述特权虚拟机包括每当与包括在所述多个通道中的任意通道相关联的故障发生时由所述第二处理单元通知的仿真软件模块。
10.根据权利要求1所述的计算机系统,其中所述特权虚拟机配置为当所述第一客户虚拟机终止时从所述第一驱动程序解除分配所述第一通道组。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/270,082 US10310879B2 (en) | 2011-10-10 | 2011-10-10 | Paravirtualized virtual GPU |
US13/270,082 | 2011-10-10 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103034524A true CN103034524A (zh) | 2013-04-10 |
CN103034524B CN103034524B (zh) | 2016-05-04 |
Family
ID=47909093
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210383046.7A Active CN103034524B (zh) | 2011-10-10 | 2012-10-10 | 半虚拟化的虚拟gpu |
Country Status (4)
Country | Link |
---|---|
US (1) | US10310879B2 (zh) |
CN (1) | CN103034524B (zh) |
DE (1) | DE102012218379B4 (zh) |
TW (1) | TWI498824B (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786589A (zh) * | 2016-02-26 | 2016-07-20 | 成都赫尔墨斯科技有限公司 | 一种云渲染系统、服务器及方法 |
CN105830026A (zh) * | 2013-11-27 | 2016-08-03 | 英特尔公司 | 用于调度来自虚拟机的图形处理单元工作负荷的装置和方法 |
CN105988874A (zh) * | 2015-02-10 | 2016-10-05 | 阿里巴巴集团控股有限公司 | 资源处理方法及装置 |
CN106030602A (zh) * | 2014-03-28 | 2016-10-12 | 英特尔公司 | 基于虚拟化的块内工作负荷隔离 |
CN107533463A (zh) * | 2015-03-18 | 2018-01-02 | 英特尔公司 | 用于软件不可知多gpu处理的设备和方法 |
CN107533469A (zh) * | 2015-05-29 | 2018-01-02 | 英特尔公司 | 对图形处理单元资源的容器访问 |
WO2018112827A1 (en) * | 2016-12-22 | 2018-06-28 | Intel Corporation | Accelerating para-virtualization network interface using direct memory access (dma) remapping |
CN108776949A (zh) * | 2017-04-07 | 2018-11-09 | 英特尔公司 | 用于图形处理环境中的存储器管理的设备和方法 |
CN109284172A (zh) * | 2018-09-20 | 2019-01-29 | 贵州华芯通半导体技术有限公司 | 虚拟化环境下的通路资源管理方法、系统和虚拟机管理器 |
CN109408449A (zh) * | 2017-08-15 | 2019-03-01 | Arm有限公司 | 数据处理系统 |
TWI656508B (zh) * | 2016-07-01 | 2019-04-11 | 美商谷歌有限責任公司 | 用於具二維執行道陣列及二維位移暫存器之影像處理器之區塊操作 |
CN109690482A (zh) * | 2016-09-05 | 2019-04-26 | 华为技术有限公司 | 虚拟机图形处理器的分配 |
CN113467970A (zh) * | 2021-06-25 | 2021-10-01 | 阿里巴巴新加坡控股有限公司 | 云计算系统中的跨安全区域的资源访问方法及电子设备 |
CN114008588A (zh) * | 2019-06-26 | 2022-02-01 | Ati科技无限责任公司 | 在处理单元的虚拟化环境中共享多媒体物理功能 |
CN115988218A (zh) * | 2023-03-14 | 2023-04-18 | 摩尔线程智能科技(北京)有限责任公司 | 一种虚拟化视频编解码系统、电子设备和存储介质 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9378560B2 (en) | 2011-06-17 | 2016-06-28 | Advanced Micro Devices, Inc. | Real time on-chip texture decompression using shader processors |
US9342920B1 (en) * | 2011-11-15 | 2016-05-17 | Intrinsic Medical Imaging, LLC | Volume rendering using scalable GPU-based cloud computing |
WO2015100681A1 (zh) * | 2013-12-31 | 2015-07-09 | 华为技术有限公司 | Gpu虚拟化的实现方法及相关装置和系统 |
GB2525003B (en) * | 2014-04-09 | 2021-06-09 | Advanced Risc Mach Ltd | Data Processing Systems |
EP3218803B1 (en) * | 2014-11-12 | 2021-01-06 | Intel Corporation | Live migration of virtual machines from/to host computers with graphics virtualization |
US9766918B2 (en) * | 2015-02-23 | 2017-09-19 | Red Hat Israel, Ltd. | Virtual system device identification using GPU to host bridge mapping |
US9875047B2 (en) | 2015-05-27 | 2018-01-23 | Red Hat Israel, Ltd. | Exit-less host memory locking in a virtualized environment |
US9753861B2 (en) | 2015-05-27 | 2017-09-05 | Red Hat Israel, Ltd | Exit-less movement of guest memory assigned to a device in a virtualized environment |
US9996494B2 (en) * | 2015-09-03 | 2018-06-12 | Red Hat Israel, Ltd. | Asynchronous mapping of hot-plugged device associated with virtual machine |
CN107193650B (zh) * | 2017-04-17 | 2021-01-19 | 北京奇虎科技有限公司 | 一种在分布式集群中调度显卡资源的方法和装置 |
US10241823B2 (en) * | 2017-05-31 | 2019-03-26 | Red Hat Israel, Ltd. | Migrating a virtual machine in response to identifying an unsupported virtual hardware component |
CN110389825B (zh) * | 2018-04-20 | 2023-08-04 | 伊姆西Ip控股有限责任公司 | 管理专用处理资源的方法、设备和计算机程序产品 |
US11347531B2 (en) * | 2018-10-31 | 2022-05-31 | The Boeing Company | Generalized virtualization platform for systems using hardware abstraction software layers |
US10795718B2 (en) * | 2019-02-08 | 2020-10-06 | Microsoft Technology Licensing, Llc | Updating hardware with reduced virtual machine downtime |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1797345A (zh) * | 2004-12-30 | 2006-07-05 | 微软公司 | 用于虚拟化图形子系统的系统和方法 |
US20100262722A1 (en) * | 2009-04-10 | 2010-10-14 | Christophe Vauthier | Dynamic Assignment of Graphics Processing Unit to a Virtual Machine |
US20110134111A1 (en) * | 2009-09-11 | 2011-06-09 | David Stone | Remote rendering of three-dimensional images using virtual machines |
CN102147722A (zh) * | 2011-04-08 | 2011-08-10 | 深圳中微电科技有限公司 | 实现中央处理器和图形处理器功能的多线程处理器及方法 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7434166B2 (en) * | 2003-06-03 | 2008-10-07 | Harman International Industries Incorporated | Wireless presentation system |
US7757231B2 (en) * | 2004-12-10 | 2010-07-13 | Intel Corporation | System and method to deprivilege components of a virtual machine monitor |
JP4733399B2 (ja) * | 2005-01-28 | 2011-07-27 | 株式会社日立製作所 | 計算機システム、計算機、ストレージ装置及び管理端末 |
US7616207B1 (en) * | 2005-04-25 | 2009-11-10 | Nvidia Corporation | Graphics processing system including at least three bus devices |
US8031198B1 (en) | 2006-10-31 | 2011-10-04 | Nvidia Corporation | Apparatus and method for servicing multiple graphics processing channels |
TW201007574A (en) * | 2008-08-13 | 2010-02-16 | Inventec Corp | Internet server system and method of constructing and starting a virtual machine |
US20100115510A1 (en) | 2008-11-03 | 2010-05-06 | Dell Products, Lp | Virtual graphics device and methods thereof |
US8910153B2 (en) | 2009-07-13 | 2014-12-09 | Hewlett-Packard Development Company, L. P. | Managing virtualized accelerators using admission control, load balancing and scheduling |
US8629878B2 (en) | 2009-08-26 | 2014-01-14 | Red Hat, Inc. | Extension to a hypervisor that utilizes graphics hardware on a host |
US8850426B2 (en) * | 2009-12-13 | 2014-09-30 | International Business Machines Corporation | Managing remote deployment of a virtual machine and service request to be processed by the virtual machines based on network bandwith and storage connectivity |
CN102971740B (zh) * | 2010-07-01 | 2016-01-27 | 惠普发展公司,有限责任合伙企业 | 计算设备上的用于多个环境的用户管理框架 |
US8484405B2 (en) * | 2010-07-13 | 2013-07-09 | Vmware, Inc. | Memory compression policies |
US8970603B2 (en) * | 2010-09-30 | 2015-03-03 | Microsoft Technology Licensing, Llc | Dynamic virtual device failure recovery |
US9841985B2 (en) * | 2011-04-12 | 2017-12-12 | Red Hat Israel, Ltd. | Storage block deallocation in virtual environments |
US8484392B2 (en) * | 2011-05-31 | 2013-07-09 | Oracle International Corporation | Method and system for infiniband host channel adaptor quality of service |
-
2011
- 2011-10-10 US US13/270,082 patent/US10310879B2/en active Active
-
2012
- 2012-10-09 DE DE102012218379.5A patent/DE102012218379B4/de active Active
- 2012-10-09 TW TW101137297A patent/TWI498824B/zh active
- 2012-10-10 CN CN201210383046.7A patent/CN103034524B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1797345A (zh) * | 2004-12-30 | 2006-07-05 | 微软公司 | 用于虚拟化图形子系统的系统和方法 |
US20100262722A1 (en) * | 2009-04-10 | 2010-10-14 | Christophe Vauthier | Dynamic Assignment of Graphics Processing Unit to a Virtual Machine |
US20110134111A1 (en) * | 2009-09-11 | 2011-06-09 | David Stone | Remote rendering of three-dimensional images using virtual machines |
CN102147722A (zh) * | 2011-04-08 | 2011-08-10 | 深圳中微电科技有限公司 | 实现中央处理器和图形处理器功能的多线程处理器及方法 |
Cited By (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10191759B2 (en) | 2013-11-27 | 2019-01-29 | Intel Corporation | Apparatus and method for scheduling graphics processing unit workloads from virtual machines |
CN105830026A (zh) * | 2013-11-27 | 2016-08-03 | 英特尔公司 | 用于调度来自虚拟机的图形处理单元工作负荷的装置和方法 |
CN105830026B (zh) * | 2013-11-27 | 2020-09-15 | 英特尔公司 | 用于调度来自虚拟机的图形处理单元工作负荷的装置和方法 |
CN106030602A (zh) * | 2014-03-28 | 2016-10-12 | 英特尔公司 | 基于虚拟化的块内工作负荷隔离 |
CN106030602B (zh) * | 2014-03-28 | 2019-04-30 | 英特尔公司 | 基于虚拟化的块内工作负荷隔离 |
US10395028B2 (en) | 2014-03-28 | 2019-08-27 | Intel Corporation | Virtualization based intra-block workload isolation |
CN105988874A (zh) * | 2015-02-10 | 2016-10-05 | 阿里巴巴集团控股有限公司 | 资源处理方法及装置 |
TWI696952B (zh) * | 2015-02-10 | 2020-06-21 | 香港商阿里巴巴集團服務有限公司 | 資源處理方法及裝置 |
CN107533463A (zh) * | 2015-03-18 | 2018-01-02 | 英特尔公司 | 用于软件不可知多gpu处理的设备和方法 |
CN107533469A (zh) * | 2015-05-29 | 2018-01-02 | 英特尔公司 | 对图形处理单元资源的容器访问 |
US11386519B2 (en) | 2015-05-29 | 2022-07-12 | Intel Corporation | Container access to graphics processing unit resources |
CN107533469B (zh) * | 2015-05-29 | 2022-03-29 | 英特尔公司 | 对图形处理单元资源的容器访问 |
CN105786589A (zh) * | 2016-02-26 | 2016-07-20 | 成都赫尔墨斯科技有限公司 | 一种云渲染系统、服务器及方法 |
US10531030B2 (en) | 2016-07-01 | 2020-01-07 | Google Llc | Block operations for an image processor having a two-dimensional execution lane array and a two-dimensional shift register |
TWI656508B (zh) * | 2016-07-01 | 2019-04-11 | 美商谷歌有限責任公司 | 用於具二維執行道陣列及二維位移暫存器之影像處理器之區塊操作 |
TWI687896B (zh) * | 2016-07-01 | 2020-03-11 | 美商谷歌有限責任公司 | 用於具二維執行道陣列及二維位移暫存器之影像處理器之區塊操作 |
US11196953B2 (en) | 2016-07-01 | 2021-12-07 | Google Llc | Block operations for an image processor having a two-dimensional execution lane array and a two-dimensional shift register |
TWI767190B (zh) * | 2016-07-01 | 2022-06-11 | 美商谷歌有限責任公司 | 用於具二維執行道陣列及二維位移暫存器之影像處理器之區塊操作 |
CN109690482A (zh) * | 2016-09-05 | 2019-04-26 | 华为技术有限公司 | 虚拟机图形处理器的分配 |
US11321111B2 (en) | 2016-09-05 | 2022-05-03 | Huawei Technologies Co., Ltd. | Allocation of graphics processing units for virtual machines |
WO2018112827A1 (en) * | 2016-12-22 | 2018-06-28 | Intel Corporation | Accelerating para-virtualization network interface using direct memory access (dma) remapping |
CN109983438A (zh) * | 2016-12-22 | 2019-07-05 | 英特尔公司 | 使用直接存储器访问(dma)重新映射来加速半虚拟化网络接口 |
CN109983438B (zh) * | 2016-12-22 | 2024-02-02 | 英特尔公司 | 使用直接存储器访问(dma)重新映射来加速半虚拟化网络接口 |
US11853784B2 (en) | 2016-12-22 | 2023-12-26 | Intel Corporation | Accelerating para-virtualization of a network interface using direct memory access (DMA) remapping |
CN108776949B (zh) * | 2017-04-07 | 2024-05-03 | 英特尔公司 | 用于图形处理环境中的存储器管理的设备和方法 |
CN108776949A (zh) * | 2017-04-07 | 2018-11-09 | 英特尔公司 | 用于图形处理环境中的存储器管理的设备和方法 |
CN109408449A (zh) * | 2017-08-15 | 2019-03-01 | Arm有限公司 | 数据处理系统 |
CN109284172A (zh) * | 2018-09-20 | 2019-01-29 | 贵州华芯通半导体技术有限公司 | 虚拟化环境下的通路资源管理方法、系统和虚拟机管理器 |
CN114008588A (zh) * | 2019-06-26 | 2022-02-01 | Ati科技无限责任公司 | 在处理单元的虚拟化环境中共享多媒体物理功能 |
CN113467970B (zh) * | 2021-06-25 | 2023-09-26 | 阿里巴巴新加坡控股有限公司 | 云计算系统中的跨安全区域的资源访问方法及电子设备 |
CN113467970A (zh) * | 2021-06-25 | 2021-10-01 | 阿里巴巴新加坡控股有限公司 | 云计算系统中的跨安全区域的资源访问方法及电子设备 |
CN115988218A (zh) * | 2023-03-14 | 2023-04-18 | 摩尔线程智能科技(北京)有限责任公司 | 一种虚拟化视频编解码系统、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
TW201331844A (zh) | 2013-08-01 |
CN103034524B (zh) | 2016-05-04 |
DE102012218379A1 (de) | 2013-04-11 |
TWI498824B (zh) | 2015-09-01 |
US10310879B2 (en) | 2019-06-04 |
DE102012218379B4 (de) | 2014-05-15 |
US20130091500A1 (en) | 2013-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103034524A (zh) | 半虚拟化的虚拟gpu | |
US10732982B2 (en) | Data processing systems | |
CN103282881B (zh) | 通过虚拟化直接共享智能设备 | |
JP5323897B2 (ja) | 仮想マシン・モニタと、acpi準拠ゲスト・オペレーティング・システムとの間の双方向通信のための方法、装置及びシステム | |
CN105830026B (zh) | 用于调度来自虚拟机的图形处理单元工作负荷的装置和方法 | |
JP5608243B2 (ja) | 仮想化環境においてi/o処理を行う方法および装置 | |
WO2017024783A1 (zh) | 一种虚拟化方法、装置和系统 | |
CN115344521A (zh) | 可扩展输入/输出(i/o)虚拟化(s-iov)架构中的虚拟设备构成 | |
CN110659245A (zh) | 具有可编程多上下文加速器电路的系统 | |
CN102541619B (zh) | 虚拟机管理装置和方法 | |
CN100410912C (zh) | 从一个设备驱动程序向另一个传送信息的系统和方法 | |
US20060184938A1 (en) | Method, apparatus and system for dynamically reassigning memory from one virtual machine to another | |
US20100262722A1 (en) | Dynamic Assignment of Graphics Processing Unit to a Virtual Machine | |
US20120054740A1 (en) | Techniques For Selectively Enabling Or Disabling Virtual Devices In Virtual Environments | |
WO2022001808A1 (zh) | 一种系统以及中断处理方法 | |
CN101876954A (zh) | 一种虚拟机控制系统及其工作方法 | |
CN116010296A (zh) | 一种处理请求的方法、装置及系统 | |
CN113568734A (zh) | 基于多核处理器的虚拟化方法、系统、多核处理器和电子设备 | |
Grinberg et al. | Architectural virtualization extensions: A systems perspective | |
US8402191B2 (en) | Computing element virtualization | |
US20160026567A1 (en) | Direct memory access method, system and host module for virtual machine | |
US20200201758A1 (en) | Virtualized input/output device local memory management | |
CN112486632A (zh) | 一种面向k8s的用户态虚拟设备驱动框架 | |
CN111857943B (zh) | 数据处理的方法、装置与设备 | |
US20230229497A1 (en) | Transparent and remote kernel execution in a heterogeneous computing system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |