子分区与父分区之间的共享存储器的制作方法

文档序号:7938841阅读:485来源:国知局
专利名称:子分区与父分区之间的共享存储器的制作方法
技术领域
本发明涉及子分区与父分区之间的共享存储器。
背景技术
联网的一种日益流行的形式一般被称为远程呈现系统,其能使用诸如远程桌面协议(RDP)以及独立计算体系结构(ICA)等协议来与远程客户端共享桌面和在服务器上执行的其他应用。这样的计算系统通常将键盘按压和鼠标点击或选择从客户端传送到服务器,通过网络连接(例如,因特网)在另一方向上转播回屏幕更新。由此,当实际 上仅仅向客户端设备发送如在服务器侧上显现的桌面或应用的屏幕截图时,用户具有好像他的或她的机器正在完全地本地操作的体验。可以在服务器处为每个用户渲染用户图形和视频。然后将得到的位图发送给客户端以供显示和交互。在一些系统中,图形加速器(比如GPU)也可以被虚拟化。例如,不是对完整的硬件GPU进行建摸,而是GPU可以被虚拟化并且由此提供抽象的仅限软件的GPU,该仅限软件的GPU呈现与底层硬件的软件接ロ不同的软件接ロ。通过提供虚拟化的GPU,虚拟机可以用例如经加速的3D渲染和多媒体来实现丰富的用户体验,而不需要将虚拟机与特定GPU产品相关联。在一些情况下,子分区上的诸如经虚拟化的GPU之类的经虚拟化的设备可以将大量数据传输给主分区以便模拟有视频能力的卡。由于标准虚拟机总线机制的限制,这样大量的数据的传输可能给系统设计和性能造成负担。

发明内容
在各个实施例中,存储器可以在子分区中分配,并且映射可以使用虚拟化系统API来创建。然后,该映射可以被传输给主分区,其中附加的虚拟化系统API可以有助于将存储器映射到主分区的用户空间。附加的同步机制和读取/写入API可以允许子分区和父分区二者上的应用读取共享存储器中的数据。此外,还可以提供无论是内核还是用户空间都将存储器的任何区域从子分区映射到父分区的能力。


參考附图来进一歩描述根据本说明书的用于在虚拟机分区之间传输数据的系统、方法和计算机可读介质,附图图I和2描绘了其中可实现本发明的各方面的示例计算机系统。图3描绘了用于实施本发明的各方面的操作环境。图4描绘了用于实施本发明的各方面的操作环境。图5示出了包括用于实现远程桌面服务的电路的计算机系统。图6示出了包括用于实现远程服务的电路的计算机系统。图7示出了经虚拟化的GPU的示例性抽象层。
图8示出了包含此处所公开的方法的各方面的示例体系结构。图9示出了包含此处所公开的方法的各方面的示例体系结构。图10示出了包含此处所公开的方法的各方面的示例体系结构。图11示出了用于在虚拟机分区之间传输数据的操作过程的实例。图12示出了用于在虚拟机分区之间传输数据的实例性系统。
具体实施例方式概括的计算环境
在以下描述和附图中阐明了某些具体细节,以提供对本发明的各个实施例的全面理解。通常与计算和软件技术相关联的某些公知细节将不在以下公开中描述,以避免不必要地使本发明的各实施例晦涩难懂。此外,相关领域的普通技术人员可以理解,他们可以无需以下描述的细节中的一个或多个而实现本发明的其它实施例。最后,尽管在以下公开中參考了步骤和序列来描述各个方法,但是如此的描述是为了提供本发明的实施例的清楚实现,且步骤以及步骤序列不应被认为是实现本发明所必需的。应该理解,此处所描述的各种技术可以结合硬件或软件或,在适当的情况下,结合两者的组合来实现。因此,本发明的方法和装置或其某些方面或部分,可以采用包含在诸如软盘、CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的程序代码(即,指令)的形式,其中,当程序代码被加载至诸如计算机等机器并由其运行时,该机器成为用于实现本发明的装置。在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、可由处理器读取的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备,以及至少ー个输出设备。一个或多个程序可以例如,通过使用API、可重用控件等来实现或利用结合本发明描述的过程。这样的程序优选地以高级别过程或面向对象编程语言来实现,以与计算机系统进行通信。然而,若有需要,程序也可以以以汇编或机器语言来实现。在任ー情况下,语言都可以是编译的或解释的语言,并与硬件实现相结合。远程桌面系统是维护可由客户计算机系统远程地执行的应用的计算机系统。输入是在客户计算机系统处被输入的,并通过网络(例如,使用基于国际电信联盟(ITU)T. 120系列协议等协议,如远程桌面协议(RDP))传送到終端服务器上的应用。该应用如同该输入是在终端服务器处送入的那样来处理该输入。该应用响应于所接收到的输入来生成输出,并且通过网络将该输出传送到客户端。各实施例可在一个或多个计算机上执行。图I和2以及下面的讨论g在提供其中可实现本发明的合适的计算环境的简要概括描述。本领域的技术人员可以理解,计算机系统200、300可具有參照图I和2的计算机100描述的组件中的一部分或全部。贯穿本发明使用的术语电路可包括诸如硬件中断控制器、硬盘驱动器、网络适配器、图形处理器、基于硬件的视频/音频编解码器等硬件组件,以及用于操作这些硬件的固件/软件。术语电路还可包括被配置成通过固件或通过开关集来以特定方式执行功能的微处理器,或ー个或多个逻辑处理器,例如,多核通用处理单元的ー个或多个核。此示例中的逻辑处理器可以通过从存储器,例如,RAM、ROM、固件和/或虚拟存储器中加载的体现可操作以执行功能的逻辑的软件指令来配置。在其中电路包括硬件和软件的组合的示例实施例中,实现者可以编写具体化逻辑的源代码,该源代码随后被编译成可由逻辑处理器执行的机器可读代码。因为本领域技术人员可以明白现有技术已经进化到硬件、软件或硬件/软件的组合之间几乎没有差别的地歩,因而选择硬件还是软件来实现功能只是ー个设计选择。因此,由于本领域的技术人员可以理解软件进程可被变换成等效的硬件结构,且硬件结构本身可被变换成等效的软件进程,因此选择硬件实现或是软件实现是无足轻重的且留给了实现者。图I描绘了以本发明的各方面来配置的计算系统的示例。计算系统可包括计算机20等等,其中包括处理单元21、系统存储器22,以及将包括系统存储器在内的各种系统组件耦合到处理单元21的系统总线23。系统总线23可以是若干类型的总线结构中的任一种,包括使用各种总线体系结构中的任一种的存储器总线或存储器控制器、外围总线,以及局部总线。系统存储器包括只读存储器(ROM) 24和随机存取存储器(RAM) 25。基本输入/输出系统26 (BIOS)被存储在ROM 24中,该基本输入/输出系统26包含了诸如在启动期间帮助在计算机20内的元件之间传输信息的基本例程。计算机20还可以包括 用于读写硬盘(未示出)的硬盘驱动器27、用于读写可移动磁盘29的磁盘驱动器28,以及用于读写诸如CD ROM或其他光学介质之类的可移动光盘31的光盘驱动器30。在一些示例实施例中,实施本发明的各方面的计算机可执行指令可存储在ROM 24、硬盘(未示出)、RAM 25、可移动磁盘29、光盘31和/或处理单元21的高速缓存中。硬盘驱动器27、磁盘驱动器28,以及光盘驱动器30分别通过硬盘驱动器接ロ 32、磁盘驱动器接ロ 33,以及光盘驱动器接ロ 34连接到系统总线23。驱动器以及它们相关联的计算机可读介质为计算机20提供了对计算机可读指令、数据结构、程序模块,及其他数据的非易失性存储。虽然此处所描述的环境使用了硬盘、可移动磁盘29、以及可移动光盘31,但是,那些本领域普通技术人员应该理解,在操作环境中也可以使用诸如盒式磁带、闪存卡、数字视频盘、伯努利磁带盒、随机存取存储器(RAM)、只读存储器(ROM)等等之类的可以存储可由计算机进行访问的数据的其他类型的计算机可读介质。可以有若干个程序模块存储在硬盘、磁盘29、光盘31、ROM 24,和/或RAM 25上,包括操作系统35、一个或多个应用程序36、其他程序模块37、以及程序数据38。用户可以通过诸如键盘40和定点设备42之类的输入设备向计算机20中输入命令和信息。其他输入设备(未示出)可包括话筒、游戏杆、游戏手柄、圆盘式卫星天线、扫描仪等等。这些及其他输入设备常常通过耦合到系统总线的串行端ロ接ロ 46连接到处理单元21,但是,也可以通过诸如并行端ロ、游戏端ロ、通用串行总线(USB)端ロ之类的其他接ロ来连接。显示器47或其他类型的显示设备也可以通过诸如视频适配器48之类的接ロ连接到系统总线23。除了显示器47之外,计算机通常还包括其他外围输出设备(未示出),如扬声器和打印机。图I的系统也包括主机适配器55、小型计算机系统接ロ(SCSI)总线56,以及连接到SCSI总线56的外部存储装置62。计算机20可以使用到一个或多个远程计算机(如远程计算机49)的逻辑连接,以在联网环境中操作。远程计算机49可以是另ー计算机、服务器、路由器、网络PC、对等设备或其他常见的网络节点、虚拟机,并通常包括上文相对于计算机20所描述的许多或全部元件,但是在图I中只示出了存储器存储设备50。图I中所描绘的逻辑连接可包括局域网(LAN)51和广域网(WAN)52。这样的联网环境在办公室、企业范围的计算机网络、内联网和因特网中是普遍的。
当用于LAN网络环境中吋,计算机20可通过网络接ロ或适配器53连接到LAN 51。当用于WAN网络环境中时,计算机20通常包括调制解调器54,或用于通过诸如因特网之类的广域网52建立通信的其他手段。可以是内置的或外置的调制解调器54可通过串行端ロ接ロ 46连接到系统总线23。在联网环境中,相对于计算机20所描述的程序模块或其部分可被存储在远程存储器存储设备中。可以理解,所示出的网络连接只是示例,也可以使用用于在计算机之间建立通信链路的其他装置。此外,虽然可构想本发明的许多实施例尤其适用于计算机系统,然而在本文中不意味着将本发明限于这些实施例的公开。现在參考图2,描绘了示例性计算系统100的另ー实施例。计算机系统100可包括逻辑处理器102,如执行核。尽管示出了一个逻辑处理器102,但在其他实施例中,计算机系统100可具有多个逻辑处理器,例如姆ー处理器基板有多个执行核,和/或各自可具有多个执行核的多个处理器基板。如图所示,各种计算机可读存储介质110可由ー个或多个系统总线互联,系统总线将各种系统组件耦合到逻辑处理器102。系统总线可以是几种类型的总线结构中的任何ー种,包括存储器总线或存储器控制器、外围总线、以及使用各种总线体系结构中的任ー种的局部总线。在示例实施例中,计算机可读存储介质110可以包括例 如随机存取存储器(RAM) 104、存储设备106 (例如电机硬盘驱动器、固态硬盘驱动器等)、固件108 (例如闪速RAM或ROM)、以及可移动存储设备118 (例如⑶-ROM、软盘、DVD、闪速驱动器、外部存储设备等)。本领域的技术人员应当理解,可使用其他类型的计算机可读存储介质,如磁带盒、闪存卡、数字视频盘、柏努利盒式磁带。计算机可读存储介质为计算机100提供了对处理器可执行指令122、数据结构、程序模块和其他数据的非易失性存储。基本输入/输出系统(BIOS) 120可被存储在固件108中,它包含帮助在诸如启动期间在计算机系统100内的各元件之间传递信息的基本例程。包括操作系统和/或应用程序的多个程序可被存储在固件108、存储设备106、RAM 104和/或可移动存储设备118上,并且可由逻辑处理器102来执行。命令和信息可由计算机100通过输入设备116来接收,输入设备可包括但不限于键盘和定点设备。其他输入设备可以包括话筒、操纵杆、游戏手柄、扫描仪等等。这些和其他输入设备常通过耦合到系统总线的串行端ロ接ロ连接到逻辑处理器102,但也可通过其他接ロ连接,如并行端ロ、游戏端ロ或通用串行总线(USB)。显示器或其他类型的显示设备也可经由诸如视频适配器等可以是图形处理器112的一部分或可连接到图形处理器112的接ロ来连接到系统总线。除了显示器之外,计算机通常包括其他外围输出设备(未示出),如扬声器和打印机。图I的示例性系统还可包括主适配器、小型计算机系统接ロ(SCSI)总线和连接到SCSI总线的外部存储设备。计算机系统100可使用至ー个或多个远程计算机,如远程计算机,的逻辑连接在网络化环境中操作。远程计算机可以是另ー计算机、服务器、路由器、网络PC、对等设备或其他常见的网络节点,并且通常包括上面关于计算机系统100所述的许多或全部元件。当在LAN或WAN联网环境中使用时,计算机系统100可通过网络接ロ卡114连接至LAN或WAN。NIC 114可以是内置或外置的,其可以连接到系统总线。在联网环境中,相对于计算机系统100所描述的程序模块或其部分可被储存在远程存储器存储设备中。可以理解,所描述的网络连接是示例性的,且可以使用在计算机之间建立通信链路的其他手段。此外,虽然可构想本发明的许多实施例尤其适用于计算机化的系统,然而在本说明中不意味着将本发明限于那些实施例。远程桌面系统是维护可由客户计算机系统远程地执行的应用的计算机系统。输入是在客户计算机系统处被输入的,并通过网络(例如,使用基于国际电信联盟(ITU)T. 120系列协议等协议,如远程桌面协议(RDP))传送到終端服务器上的应用。该应用如同该输入是在终端服务器处送入的那样来处理该输入。该应用响应于所接收到的输入生成输出,并且该输出通过网络传送到客户计算机系统。客户计算机系统呈现输出数据。由此,在客户计算机系统处接收输入并呈现输出,而处理实际上是在终端服务器处发生的。会话可包括诸如桌面之类的命令行界面(shel l)和用户界面、跟踪该桌面内的鼠标移动的子系统、将图标上的鼠标点击转换成实现程序实例的命令的子系统等等。在另ー示例实施例中,会话可包括应用。在该示例中,当呈现应用时,桌面环境仍可被生成并对用户隐藏。应当理解,前述讨论是示例性的,且当前公开的主题可以在各种客户端/服务器环境中实现且不限于特定终端服务广品。即使不是全部,也是在大多数远程桌面环境中,输入数据(在客户计算机系统处送入的)通常包括表示对应用的命令的鼠标和键盘数据,且输出数据(由終端服务器处的应用生成)通常包括用于在视频输出设备上显示的视频数据。许多远程桌面环境也包括扩展到传输其他类型的数据的功能。可使用通信信道来通过允许插件经由RDP连接传输数据来扩展RDP协议。存在许多这样的扩展。诸如打印机重定向、剪贴板重定向、端口重定向等特征使用通信信道技木。由此,除了输入和输出数据之外,可以有许多需要来传输数据的通信信道。因此,可能有传输输出数据的偶然请求和传输其他数据的ー个或多个信道请求争用可用的网络带宽。现在參考图3和4,所描绘的是被配置成实现虚拟机的计算机系统的高级框图。如图所示,计算机系统100可包括图I和2中所描述的元件,以及可用于实现虚拟机的组件。一个这样的组件是在本领域中也可被称为虚拟机监控程序的系统管理程序(hypervisor) 202.所描绘的实施例中的系统管理程序202可被配置成控制并仲裁对计算机系统100的硬件的访问。广泛而言,系统管理程序202可以生成称为分区的执行环境,如子分区I到子分区N(其中N是大于或等于I的整数)。在各实施例中,子分区可被认为是系统管理程序202所支持的基本隔离单位,即,每一子分区可被映射到在系统管理程序202的控制下的ー组硬件资源,例如存储器、设备、逻辑处理器周期等,和/或父分区,并且系统管理程序202可以隔离ー个分区使其无法访问另一分区的资源。在各实施例中,系统管理程序202可以是独立软件产品,操作系统的一部分、被嵌入在主板的固件内、专门的集成电路,或其组合。在以上示例中,计算机系统100包括父分区204,父分区在开源社区中也可被认为是域O。父分区204可被配置成通过使用虚拟化服务提供者228 (VSP)来向在子分区I-N中执行的客操作系统提供资源,虚拟化服务提供者在开源社区中也被称为后端驱动程序。在此示例体系结构中,父分区204可以选通对底层硬件的访问。VSP 228可用于通过虚拟化服务客户端(VCS)来复用到硬件资源的接ロ,虚拟化服务客户端在开源社区中也被称为前端驱动程序。每一子分区可包括ー个或多个虚拟处理器,例如客操作系统220到222可管理并调度线程在其上执行的虚拟处理器230到232。一般而言,虚拟处理器230到232是提供带有特定体系结构的物理处理器的表示的可执行指令和相关联状态信息。例如,一个虚拟机可具有带有英特尔x86处理器特性的虚拟处理器,而另一虚拟处理器可具有PowerPC处理器的特性。本例中的虚拟处理器可被映射到计算机系统的逻辑处理器,使得实现虚拟处理器的指令将受到逻辑处理器的支持。如此,在这些示例实施例中,多个虚拟处理器可以同时执行,而同时例如另ー逻辑处理器正执行系统管理程序指令。一般而言,且如图所示,分区中的虚拟处理器、各种VCS以及存储器的组合可被认为是虚拟机,如虚拟机240或242。一般而言,客操作系统220到222可包括诸如,例如,来自Microsoft 、APPle 、开放源代码社区等等的操作系统之类的任何操作系统。客操作系统可包括用户/内核操作模式,并且可具有能包括调度器、存储器管理器等的内核。内核模式可包括逻辑处理器中的执行模式,该执行模式授予对至少特权处理器指令的访问。每ー客操作系统220到222可具有相关联的文件系统,该文件系统上存储有诸如終端服务器、电子商务服务器、电子邮件服务器等应用以及客操作系统本身。客操作系统220-222可以调度线程来在虚拟处理器230-232上执行,并可以实现这样的应用程序的实例。现在參考图4,所示是可用于实现虚拟机的可替代体系结构。图4描绘了类似于图3的组件,但在该示例实施例中,系统管理程序202可包括虚拟化服务提供者228和设备驱 动程序224,并且父分区204可包含配置实用程序236。在该体系结构中,系统管理程序202可执行与图2中的系统管理程序202相同或相似的功能。图4中的系统管理程序202可以是独立的软件产品、操作系统的一部分、被嵌入在主板的固件内,或者系统管理程序202的一部分可以由专用集成电路来实现。在该示例中,父分区204可具有可用于配置系统管理程序202的指令,然而,硬件访问请求可由系统管理程序202来处理而非传递到父分区204。现在參考图5,计算机100可包括被配置成向连接的客户端提供远程桌面服务的电路。在一示例实施例中,所描绘的操作系统400可直接在硬件上执行,或者客操作系统220或222可以由诸如VM 216或VM 218等虚拟机来实现。底层硬件208、210、234、212和214在所示类型的虚线中指示以标识该硬件可被虚拟化。远程服务可被提供给诸如客户端401等至少ー个客户端(尽管描绘了ー个客户端,但远程服务可被提供给更多的客户端)。示例客户端401可包括由被配置成将用户输入定向到远程服务器会话并显示该会话生成的用户界面信息的硬件来实现的计算机終端。在另ー实施例中,客户端401可以由ー计算机来实现,该计算机包括与图I的计算机100中的元件类似的元件。在该实施例中,客户端401可包括被配置为实现操作系统的电路以及被配置为模拟终端的功能(例如,可由一个或多个逻辑处理器102执行的远程桌面客户端应用)的电路。本领域技术人员能够理解,被配置为实现操作系统的电路也可以包括被配置为模拟终端的电路。每ー连接的客户端可具有允许该客户端访问存储在计算机100上的数据和应用的会话(如会话404)。一般而言,应用和某些操作系统组件可被加载到分配给会话的存储器区域中。由此,在某些情况下,某些OS组件可被派生N次(其中N表示当前会话数)。这些各种OS组件可向操作系统内核418请求服务,操作系统内核例如能够管理存储器;方便盘读/写;以及配置来自每ー会话的线程来在逻辑处理器102上执行。可被加载到会话空间的某些示例子系统可包括生成桌面环境的子系统、跟踪桌面内的鼠标移动的子系统、将图标上的鼠标点击转换成实现程序实例的命令的子系统等等。实现这些服务,例如跟踪鼠标移动,的进程用与该会话相关联的标识符来标记,并且被加载到分配给该会话的存储器区域中。会话可以由例如进程等会话管理器416来生成。例如,会话管理器416可以通过如下方式来初始化和管理每ー远程会话为会话空间生成会话标识符;向会话空间分配存储器;以及在分配给会话空间的存储器中生成系统环境变量和子系统进程的实例。会话管理器416可在操作系统400接收到对远程桌面会话的请求时被调用。连接请求可首先由例如远程桌面协议(RDP)栈等传输栈410来处理。传输栈410指令可配置逻辑处理器102来监听特定端口上的连接消息,并将这些消息转发到会话管理器416。当生成会话时,传输栈410可为每ー会话实例化远程桌面协议栈实例。栈实例414是可为会话404生成的示例栈实例。一般而言,每ー远程桌面协议栈实例可被配置成将输出路由到相关联的客户端,并将客户端输入路由到用于适当的远程会话的环境子系统444。如图所示,在一实施例中,应用448 (尽管示出了ー个,但其他也可执行)可执行并生成位数组。数组可由图形接ロ 446来处理,图形接ロ进而可渲染可被存储在存储器中的 位图,如像素值阵列。如图所示,可实例化远程显示子系统420,该子系统可捕捉渲染调用,并通过网络经由用于会话的栈实例414来将该调用发送给客户端401。除了遥控图形和音频之外,也可实例化即插即用重定向器458以便遥控诸如打印机、mp3播放器、客户端文件系统、CD ROM驱动器等不同设备。即插即用重定向器458可从客户端侧组件接收信息,该信息标识了耦合到客户端401的外围设备。即插即用重定向器458然后可配置操作系统400来加载用于客户端401的外围设备的重定向设备驱动程序。重定向设备驱动程序可接收来自操作系统400的访问外围设备的调用,并通过网络将该调用发送到客户端401。如上所讨论的,客户端可使用诸如远程桌面协议(RDP)等用于提供远程呈现服务的协议来连接到使用終端服务的资源。当远程桌面客户端经由終端服务器网关连接到終端服务器时,该网关可打开与终端服务器的套接字连接,并重定向远程呈现端ロ或专用于远程访问服务的端口上的客户端通信。网关还可使用通过HTTPS传送的終端服务器网关协议来执行与客户端的特定的网关专用交换。转向图6,所描绘的是包括用于实现远程服务并合并本发明的各方面的电路的计算机系统100。如图所示,在一实施例中,计算机系统100可包括类似于图2和图5中所描绘的那些组件,并可实现远程呈现会话。在本发明的一个实施例中,远程呈现会话可包括控制台会话的各方面,例如使用计算机系统为用户派生的会话以及远程会话。类似于上述内容,会话管理器416可通过启用/禁用各组件以实现远程呈现会话来初始化并管理远程呈现会话。可被加载到远程呈现会话中的一组组件是启用高保真遥控的控制台组件,即利用了 3D硬件所渲染的3D图形和2D图形的组件。3D硬件所渲染的3D/2D图形可使用驱动程序模型来访问,该驱动程序模型包括用户模式驱动程序522、API 520、图形内核524以及内核模式驱动程序530。应用448 (或诸如用户界面等生成3D图形的任何其他进程)可生成API构造并将其发送到诸如来自微软 的Direct3D等应用编程接ロ 520(API)。API 520进而可与用户模式驱动程序522通信,用户模式驱动程序522可生成在被表示为顶点和常量的计算机图形中使用的例如基本几何形状等图元,这些图元被用作用于其他形状的构件块,并将这些图元存储在例如存储器页等缓冲区中。在一个实施例中,应用448可以声明它将如何使用该缓冲区,例如它将在缓冲区中存储什么类型的数据。诸如视频游戏等应用可使用动态缓冲区来存储用于化身的图元,并可使用静态缓冲区来存储诸如表示建筑物或森林等将不常改变的数据。继续驱动程序模型的描述,应用可用图元填充缓冲区并发出执行命令。当应用发出执行命令时,缓冲区可由内核模式驱动程序530追加到运行列表,并由图形内核调度器528来调度。例如应用或用户界面等每ー图形源可具有一上下文及其自己的运行列表。图形内核524可被配置成调度各个上下文来在图形处理单元112上执行。GPU调度器528可由逻辑处理器102执行,并且调度器528可向内核模式驱动器530发出命令来渲染缓冲区的内容。栈实例414可被配置成接收命令并通过网络将缓冲区的内容发送到客户端401,在客户端401处,缓冲区可由客户端的GPU来处理。
现在所示的是结合调用远程呈现服务的应用所使用的经虚拟化的GPU的操作的示例。參考图6,在一实施例中,虚拟机会话可由计算机100生成。例如,会话管理器416可由逻辑处理器102执行并且可初始化包括特定远程组件的远程会话。在该示例中,所派生的会话可包括内核418、图形内核524、用户模式显示驱动程序522和内核模式显示驱动程序530。用户模式驱动程序522可生成可被存储在存储器中的图元。例如,API 520可包括可被展示给诸如用户界面等用于操作系统400或应用448的进程的接ロ。进程可向API420发送高级API命令,如点列表(Point List)、线列表(Line List)、线带(Line Strip)、三角形列表(Triangle List)、三角形带(Triangle Strip)、或三角形扇(Triangle Fan)。API 520可接收这些命令,并将其转换成用于用户模式驱动程序522的命令,用户模式驱动程序522然后可生成顶点并将其存储在ー个或多个缓冲区中。GPU调度器528可运行并确定渲染缓冲区的内容。在该示例中,可捕捉对服务器的图形处理单元112的命令,并且可将缓冲区的内容(图元)经由网络接ロ卡114发送到客户端401。在一个实施例中,API可由各组件能与其接ロ的会话管理器416来展示,以确定虚拟GPU是否可用。在一实施例中,诸如图3或图4的虚拟机240等虚拟机可被实例化,并且虚拟机可担当用于操作系统400的执行的平台。在本例中,客操作系统220可具体化操作系统400。虚拟机可在通过网络接收到连接请求时被实例化。例如,父分区204可包括传输栈410的实例,并且可被配置成接收连接请求。父分区204可响应于连接请求连同包括实现远程会话的能力的客操作系统一起初始化虚拟机。连接请求然后可被传递给客操作系统220的传输栈410。在本例中,每ー远程会话可在由其自己的虚拟机执行的操作系统上实例化。在一个实施例中,可实例化虚拟机,并且可执行具体化操作系统400的客操作系统220。类似于上述内容,虚拟机可在通过网络接收到连接请求时被实例化。远程会话可由操作系统生成。会话管理器416可被配置成确定该请求是针对支持3D图形渲染的会话的,并且会话管理器416可加载控制台会话。除了加载控制台会话之外,会话管理器416可为该会话加载栈实例414’并将系统配置成捕捉由用户模式显示驱动程序522生成的图元。用户模式驱动程序522可生成可被捕捉并存储在传输栈410可访问的缓冲区中的图元。内核模式驱动程序530可将缓冲区追加到应用的运行列表,并且GPU调度器528可运行并确定何时对缓冲区发出渲染命令。当调度器528发出渲染命令时,该命令可由例如内核模式驱动程序530捕捉并经由栈实例414’发送到客户端401。GPU调度器528可执行并确定发出渲染缓冲区的内容的指令。在本例中,与渲染指令相关联的图元可经由网络接ロ卡114发送到客户端401。在一实 施例中,至少ー个内核模式进程可由至少ー个逻辑处理器112执行,且至少ー个逻辑处理器112可同步渲染存储在不同缓冲区中的顶点。例如,可类似于操作系统调度器来操作的图形处理调度器528可调度GPU操作。GPU调度器528可将单独的顶点缓冲区合并成正确的执行次序,使得客户端401的图形处理单元以允许它们被正确地渲染的次序来执行命令。诸如视频游戏等进程的一个或多个线程可映射多个缓冲区且每ー线程可发出绘制命令。顶点的标识信息、例如为每个缓冲区、每个顶点或缓冲区中的每批顶点生成的信息可以被发送给GPU调度器528。信息可与关联于来自相同的或其他进程并用于同步各个缓冲区的渲染的顶点的标识信息一起存储在表中。诸如文字处理程序等应用可执行并声明例如两个缓冲区——ー个用于存储用于生成3D菜单的顶点,而另ー个存储用于生成将填充该菜单的字母的命令。应用可映射缓冲区,并发出绘制命令。GPU调度器528可确定执行两个缓冲区的次序,使得菜单与字母一起以看上去令人满意的方式来渲染。例如,其他进程可以在相同或基本相似的时间发出绘制命令,并且如果顶点不是同步的,则来自不同进程的不同线程的顶点可能在客户端401上异步地渲染,从而使得所显示的最终图像看上去是混乱或混杂的。可使用批量压缩器450在将数据流发送到客户端401之前压缩图元。在一实施例中,批量压缩器450可以是栈实例414的用户模式(未示出)或内核模式组件,并且可被配置为在被发送到客户端401的数据流中查找相似的模式。在该实施例中,由于批量压缩器450从多个应用接收顶点流而不是接收多个API构造,因此批量压缩器450具有较大的顶点数据集来筛选,以便找到压缩机会。即,由于用于多个进程的顶点而非不同的API调用被遥控,因此存在批量压缩器450能在给定流中找到相似模式的更大机会。在一实施例中,图形处理单元112可被配置成对存储器使用虚拟寻址而不是物理地址。由此,被用作缓冲区的存储器页可从视频存储器分页到系统RAM或盘。栈实例414’可被配置成获得缓冲区的虚拟地址,并在捕捉到来自图形内核528的渲染命令时发送来自该虚拟地址的内容。可配置操作系统400,例如可加载各种子系统和驱动程序来捕捉图元并将其发送到诸如客户端401等远程计算机。类似于上述内容,会话管理器416可由逻辑处理器102执行并且包括特定远程组件的会话可被初始化。在该示例中,所派生的会话可包括内核418、图形内核524、用户模式显示驱动程序522和内核模式显示驱动程序530。图形内核可调度GPU操作。GPU调度器528可将单独的顶点缓冲区合并成正确的执行次序,使得客户端401的图形处理单元以允许它们被正确地渲染的次序来执行命令。用于实现上文所提及的分区的所有这些方案只是示例性实现,且此处没有任何东西应该解释为将本公开限制为任何特定虚拟化方面。虚拟化环境中的GPU图形处理单元或GPU是从微处理器卸下3D图形渲染这ー负担的专用处理器。GPU可以通过实现各种图元操作来提供图形渲染中常用的数学运算的有效处理。与主CPU相比,GPU可以提供更快的图形处理。GPU也可以称为图形加速器。图形应用可以使用应用编程接ロ(API)来配置图形处理流水线并且提供在GPU上执行应用专用顶点和像素处理的着色器程序。许多图形应用都使用诸如微软的DirectX或OpenGL标准之类的API与GPU对接。如上所述,虚拟化的运行方式是,通过给每个虚拟机呈现虚拟设备并且将其相应的操作在系统管理程序或虚拟机监控程序中进行组合来复用物理硬件,使得硬件资源在被使用的同时保持每个虚拟机都具有完整独立的硬件资源的感知。如所讨论的那样,虚拟机监控程序(VMM)或系统管理程序是可以将单个物理机器分区成多个虚拟机的软件系统。
·
虚拟机可以通过虚拟GPU设备驱动程序渲染成虚拟设备。实际的渲染可以通过如下方式完成使用另一虚拟机(父虚拟机)中或被许多客虚拟机共享的远程机(其充当图形服务器)上的单个或多个GPU控制器对渲染进行加速。父虚拟机上的图像捕捉组件可以检索桌面图像的快照。所捕捉的图像在传送到客户机之前可被任选地压缩和编码。压缩和编码可在父虚拟机或者子虚拟机或客虚拟机上发生。可以使用诸如远程桌面协议(RDP)之类的远程呈现协议来从远程客户端连接到虚拟机并用于传送桌面图像。通过这种方式,远程用户可以通过远程登陆体验诸如Windows Aeix)之类的图形用户界面以及执行3D应用和多媒体。虚拟化方案可以基于两种模式之一或二者。在一个实施例中,用户模式驱动程序可以提供在图形栈中较高的虚拟化边界,并且内核模式驱动程序可以提供在图形栈中较低的虚拟化边界。在一个实施例中,虚拟GPU子系统可以包括进ー步包括下列项目的显示驱动程序在虚拟机上执行的用户模式和内核模式组件;以及在父分区上执行的渲染/捕捉/压缩过程的渲染组件。在一实施例中,显示驱动程序可以是Windows显示驱动程序模型(WDDM)驱动程序。图10示出了用于将虚拟GPU实现为VDI场景中的组件的虚拟机场景的示例性实施例。在该示例中,VDI可以为每个子虚拟机1010提供3D图形能力,所述子虚拟机1010由服务器平台上的系统管理程序1020来实例化。每个子虚拟机1010都可以加载虚拟GPU驱动程序1040。可以给系统填充可从父分区或根分区1000访问的GPU加速器1030。父分区或根分区1000上的物理GPU 1030 (亦称GVM——图形虚拟机)可以被不同的子虚拟机1010共享以执行图形渲染操作。虚拟机GPU子系统可以虚拟化物理GPU并且为所述虚拟机提供经加速的渲染能力。在一个实施例中,虚拟GPU驱动程序可以是WDDM驱动程序1040。该驱动程序可以将相应的命令和数据遥控到父分区以用于渲染。可以是渲染/捕捉/压缩子系统1050 —部分的渲染进程可以在GPU上执行相应的渲染。对于每个虚拟机,可以在主分区或父分区1000上提供相应的渲染/捕捉/压缩组件1050。WDDM驱动程序允许视频存储器被虚拟化,其中视频数据被从视频存储器中按页传入系统RAM。根据运行在子虚拟机上的图形源子系统的请求,渲染/捕捉/压缩子系统可以适当地返回经压缩或未经压缩的屏幕更新。这些屏幕更新可以基于改变的矩形大小和内容。虚拟GPU驱动程序可以支持诸如VISTA和WINDOWS 7之类的常见操作系统。如所讨论的那样,一些实施例可以合并WDDM驱动程序。WDDM驱动程序运行得使得就好像GPU是被配置为基于存储在直接存储器访问(DMA)缓冲区中的命令来绘制视频存储器中像素的设备。DMA缓冲区信息可以被发送给GPU,GPU以提交的顺序异步地处理该数据。当每个缓冲区完成时,通知运行时并且提交另ー缓冲区。通过执行该处理循环,视频图像可以被处理并且最終在用户屏幕上渲染。本领域的技术人员能够认识到,所公开的主题在使用OpenGL或其他产品的系统中实现。
DMA缓冲区调度可以由内核模式中的GPU调度器组件来驱动。GPU调度器可以确定哪些DMA缓冲区以及以何种顺序被发送给GPU。用户模式驱动程序可以被配置为把由3D运行时API发出的图形命令转换成硬件专用的命令并且将这些命令存储在命令缓冲区中。然后,该命令缓冲区被提交给运行时,该运行时进而调用内核模式驱动程序。然后,内核模式驱动程序可以基于命令缓冲区的内容来构造DMA缓冲区。当DMA缓冲区该被处理时,GPU调度器可以调用内核模式驱动程序,该内核模式驱动程序处理当前将缓冲区提交给GPU硬件的所有细节。内核模式驱动程序可以与显示设备的物理硬件对接。用户模式驱动程序包括硬件专用的知识,并且可以构建硬件专用的命令缓冲区。然而,用户模式驱动程序不直接与硬件对接,并且可以在该任务方面依靠内核模式驱动程序。内核模式驱动程序可以对显示硬件进行编程,并且致使显示硬件执行DMA缓冲区中的命令。在一个实施例中,与主分区或父分区的所有交互都可以通过内核模式驱动程序来处理。内核模式驱动程序可以将DMA缓冲区信息发送给父分区,并且在DMA缓冲区已经被处理时可以进行到内核模式API运行时中的必要回调。当运行时创建图形设备上下文吋,运行时可以调用用于创建持有渲染状态集合的图形设备上下文的函数。在一个实施例中,可以在第一虚拟图形设备被创建时创建到父分区的单个内核模式连接。可以与用户模式设备协调来创建随后的图形设备,并且可以由用户模式设备来处理到这些设备的父分区的连接。在另ー实施例中,到主分区或父分区的连接可以在每当内核模式驱动程序创建新设备时创建。连接上下文可以创建并存储在每设备的数据结构中。该连接上下文通常可以包括套接字和I/O缓冲区。由干与GVM的所有通信都经过内核模式驱动程序,因此该每设备的连接上下文可以有助于保证命令被路由到主分区或父分区上的正确设备。在一个实施例中,可以在主分区或父分区上为用户模式设备的每个运行实例提供単独的线程。该线程可以在应用在子分区上创建虚拟设备时被创建。可以提供附加的渲染线程来处理源自子分区上的内核模式的命令(例如,内核模式呈现和鼠标指针活动)。在一个实施例中,父分区上的渲染线程的数目可以保持在最小值以匹配CPU核的数目。当管理GPU时可以执行附加的任务。例如,除了提供图元以外,还可以维护GPU的硬件上下文。可以配置像素着色器、顶点着色器、剪辑平面、剪裁矩形以及影响图形流水线的其他设定。用户模式驱动程序还可以确定这些设定的逻辑值以及如何将这些值翻译成物
理设定。在一个实施例中,用户模式驱动程序可以负责构造硬件上下文和命令缓冲区。内核模式驱动程序可以被配置为将命令缓冲区转换成DMA缓冲区,并且在由GPU调度器进行调度时将该信息提供给GPU。虚拟GPU可以在若干用户模式和内核模式组件的范围内实现。在一个实施例中,可以将虚拟机传输(VMT)用作在所有这些组件的范围内发送和接收请求的协议。VMT可以提供跨两个或更多个分区的模块之间的通信。由于在每个分区中存在在该所述分区的范围内通信的多个组件,因此可以在这些组件之间定义公共的传输。图7描绘了传统驱动程序中的抽象层以及虚拟GPU驱动程序的一个示例性实施例中的抽象层。如传统GPU 700那样,父分区600可以被看成是位于驱动程序栈710的底部。父分区600表示图形硬件,并且就好像GPU存在于虚拟机中那样抽象出传统GPU 700的接ロ。虚拟GPU驱动程序由此在驱动程序模型的限制下提供对父分区的访问。
显示驱动程序740可接收GPU专用的命令725,并且可以通过硬件接ロ被写成硬件专用的并且控制GPU 700。显示驱动程序740可以对I/O端ロ进行编程,访问经存储器映射的寄存器,以及以其他方式与GPU设备的低级操作对接。虚拟GPU驱动程序750可以接收父分区专用的命令735并且可以被写入由父分区600所展示的特定接ロ。在一个实施例中,父分区可以是在不同机器上运行的Direct3D应用,并且父分区可以充当本机地执行Direct3D命令的GPU。在该实施例中,用户模式显示驱动程序730从Direct3D运行时705接收的命令可以以未经修改的形式被发送给父分区600。如图8所示,在一个实施例中,子分区800上的Direct3D命令可以在用户模式驱动程序820和内核模式驱动程序830中被编码,并且与数据參数一起被发送给父分区810。在父分区810上,组件可以通过使用硬件GPU来渲染所述图形。在图9中所示的另ー实施例中,子分区800上的Direct3D命令可以发送给用户模式驱动程序820和内核模式驱动程序830。这些命令可以在内核模式驱动程序830中被解释/调整,并且被放置在内核模式中的DMA缓冲区中。父分区810可以提供虚拟GPU功能,并且命令缓冲区可以由用户模式驱动程序820来构造。命令缓冲区信息可以被发送给内核模式驱动程序830,在那里,它们可以被转换成DMA缓冲区并且提交给父分区810以供执行。在父分区上,组件可以在硬件GPU上渲染所述命令。当应用请求执行图形处理函数时,可以使相应的命令和视频数据对命令解释器函数可用。例如,独立于硬件的像素着色器程序可以被转换成硬件专用的程序。经翻译的命令和视频数据可以被放置在父分区工作队列中。然后,该队列可以被处理,并且待处置的DMA缓冲区可以被发送给父分区以供执行。当父分区接收到该命令和数据时,父分区可以使用Direct3D API来将该命令/数据转换成对父分区的图形硬件特定的形式。因此,在子分区中可以配备如下的GPU驱动程序该GPU驱动程序在概念上将每个虚拟机看成是真实的图形驱动程序,但是在现实中致使虚拟机命令被路由到父分区。在父分区上,图像可以使用真实的GPU硬件来渲染。在图10中所示的一个说明性的实施例中,可以向虚拟机展示合成3D视频设备,并且虚拟机可以搜索与该视频设备匹配的驱动程序。可以配备与该设备匹配的虚拟图形显示驱动程序,该驱动程序可以由虚拟机找到和加载。一旦被加载,则虚拟机就可以确定其可以执行3-D任务并且将该设备能力展现给可以使用经虚拟化的设备的函数的操作系统。由虚拟机所接收的命令可以调用虚拟设备驱动程序接ロ。翻译机制可以将设备驱动程序命令翻译成DirectX命令。因此,虚拟机认为其具有对调用DDI和设备驱动程序的真实GPU的访问。到来的设备驱动程序调用被接收和翻译,数据被接收,并且在父分区侧,DDI命令可以被重新创建回到DirectX API以在虚拟机上渲染本应渲染的东西。在一些实例中,DDI命令到DirectX API命令的转换可以是低效的。在其他实施例中,可以绕开DirectX API,并且可以将DDI命令直接转换成主分区上的DDI命令。在该实施例中,DirectX子系统可以被配置为允许该绕开。在另ー实施例中,仅可建立到父分区的ー个连接,并且与图形设备上下文的通信可以在ー个通信信道上复用。尽管通常存在图形设备从子分区到父分区的一一映射,但是在该实施例中,该通信信道不与任何特定图形设备相关联。可以在发送去往特定设备的命令以前发送“选择设备”令牌。该“选择设备”令牌指示所有随后的命令都应当被路由到特定的图形设备。当应当将图形命令发送给不同设备时,可以发送随后的“选择设备”令牌。可替代地,在另ー实施例中,在父分区上可以仅有ー个图形设备可用。在此,可以实现设备从子分区到父分区上的设备的多对一映射。可以在发送与特定图形设备相关联的命令以前发送正确的GPU状态。在该场景中,GPU状态不是由父分区而是由子分区来维护。在该实施例中,创造了在子分区上存在多个图形设备上下文的错觉,但是在现实中,所有图形设备上下文都是由父分区上的ー个图形设备上下文来处理的,该图形设备上下文在处理与给定子分区图形设备上下文相关联的命令以前接收正确的GPU状态。因此在各个实施例中,GPU可以被抽象,并且虚拟机上的设备驱动程序调用可以被·发送给父分区,在那里,命令被翻译以使用图形服务器的API。在发送给父分区以前,设备驱动程序调用可以在它们被发送给父分区并且被转换成应用级API以前被转换成中间命令和数据。中间阶段可以是实施方式特定的,并且取决于所使用的特定硬件。使用上述技术,可以合成稳定的虚拟GPU,并且只要位于下层的特定的某件硬件满足了最小需求,则给定的虚拟机就不需要关心该底层设备。例如,在一种情况下,父分区可以使用NVIDIA GPU,并且在另ー情况下,父分区可以使用ATI设备。在两种情况任一中,只要底层GPU提供预定的最小的ー组能力,则就可以展示一组虚拟能力。在虚拟机上运行的应用就好像WDDM驱动程序具有稳定的ー组特性那样运行。虚拟机可以被保存并且迁移到使用不同GPU的另一系统,而不影响使用GPU服务的应用。在上述GPU场景中,可以使用3D图形。3D图形使用通过对三维物体进行线框表示的建模,这些三维物体可以使用各种3D渲染技术被显示成ニ维图像。这样的技术例如可以使用3D空间中由诸如三角形之类的几何实体所连接的点的集合来表示3D物体。当建立视频应用中的画面时,可以在生成静止图像或动画时考虑到各个虚拟物体、观众的视角、色彩、以及照明。通常,3D模型的顶点被着色,并且该色彩然后可以在渲染期间在该模型表面的范围内进行插值。ー种用于将色彩信息添加到3D模型的方法是通过使用纹理映射将2D纹理图像应用于该模型的表面来进行的。纹理可以将细节、表面纹理、或色彩添加到计算机生成的图形或3D模型。顶点几何形状信息(顶点缓冲区)可以包括纹理坐标,该纹理坐标指示如何将纹理图像图的点映射到3D模型的表面。纹理可以映射到诸如3D建模中常用的三角形之类的形状的表面。此外,着色器可以执行复杂计算以从任意位置内取任何数目的纹理。3D应用通常需要大量的纹理数据来产生良好质量的画面。该大量的纹理进而需要存储器中和存储介质(例如硬盘或光盘)上的大量的空间。子分区与父分区之间共享的存储器区域如上所述,当虚拟化图形硬件时,纹理或其他数据可能需要大量的视频存储器。例如,当在虚拟机中运行3D应用吋,大量图形数据可能被推送给视频驱动程序。此外,实际的渲染将在父分区上进行,并且因此图形数据必须从子分区传输给父分区。
作为附加的因素,图形数据通常必须不仅仅从子分区的内核模式中传输给父分区上的内核模式,因为子分区的渲染器使用父分区上的用户模式应用。因此,父分区上的用户模式应用需要向子分区中的内核模式发送命令,该内核模式然后需要将数据传输给父分区中的用户模式应用。图形数据是期望在虚拟机分区之间传输大量数据的场景的ー个说明性实例。在此所公开的实施例适用于任何类型的数据,并且不限于图形数据的传输。上述需要 可以通过开放客机中的内核模式与主机上的用户模式之间的共享存储器通道来解決。这样的传输打破了多个边界,其中共享的存储器必须被重新映射和重新分配以便让用户模式应用访问客机中的内核模式试图渲染的数据。然而,一些解决方案可能是非常低效的。例如,ー些系统可以提供主机上的定制内核模式服务,该定制内核模式服务与客机上的内核模式服务交谈。于是,主定制内核模式服务需要将内核模式存储器翻译成用户模式存储器,并且与主机上的用户模式应用交谈。这可能是非常昂贵和麻烦的。例如,一些系统可以首先在子分区中的内核模式与父分区中的内核模式之间复制存储器。然后,这些数据需要从父分区中的内核模式复制到用户模式区域。在各个实施例中,公开了ー种用于创建在父分区和子分区中的模式之间共享的存储器孔径(aperture)的机制。该共享的存储器孔径可以创建在客机与任何主机之间的任何存储器模式之间。例如,共享的存储器孔径可以创建在子分区上的内核模式与父分区上的用户模式之间。通过使用这样的机制,可以提供直接的桥,例如从子分区中的内核模式到父分区中的用户模式的桥。这样的桥可以为将从子分区中的内核或用户模式传递给父分区中的所期望的目的地模式(内核或用户)的数据提供最短路径,并且反之亦然。如下面将进ー步详述的那样,在一些实施例中,当创建共享的存储器孔径时,可以商定该孔径的大小。此外,在一些实施例中,该孔径可以通过充分利用现有API来建立。虚拟机总线(VMBus)可以是提供用于在虚拟服务提供者(VSP)与虚拟服务消费者(VSC)端点之间建立通道的机制的一组库和驱动程序。VMBus允许VSP将虚拟设备发布到在子分区内运行的虚拟机中。在子分区中,VMBus提供总线驱动程序,该总线驱动程序展示被发布到该虚拟机中的每个合成虚拟设备。然后,在虚拟机中运行的客OS为该合成设备识别和安装合适的设备驱动程序栈。VMBus库还提供用于在子分区与父分区之间共享存储器的机制,并且协助多个分区范围内的虚拟中断递送。VSC可以提供与虚拟化系统(例如Hyper-V)组件的直接接ロ,并且建立到在虚拟机中运行的合成虚拟设备的VMBus通道。VSP是在父分区中的主OS上运行的内核模式驱动程序。VSP提供到虚拟机中的VMBus通道,并且如果存在接受通道供应的合成设备VSC组件,则该通道被创建。VSP和VSC充当VMBus通道上的端点,并且使用上行(upstream)环形缓冲区和下行(downstream)环形缓冲区进行通信。这些环形缓冲区可以用于交换控制分组和小的数据分组。如果需要传输较大量的数据,则可以建立共享的存储器缓冲区。在父分区中运行的VSP实例可以使用运行特定合成设备的各个虚拟机中的VSC组件管理所建立的所有通道。VSC可以是在虚拟机中运行的合成虚拟设备的一部分,并且实现该合成设备与其他Hyper-V组件之间的接ロ。VSC接受由其相应VSP作出的VMSBus通道供应,并且使用该通道来交換配置和状态管理分组。VSC可以建立到在父分区中运行的相应合成设备组件的共享存储器通道。在一个实施例中,共享存储器孔径可以通过库来创建。该库可以具有多个API,这些API允许创建和删除共享存储器孔径以及读取和写入共享存储器孔径。该库可以置入到希望使用共享存储器孔径的任何组件中。该库可以与父分区和子分区上的相应合成设备驱动程序一起工作以便通过VMBus (或任何子分区通信系统)进行通信以建立连接。在一实施例中,在子分区引导以后,子分区可以通过分配存储器、创建映射以及请求到父分区的连接来作出对父分区的请求。父分区接收该连接请求,确认该连接请求并且验证该映射。在该验证完成以后,父分区将子分区存储器映射到已经请求了连接之处的主存储器。父分区和子分区可以使用来自该库的读取和写入API来读取和写入存储器区域。 可以创建任何大小的存储器区域(其受到父存储器和子存储器的限制)。在上述说明性的虚拟化系统的ー些的上下文中,当新的虚拟机启动时,可以由桌面窗ロ管理器代理来产生桌面窗ロ管理器进程的实例。该桌面窗ロ管理器进程包含渲染组件,该渲染组件从相应虚拟机中的经虚拟化的GPU组件接收D3D命令和数据流。该桌面窗ロ管理器进程使用主OS Direct 3D软件组件和由主OS管理的物理GPU来渲染D3D流。该桌面窗ロ管理器的捕捉组件确定每个所渲染的帧的哪些部分已经改变,并且对这些帧差异进行编码。然后,捕捉组件将经编码的数据传递给用户模式终端服务组件的图形源模块。用户模式終端服务组件在子分区中的虚拟机的客OS中运行。用户模式終端服务组件接受使用远程呈现连接从客户端计算机的单用户登陆。该用户模式终端服务组件创建用户会话并且处理各个设备在虚拟桌面与客户端计算机之间的重定向。共享的存储器通道可以用于接收用于远程虚拟桌面和应用的经编码的帧差异显示数据,并且通过远程呈现连接发送给客户端计算机上的終端服务客户端软件,在那里,该数据被解码和显示。桌面窗ロ管理器进程渲染从设备内核模式和用户模式驱动程序组件接收的D3D命令和数据流。从经虚拟化的GPU驱动程序被发送给桌面窗ロ管理器进程中的渲染模块的D3D命令和数据流、以及由捕捉模块发送给用户模式终端服务组件中的图形源的经编码帧差异数据需要高性能传输通道。该需要由共享存储器传输通道库来解决,其提供共享的存储器传输机制。共享存储器传输通道库提供允许创建共享存储器传输通道的API。共享存储器传输通道库与VSC和VSP组件交互以映射所分配的缓冲区,使得所述缓冲区在运行在子分区和根分区中的组件之间共享。可以提供该库的内核模式版本和用户模式版本。可以使用打开函数来创建在子分区中的客OS中运行的软件组件和在主OS中运行的桌面管理器进程实例中的通道。一旦已经创建了该通道,则就可以使用发送(Send)和接收(Receive)函数以二者任一方向来发送数据。该通道可以使用关闭(Close)函数来关闭。当打开(Open)函数被调用时,共享存储器传输通道库确定其是在客机还是主机上运行。如果其在客机上运行,则打开(Open)函数分配用于实施两个循环缓冲区和共享存储器中的控制状态的存储器缓冲区。共享存储器传输通道库打开VSC设备对象并且将DeviceIoControl消息发送给VSC驱动程序,该DeviceIoControl消息请求在子分区中分配的用户模式或内核模式缓冲区与链接到桌面窗ロ管理器进程的共享存储器传输通道库中的根分区缓冲区共享。VSC驱动程序为该缓冲区获得存储器描述符列表(MDL),并且将该页锁定到客OS存储器空间中。VSC驱动程序将MDL转换成客物理地址描述符列表(GPADL),该客物理地址描述符列表描述已经由系统管理程序分配给存储器缓冲区的实际真实系统物理页。VSC通过VMBus通道将请求VSP完成共享存储器映射操作的分组发送给VSP。VSC驱动程序将其从VSC驱动程序接收的GPADL转换成主OS MDL并且将页锁定 在系统存储器中。桌面窗ロ管理器进程中的渲染和捕捉模块对链接到桌面窗ロ管理器进程中的共享存储器传输通道库执行打开(Open)函数调用。共享存储器传输通道库确定其运行在主机上,并且保留与在客机上分配的缓冲区大小相同的缓冲区,并且发送等待来自客机的通道打开请求的DeviceloControl。VSP使用共享存储器传输通道库已经使用VirtualAlloc函数进行保留的存储器缓冲区的虚拟地址,并且将这些保留的页映射到来自客分区的已经被分配和锁定的系统页,由此共享该存储器。VSP使用唯一的标识符来将来自客机的通道打开请求映射到桌面窗ロ管理器进程中的合适的监听模块。虚拟机分区ID用于确定客虚拟机与合适的桌面窗ロ管理器实例的对应关系。发送(Send)和接收(Receive)调用通过共享的存储器缓冲区来传输数据,并且这些细节对调用者是透明的。接收(Receive)函数可以基于打开(Open)函数中的接收模式)參数在受阻塞或非阻塞的模式下运行。可替代地,可以使用EventSelect (事件选择)函数来允许接收如下数据所述数据将被用信号通知使得调用者可以等待单个或多个事件,并且然后在所述事件之一发生时用信号通知该调用者。当关闭(Close)操作被调用吋,VSC和VSP被调用并且共享存储器被解锁、解除映射和释放。当在对方端点上进行任何随后的调用时,通道关闭返回状态被返回。该端点然后调用关闭(Close)来完成关闭操作。共享存储器传输通道库所使用的循环缓冲区和控制存储器可以由共享存储器传输通道库来分配。库用户可能除了间接通过发送(Send)和接收(Receive)函数以外不具有对该内部存储器的访问。这些函数可以具有客户端缓冲区指针和字节计数參数。库将来自发送缓冲区的数据复制到其内部共享存储器缓冲区中,并且然后将该数据复制到目的地接收缓冲区中。如果发送缓冲区大于内部缓冲区,则可以执行多次传输以发送所有数据。发送方必须保证由发送缓冲区指针和字节计数所指定的字节处于其发送缓冲区中。接收方将在每次对接收(Receive)的调用中接收由字节计数所指定的数量的数据。接收进程负责保证其缓冲区指针和字节计数不导致接收缓冲区溢出。两个通道端点控制它们通过该通道传输的数据的格式。共享存储器传输通道库可以被配置为使得其不检查所传输的数据的内容。两个端点可以负责在通道被打开时交換版本分组,以及验证两个端点可以合适地彼此互操作。如果该检查失败,则所述端点可以用指示不兼容版本的状态来调用关闭(Close)函数,并且桌面窗ロ管理器进程可以发送指示失败的状态。VSP向系统通知该失败,并且虚拟机建立将失败。因此,提供了基于共享存储器的传输通道API表面,使得可以利用各种组件来在子虚拟机分区中运行的组件与在根分区中运行的桌面窗ロ管理器进程的相应实例之间传输数据。共享存储器传输通道库允许用更高性能的传输解决方案来代替当前的套接字传输。共享存储器传输通道可以被其他VDI组件用于增强组件间数据传输性能。共享存储器传输通道利用虚拟机间共享的存储器页来提供双向数据传输能力。内部通道设计提供了通道端点之间的上行和下行循环缓冲,并且管理数据在发送和接收端点之间的流式传输。通道端点起源于子虚拟机分区,并且终止于在根分区中运行的相应桌面窗ロ管理器进程。子虚拟机端点可以起源于内核模式驱动程序、用户模式驱动程序以及用户模式終端服务组件中的图形源模块。用户模式组件可以使用共享存储器传输通道库来创建数据以及通过共享存储器传输通道的实例来传输数据。下面描述共享存储器传输通道库的示例性函数。这些组件可以使用打开(Open)函数打开通道。该通道起源于客虚拟机以允许在客虚拟机中进行共享存储器缓冲区分配。如果调用打开(Open)的组件在客虚拟机中运行,则共享存储器传输通道库分配存储器缓冲区并且将DeviceloControl发送给VSC驱动程序·以建立共享的存储器缓冲区。如果打开(Open)函数是由与子分区中运行的虚拟机相对应的桌面窗ロ管理器进程调用的,则其监听将被客虚拟机中的组件打开的通道。桌面窗ロ管理器进程保留缓冲区并且将DeviceloControl发送给VSP以监听通道创建。当客虚拟机组件打开该通道吋,VSC通过VMBus通道来向VSP发送消息。VSP将客虚拟机缓冲区和主缓冲区映射到相同的系统物理页,并且响应从桌面窗ロ管理器进程对通道DeviceloControl的监听。打开(Open)函数返回句柄(handle),该句柄在调用其他共享存储器传输通道库函数时被用于指定该特定通道实例。关闭(Close)函数关闭通道,这致使所有共享存储器被解除映射并被释放。发送(Send)函数可以用于将指定数目的字节发送给对方端点。接收(Receive)函数可以用于接收数据。接收(Receive)函数可以在阻塞性或非阻塞性的模式二者任一中运行,所述模式可以由打开(Open)函数中的接收模块參数来指定。EventSelect (事件选择)函数可以用于指定如下事件该事件在指定数量或任何数量的数据已经被接收到的情况下可以被用信号通知。这允许通道所有者等待接收事件用信号通知该数据的存在。转储清除(Flush)函数可以用于在已经被发送的所有数据都被对方端点接收以前一直进行阻塞。共享存储器传输通道可以用于在子分区中运行的软件组件与在根分区中运行的相应桌面窗ロ管理器进程之间创建多个持久的通道。在子分区中运行的组件在它们启动时打开通道实例。桌面窗ロ管理器进程具有如下线程该线程等待在子分区组件启动时从所述子分区组件建立新通道连接。一旦被创建,则通道就保持为持久的,直到组件被关闭或者虚拟机被关闭。共享存储器传输通道库监控通道,并且检测该通道是否停止运行或是否任一方关闭该通道。如果客虚拟机组件关闭通道,则共享存储器传输通道库通知对方端点,并且将关闭通道DeviceloControl发送给VSC驱动程序以对存储器进行映射解除和释放。当被通知通道被关闭时,桌面窗ロ管理器进程清除其状态并且调用关闭(Close)函数。该函数将关闭通道DeviceloControl发送给VSP驱动程序。VSP与客虚拟机中的VSC协调以对存储器进行映射解除和释放。如果关闭操作由客虚拟机组件发起,则这被认为是正常通道关闭。如果桌面窗ロ管理器进程发起通道关闭,则这可以被认为是通道丢失情況。这可能在桌面窗ロ管理器进程以任何原因被終止时发生。在这种情况下,通道丢失状态被传送给已经打开与终止的桌面窗ロ管理器进程实例之间的通道的客虚拟机组件。客虚拟机组件现在将具有不一致的状态,并且必须将自自身复位并且在桌面窗ロ管理器进程被代理进程重启时重建通道连接。
类似的情况可能在虚拟机恢复其执行的操作时存在。桌面窗ロ管理器进程可能在保存虚拟机操作期间不保存所有当前的D3D状态。当虚拟机被恢复时,桌面窗ロ管理器进程被重启,并且监听将从客虚拟机创建的通道。客虚拟机被完全保存和恢复,使得组件必须被复位并且重建到桌面窗ロ管理器进程的通道。共享存储器传输通道库调用打开(Open)函数中指定的错误处理程序,或者返回CT_VMT_CHANNEL_LOST返回状态。当组件接收通道丢失通知时,其必须将其自身复位并且重建该通道。图11描绘了用于在虚拟机分区之间传输数据的示例性操作过程,该过程包括操作1100、1102、1104、1106和1108。參考图11,操作1100开始该操作过程,并且操作1102示出了 由第一虚拟机分区向第二虚拟机分区发送针对存储器分配的请求,其中该分配指示用于所传输的数据的最大缓冲区大小。操作1104示出了 映射所请求的存储器分配。操作1106示出了 在第一虚拟机分区和第二虚拟机分区中的模式之间的共享存储器孔径中分配请求的存储器。操作1108示出了 使用共享存储器孔径在第一虚拟机分区与第二虚拟机分区之间传输数据。图12描绘了用于如上所述在虚拟机分区之间传输数据的示例性系统。參考图12,系统1200包括处理器1210和存储器1220。存储器1220进ー步包括计算机指令,这些指令被配置为在虚拟机分区之间传输数据。框1222示出了 由第一虚拟机分区向第二虚拟机分区发送针对存储器分配的请求,其中该分配指示用于所传输的数据的最大缓冲区大小。框1224示出了 映射所请求的存储器分配。框1226示出了 在第一虚拟机分区和第二虚拟机分区中的模式之间的共享存储器孔径中分配请求的存储器。框1228示出了 使用共享存储器孔径在第一虚拟机分区与第二虚拟机分区之间传输数据。上文所提及的方面中的任何ー个方面都可以以方法、系统、计算机可读介质或任何类型的产品来实现。例如,计算机可读介质可以在其上存储用于在虚拟机分区之间传输数据的计算机可执行指令。这样的介质可以包括指令的第一子集,其用于由子虚拟机分区向父虚拟机分区发送针对存储器分配的请求,其中该分配指示用于所传输的数据的最大缓冲区大小;指令的第二子集,其用于映射所请求的存储器分配;指令的第三子集,其用于在子虚拟机分区和父虚拟机分区中的模式之间的共享存储器孔径中分配请求的存储器;以及指令的第四子集,其用于使用共享存储器孔径在子虚拟机分区与父虚拟机分区之间传输数据。本领域技术人员可以理解,可以使用附加指令集来捕捉此处所公开的各其他方面,且根据本发明,四个目前所公开的指令子集可以在细节方面不同。上述详细描述通过示例和/或操作图阐明了系统和/或过程的各种实施例。就这些框图和/或示例包含一个或多个功能和/或操作而言,本领域技术人员将理解,这些框图或示例中的每一功能和/或操作都可由各种各样的硬件、软件、固件、或实际上其任意组合来単独地和/或共同地实现。应该理解,此处描述的各种技术可以结合硬件或软件,或在适当时结合两者的组合来实现。因此,本发明的方法和装置或其某些方面或部分,可以采用包含在诸如软盘、CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的程序代码(S卩,指令)的形式,其中,当程序代码被加载至诸如计算机等机器并由其运行时,该机器成为用于实现本发明的装置。在程序代码在可编程计算机上执行的情况下,计算设备通常包括处理器、该处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少ー个输入设备、以及至少ー个输出设备。一个或多个程序可以例如,通过使用API、可重用控件等来实现或利用结合本发明描述的过程。这样的程序优选地用高级过程语言或面向对象编程语言来实现,以与计算机系统通信。然而,如果需要,该程序可以用汇编语言或机器语言来实现。在任何情形中,语言可以是编译语言或解释语言,且与硬件实现相结合。尽管具体地參考其优选实施例来示出并描述了本发明,但本领域的技术人员可以 理解,可以作出形式和细节上的各种改变而不脱离所附权利要求书中所述的本发明的范围。此外,尽管本发明的各元素可以用单数来描述或要求保护,但构想了复数,除非明确地规定了限于单数。
权利要求
1.一种用于在虚拟机分区之间传输数据的方法,该方法包括 由第一虚拟机分区向第二虚拟机分区发送(1102)针对存储器分配的请求,其中该分配指示用于所传输的数据的最大缓冲区大小; 映射(1104)所请求的存储器分配; 在第一虚拟机分区和第二虚拟机分区中的模式之间的共享存储器孔径中分配(1106)请求的存储器;以及 使用该共享存储器孔径在第一虚拟机分区与第二虚拟机分区之间传输(1108)数据。
2.如权利要求I所述的方法,其特征在于,第一虚拟机分区是子分区(800),并且第二虚拟机分区是父分区(810)。
3.如权利要求2所述的方法,其特征在于,所述模式包括内核模式(830)或用户模式(820)任一。
4.如权利要求I所述的方法,其特征在于,在第一分区与第二分区之间商定该最大缓冲区大小。
5.如权利要求3所述的方法,其特征在于,进一步包括打开VSC设备对象并且将控制消息发送给VSC驱动程序,该控制消息请求在子分区中分配的用户模式或内核模式缓冲区与父分区缓冲区共享。
6.如权利要求8所述的方法,其特征在于,VSC驱动程序为在子分区客OS存储器空间中所分配的缓冲区创建存储器描述符列表(MDL)。
7.如权利要求9所述的方法,其特征在于,VSC驱动程序将MDL转换成客物理地址描述符列表(GPADL),该客物理地址描述符列表(GPADL)描述已经由系统管理程序分配给该存储器缓冲区的系统页。
8.如权利要求I所述的方法,其特征在于,进一步包括通过对该共享存储器孔径进行解锁、映射解除和释放来关闭该共享存储器孔径。
9.一种用于在虚拟机分区之间传输数据的系统(100),包括 包括至少一个处理器的计算设备; 在所述系统运行时通信地耦合到所述处理器的存储器,所述存储器具有存储于其中的计算机指令,所述计算机指令在由所述至少一个处理器执行时致使 由第一虚拟机分区向第二虚拟机分区发送(1222)针对存储器分配的请求,其中该分配指示用于所传输的数据的最大缓冲区大小; 映射(1224)所请求的存储器分配; 在第一虚拟机分区和第二虚拟机分区中的模式之间的共享存储器孔径中分配(1226)请求的存储器;以及 使用该共享存储器孔径在第一虚拟机分区与第二虚拟机分区之间传输(1228)数据。
10.一种其上存储有计算机可执行指令的计算机可读存储介质,所述计算机可执行指令用于在虚拟机分区之间传输数据,所述指令用于 由子虚拟机分区向父虚拟机分区发送针对存储器分配的请求,其中该分配指示用于所传输的数据的最大缓冲区大小; 映射所请求的存储器分配; 在子虚拟机分区和父虚拟机分区中的模式之间的共享存储器孔径中分配请求的存储器;以及 使用该共享存储器孔径在子虚拟机分区与父虚拟机分区之间传输数据。
全文摘要
本发明涉及子分区与父分区之间的共享存储器。描述了一种用于创建在父分区和子分区中的模式之间的共享存储器孔径的机制。该共享的存储器孔径可以创建在客机与任何主机之间的任何存储器模式之间。例如,共享的存储器孔径可以创建在子分区上的内核模式与父分区上的用户模式之间。
文档编号H04L29/08GK102707986SQ20111031081
公开日2012年10月3日 申请日期2011年9月30日 优先权日2010年9月30日
发明者B·S·波斯特, E·考克斯 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1