用于识别供选择性地传输到远程显示装置的绘图图元的方法和系统

申请号 CN201010151139.8 申请日 2010-04-20 公开(公告)号 CN101873308A 公开(公告)日 2010-10-27
申请人 威睿公司; 发明人 达斯汀·拜福德; 安东尼·坎农; 拉梅什·塔尔兰;
摘要 远程桌面 服务器 包括显示 编码器 ,所述显示编码器维持次 帧 缓冲区,所述次帧缓冲区包含要被编码和传送到远程客户端显示装置的显示数据,并且,所述显示编码器维持产生次帧缓冲区中的被更新的显示数据的显示图元列表。显示编码器向视频适配器 驱动器 提交 请求 以接收绘图图元列表,所述视频适配器驱动器接收并 跟踪 绘图图元,当绘图图元被执行时,更新主帧缓冲区。
权利要求

1.一种方法,在具有用于存储显示数据的主缓冲区和使用次帧缓冲区以向远程客户终端传送显示数据的显示编码器服务器中,所述方法用于减少要被传送到所述远程客户终端的显示数据量,所述方法包括:
当对所述主帧缓冲区执行了绘图图元时,更新包括已完成的绘图图元列表的队列;
从所述显示编码器接收针对与所述次帧缓冲区中的被更新的显示数据对应的绘图图元列表的请求
从所述队列提取所述被请求的绘图图元列表;以及
将所述被请求的绘图图元列表提供到所述显示编码器,其中,根据带宽使用评估,所述显示编码器向所述远程客户终端选择性地传送所述被请求的列表中的绘图图元,优先于传送所述次帧缓冲区中与所述绘图图元对应的被更新的显示数据。
2.如权利要求1所述的方法,还包括从所述队列中清除所述被请求的列表中的每个条目的步骤。
3.如权利要求1所述的方法,其中,所述请求包括与更新在所述次帧缓冲区中的显示数据对应的最后绘图图元的序号。
4.如权利要求3所述的方法,其中,所述队列中的每个条目包括序号和绘图图元。
5.如权利要求4所述的方法,其中,所述提取步骤还包括识别所述队列中的序号最多到所述请求的序号以及包括所述请求的序号的每个条目。
6.如权利要求1所述的方法,其中,所述主帧缓冲区是由虚拟视频适配器分配的缓冲区,并且所述队列由与所述虚拟视频适配器通信的视频适配器驱动器分配。
7.如权利要求6所述的方法,其中,所述视频适配器驱动器是在所述服务器上被实例化的虚拟机的客户操作系统的组件。
8.如权利要求1所述的方法,还包括在更新了所述队列后,启动对所述显示编码器的中断的步骤。
9.一种包括指令的计算机可读介质,所述指令在被具有用于存储显示数据的主帧缓冲区以及使用次帧缓冲区来向远程客户终端传送显示数据的显示编码器的服务器的处理单元执行时,通过执行以下步骤来使得所述处理单元减少要被传送到所述远程客户终端的显示数据量:
当对所述主帧缓冲区执行了绘图图元时,更新包括已完成的绘图图元列表的队列;
从所述显示编码器接收针对与所述次帧缓冲区中的被更新的显示数据对应的绘图图元列表的请求;
从所述队列提取所述被请求的绘图图元列表;以及
将所述被请求的绘图图元列表提供到所述显示编码器,其中,根据带宽使用评估,所述显示编码器向所述远程客户终端选择性地传送所述被请求的列表中的绘图图元,优先于传送所述次帧缓冲区中与所述绘图图元对应的被更新的显示数据。
10.如权利要求9所述的计算机可读介质,其中,所述处理单元还执行从所述队列中去掉所述被请求的绘图图元列表的步骤。
11.如权利要求9所述的计算机可读介质,其中,所述请求包括与更新在所述次帧缓冲区中的显示数据对应的最后绘图图元的序号。
12.如权利要求11所述的计算机可读介质,其中,所述队列中的每个条目包括序号和绘图图元。
13.如权利要求12所述的计算机可读介质,其中,所述提取步骤还包括识别所述队列中的序号最多到所述请求的序号以及包括所述请求的序号的每个条目。
14.如权利要求9所述的计算机可读介质,其中,所述主帧缓冲区是由虚拟视频适配器分配的缓冲区,并且所述队列由与所述虚拟视频适配器通信的视频适配器驱动器分配。
15.如权利要求14所述的计算机可读介质,其中,所述视频适配器驱动器是在所述服务器上被实例化的虚拟机的客户操作系统的组件。
16.如权利要求9所述的计算机可读介质,其中,所述处理单元还执行在更新了所述队列后,启动对所述显示编码器的中断的步骤。
17.一种计算系统,所述计算系统被配置成减少要被传送到远程客户终端的显示数据量,所述计算系统包括:
系统存储器,包括:(1)用于存储显示数据的主帧缓冲区,(2)维持绘图图元的队列的视频适配器驱动器,其中所述队列的每个条目包括序号和绘图图元,(3)用于编码并且向所述远程客户终端传送显示数据的显示编码器,以及(4)被所述显示编码器访问的次帧缓冲区;以及
处理器,所述处理器耦合到所述系统存储器,其中所述处理器被配置为使所述视频适配器驱动器执行来完成步骤:(1)当对所述主帧缓冲区执行了绘图图元后,更新所述队列,(2)从所述显示编码器接收针对与所述次帧缓冲区中的被更新的显示数据对应的绘图图元列表的请求,(3)从所述队列提取所述被请求的绘图图元列表,以及(4)将所述被请求的绘图图元列表提供到所述显示编码器,其中,根据带宽使用评估,所述显示编码器向所述远程客户终端选择性地传送所述被请求的列表中的绘图图元,优先于传送所述次帧缓冲区中与所述绘图图元对应的被更新的显示数据。
18.如权利要求17所述的计算系统,其中所述处理器还执行从所述队列去掉所述被请求的绘图图元列表的步骤。
19.如权利要求17所述的计算系统,其中所述请求包括与更新在所述次帧缓冲区中的显示数据对应的最后绘图图元的序号。
20.如权利要求19所述的计算系统,其中所述提取步骤还包括识别所述队列中的序号最多到所述请求的序号以及包括所述请求的序号的每个条目。

说明书全文

背景技术

当前的操作系统典型地包括图形绘制接口层,其通过应用来访问,以便在例如监视器的显示装置上再现绘图。图形绘制接口层为应用提供了用于绘图的应用编程接口(API),并将这些应用的绘制请求转换为一组绘制命令,然后将所述绘制命令提供到视频适配器驱动器。接下来,该视频适配器接收这些绘制命令,并将它们转换成视频适配器特有的绘图图元(primivites)并且将它们转发到视频适配器(例如图形卡、集成视频芯片组,等等)。视频适配器接收绘图图元并且立刻处理它们,或者可选择地将它们存储在供顺序执行的先进先出(FIFO)队列中,以更新视频适配器中的缓冲区,所述视频适配器被用来生成视频信号,并且将视频信号传送到被耦合的外部显示装置。这种图形绘制接口层的一个例子是MicrosoftWindows操作系统(OS)的图形设备接口(GDI),其作为可通过Windows操作系统访问的许多用户级和内核级的动态链接库来实现。

随着例如基于服务器的计算(SBC)和虚拟桌面架构(VDI)之类的技术的崛起,组织能够用宿主在数据中心里的远程桌面服务器(或在其中运行的虚拟机)上的桌面的实例取代传统的个人计算机(PC)。瘦客户端应用被安装在连接到远程桌面服务器的用户终端上,所述远程桌面服务器传送操作系统会话的图形用户界面,以在用户终端的显示设备上进行再现。这种远程桌面服务器系统的一个例子是虚拟网络计算(VNC),该虚拟网络计算利用远程帧缓冲区(RFB)协议来从远程桌面服务器向客户端传送帧缓冲区(该帧缓冲区包括有关于要被显示在屏幕上的每个像素的值)中的内容。为了减少被传送到瘦客户端应用的、与图形用户界面有关的显示数据量,远程桌面服务器可以保留帧缓冲区的第二副本,该第二副本反映了缓冲区的在前状态。这个第二副本使远程桌面服务器能够将帧缓冲区的在前状态和当前状态进行比较,以便识别显示数据的差别来进行编码(以减少网络传输带宽)并且随后通过网络传送到瘦客户端应用。

然而,由于在远程桌面服务器上对显示数据的差别进行编码并且随后在瘦客户端应用对它们进行解码所需的计算开销的缘故,将显示数据的差别通过网络向瘦客户端应用传送会使远程桌面服务器和瘦客户端应用这两者的性能恶化。作为一个普通的例子,将支持1920×1200分辨率以及每像素24位的色深(color depth)的整个帧缓冲区的数据以每秒60次的速率连续传送到网络上,将要求每秒3.09千兆位以上的传输速率。即使假设显示数据的差别(而不是整个缓冲区)能够被识别,并且在传输之前通过编码技术被进一步压缩,仍可能要求相当大的网络带宽。

发明内容

本发明的一个或多个实施方式提供了一些方法,在具有用于存储显示数据的主帧缓冲区和使用次帧缓冲区来向远程客户终端传送显示数据的显示编码器的服务器中,所述方法用于减少要被传送到远程客户终端的显示数据量。在一个这样的方法中,当对主帧缓冲区执行了绘图图元时,对包括已完成的绘图图元列表的队列进行更新。显示编码器请求与次帧缓冲区中的已更新的显示数据对应的绘图图元列表,所述被请求的绘图图元列表从所述队列中提取并且被提供到显示编码器。当接收到被请求的绘图图元列表时,根据带宽使用评估,显示编码器能够向远程客户终端选择性地传送被请求列表中的绘图图元,优先于传送所述次帧缓冲区中与所述绘图图元对应的已更新的显示数据。

在一个实施方式中,所述队列里的每个条目包括序号和绘图图元,并且已接收的请求包括与对次帧缓冲区中的显示数据进行更新的最后的绘图图元对应的序号。在这样一个实施方式中,提取步骤包括识别队列中的序号最多到所述请求的序号并且包括所述请求的序号的每个条目。

附图说明

图1是描绘了根据本发明的一个实施方式的远程桌面服务器的方框图

图2描绘了根据本发明的一个实施方式的“blitmap”数据结构。

图3描绘了根据本发明的一个实施方式的另一blitmap数据结构。

图4描绘了根据本发明的一个实施方式的FIFO队列。

图5是描绘了根据本发明的一个实施方式从应用向视频适配器传送绘制请求的步骤的流程图

图6是描绘了根据本发明的一个实施方式从视频适配器向显示编码器传送帧缓冲区数据的步骤的流程图。

图7描绘了根据本发明的一个实施方式的修正blitmap数据结构的例子。

图8示出了通过向远程客户端显示传送绘图图元,而不是传送对缓冲区所做出的相应显示数据的改变来节约带宽的一个例子。

图9是描绘了根据本发明的一个实施方式,从视频适配器驱动器向显示编码器传送绘图图元的步骤的流程图。

具体实施方式

图1描绘了根据本发明的一个实施方式的远程桌面服务器的方框图。远程桌面服务器100可以构造在例如x86结构平台的桌面计算机、便携计算机或者服务器级硬件平台102上。这样的硬件平台可以包括CPU 104、RAM 106、网络适配器108(NIC 108)、硬盘驱动器110以及其他I/O设备,例如但不限于鼠标键盘(在图1中未示出)。
虚拟化软件层,下文中也被称为管理程序(hypervisor)124,被安装在硬件平台102之上。管理程序124支持虚拟机执行空间126,其中的多个虚拟机(VM 1281-128N)可以同时被实例化并且执行。在一个实施方式中,每个VM 1281-128N支持从不同客户终端远程连接的不同用户。对于VM 1281-128N中的每一个,管理程序124管理对应的虚拟硬件平台(即,虚拟硬件平台1301-130N),该虚拟硬件平台包括以软件实现的仿真硬件,例如CPU 132、RAM 134、硬盘驱动器136、NIC 138以及视频适配器140。仿真视频适配器140分配并维持帧缓冲区142和先进先出(FIFO)队列144,所述帧缓冲区142是视频适配器140使用的存储器的一部分,该部分存储器保持像素值的缓冲区,视频显示(即“帧”)根据该像素值的缓冲区来刷新,所述FIFO队列144是视频适配器140使用的存储器的一部分,该部分存储器保持被用于更新帧缓冲区142的绘图图元列表。在一个实施方式中,FIFO队列144是共享的存储器缓冲区,该共享的存储器缓冲区在视频适配器140和视频适配器驱动器154之间被访问和共享。
虚拟硬件平台1301可以用作标准x86硬件结构的等价物,使得任何支持x86的操作系统,例如Microsoft Windows、Linux、Solarisx86、NetWare、FreeBSD等等,可以作为客户操作系统(OS)146被安装以执行实例化的虚拟机(例如VM 1281)的应用148。要求在显示装置上进行绘制的应用148通过由图形绘制接口层150(例如在一个实施方式中的Microsoft WindowsGDI)所提供的API来提交绘制请求,接下来由该图形绘制接口层150将所述绘制请求转换为绘制命令,并且向设备驱动器层152中的视频适配器驱动器154传送这些绘制命令。如图1的实施方式所示,视频适配器驱动器154分配并且维持其本身的FIFO队列157,以保持对绘图图元以及数据结构156的跟踪,数据结构156在下文中被称为“blitmap”数据结构,该数据结构保持对视频适配器140的帧缓冲区142的可能改变区域的跟踪。blitmap数据结构的实现和使用的更多细节将稍后在本详述中详细说明。设备驱动器层152包括额外的设备驱动器,例如NIC驱动器158,该额外的设备驱动器与虚拟硬件平台1301中的仿真设备(例如虚拟NIC 138等等)交互,就如同该仿真设备是硬件平台102的实际物理设备一样。管理程序124通常负责取得由虚拟平台1301中的仿真设备所接收的、设备驱动器层152中的设备驱动器的请求,并且将这些请求转换成用于管理程序124的物理设备驱动器层中与硬件平台102中的真实设备通信的真实设备驱动器的对应请求。
为了将图形用户界面传送到远程客户终端的显示装置,VM 1281还包括显示编码器160,该显示编码器160与视频适配器驱动器154(例如通过API)交互,以便从帧缓冲区142获得数据,用于编码(例如减少网络传输带宽),并且随后通过NIC驱动器158(例如通过虚拟NIC 138并且最终通过物理NIC 108)传输到网络上。显示编码器160分配并且维持次帧缓冲区162以存储从帧缓冲区142所接收到的数据,显示编码器160本身的blitmap数据结构164(下文中被称为编码器blitmap数据结构164)用于识别次帧缓冲区162中被改变的区域,并且显示编码器160本身的FIFO队列166用于跟踪绘图图元,该绘图图元的执行导致了次帧缓冲区162中的被改变区域。在一个实施方式中,显示编码器160连续地轮询视频适配器驱动器154(例如每秒30或60次),将帧缓冲区142中所发生的改变复制到次帧缓冲区162,以便将其传送到远程客户终端。
本领域中的普通技术人员将会认识到,用来描述图1中的虚拟化构成的各种术语、层次和分类可以被不同地称呼而不偏离它们的功能或者本发明的精神。例如,虚拟硬件平台1301-130N可以被认为是虚拟机监视器(VMM)1661-166N的一部分,该虚拟机监视器1661-166N实现了协调管理程序124和对应的VM 1281-128N之间的操作所需的虚拟系统支持。可选择地,虚拟硬件平台1301-130N可以被认为与VMM 1661-166N是分离的,而VMM 1661-166N可以被认为与管理程序124是分离的。能够用在本发明实施方式中的管理程序124的一个例子作为VMware的产品ESXTM的组件而被包括进来,其可从美国加利福尼亚州Palo Alto市的VMware公司处通过商业手段购得。还应当认识到的是,本发明的实施方式可以在例如宿主虚拟机系统的其他虚拟化计算机系统中被实践,其中管理程序在操作系统之上实现。
图2描绘了根据本发明的一个实施方式的blitmap数据结构。视频适配器驱动器154和显示编码器160这二者各自利用blitmap数据结构来跟踪帧缓冲区142和次帧缓冲区162的被改变区域。在图2的实施方式中,blitmap数据结构是二维位向量,这些位向量中的每位(本文也称为“blitmap条目”)代表了对应的缓冲区中的N×N区域。在位向量中被置位(本文也称为“被标记”的blitmap条目)的位指示在帧缓冲区的对应的N×N区域里的至少一个像素值已经在特定的时间间隔(例如由显示编码器160进行的轮询请求之间)内被改变。例如,图2描绘了帧缓冲区的64×64像素200,这里涂黑的点代表了在特定时间间隔内已经被改变了的像素值。8×8位向量205代表了blitmap数据结构的对应blitmap条目块,这里每位(或blitmap条目)对应于像素块200中的8×8区域。在位向量205中的被置位的位(或被标记的blitmap条目)由“X”代表。例如,被标记的blitmap条目210对应于帧缓冲区区域215(其在特定时间间隔内被改变了的全部像素值被表示为黑点)。图2示出了在位向量205中其它的被标记的blitmap条目,该条目对应于帧缓冲区像素块200中具有已经被改变的(由涂黑的点示出的)像素值的区域。通过遍历与图2的205相类似的blitmap数据结构的二维位向量实施方式,能够轻易地识别在时间间隔内已经发生了改变的帧缓冲区中的N×N区域(并且还轻易地跳过了那些在时间间隔内没有发生改变的区域)。
图3描绘了根据本发明的一个实施方式的另一blitmap数据结构。在图3的实施方式中,blitmap数据结构是区域四叉树,其中该树的每一级代表了2N×2N像素块的更高分辨率位向量。图3示出了帧缓冲区的64×64像素块300,这里涂黑的点代表了在特定时间间隔内被改变的像素值。像素块先后被细分为越来越小的子象限,直到每个被改变的像素(例如涂黑的点)被包括在最小的子象限内为止。例如,在像素块300中,最小的子象限是8×8像素区域,例如区域305、310和315。较大的子象限包括16×16子象限,例如320和325,以及32×32子象限,例如330。四级区域四叉树335所代表的blitmap数据结构对应于缓冲区的64×64像素块300。如图3中所描绘的,区域四叉树335的每一级能够被实现为位向量,该位向量的位对应于像素块300中特定尺寸的子象限,根据位向量的级,尺寸的范围为从64×64到8×8。区域四叉树335中用“X”标记的节点所指示的是,在该节点对应的像素块300中的子象限内的至少一个像素值在特定时间间隔内被改变(即具有涂黑了的点)。例如,区域四叉树335的0级(64×64级)的节点300Q代表了整个64×64像素块,并且由于像素块300中的至少一个像素值被改变了,所以该节点用“X”进行标记。相反,区域四叉树335的1级(32×32级)的节点330Q代表32×32子象限330,并且因为在子象限330中没有像素值被改变,因此该节点没有被标记。相类似地,2级(16×16级)的节点320Q和325Q各自代表了16×16子象限320和325,并且因为在子象限320和325中没有像素值被改变,因此该节点没有被标记。3级(8×8级)的节点305Q、310Q和315Q各自对应于像素块300的8×8区域305、310和315,并且因此被标记。在blitmap数据结构的区域四叉树实施方式中,例如在图3的实施方式中,在区域四叉树的最低级中的每个节点(即对应于最小子象限,例如8×8像素区域)是blitmap条目。通过遍历blitmap数据结构的区域四叉树实施方式,能够轻易地识别在时间间隔内已经被改变了的帧缓冲区的8×8区域(或其他最小尺寸的子象限)。另外,由于其树形结构,还能够迅速地跳过在时间间隔内没有被改变的帧缓冲区中的大尺寸子象限。还应当认识到的是,blitmap数据结构的区域四叉树实施方式可以进一步节省由blitmap数据结构使用的存储器,这依赖于区域四叉树的特定实现。例如,无论有多少个8×8区域可能不被标记,图2的blitmap数据结构205的二维位向量实施方式都占用64位,而当较少的8×8区域被标记时,图3的区域四叉树335占用较少位。如所描绘的,blitmap数据结构205的实现利用了64位,而blitmap数据结构335则利用了33位。应当认识到的是,编码器blitmap数据结构164和驱动器blitmap数据结构156可以每个都使用各种不同的数据结构来实现,其中就包括图2和图3的那些结构,并且在任何特定实施方式中,编码器blitmap数据结构164可以使用不同于驱动器blitmap数据结构156的数据结构。
图4描绘了根据本发明的一个实施方式的FIFO队列。视频适配器140、视频适配器驱动器154以及显示编码器160每个都利用了FIFO队列以保持对帧缓冲区142(用于视频适配器140和视频适配器驱动器154)以及次帧缓冲区162(用于显示编码器160)的绘图图元的跟踪。图4的FIFO队列400是尺寸为100的循环缓冲区,其中FIFO队列400中的每个条目都包括序号405和绘图图元410。在一个实施方式中,绘图图元的例子包括基本绘制命令,例如复制(例如从一个矩形区域复制到另一个矩形区域)、填充(例如用某一色彩填充矩形区域)、更新(例如用新的显示数据更新已有的矩形区域)等等。举例来说,FIFO队列条目415具有序号8以及绘图图元,该条目命令视频适配器140将帧缓冲区142的一个区域中的源矩形的内容复制到帧缓冲区142的另一区域中的目标矩形。自由条目指针420指向FIFO队列400中的下一个条目以插入一个新条目(即队列条目6),并且每当一个新条目被插入到FIFO队列400中时,该自由条目指针递增。当前条目指针425指向FIFO队列400中要被视频适配器140执行的下一个条目(即队列条目97),并且每次视频适配器140完成绘图图元的执行时,递增当前条目指针425。如图4中所示,队列条目6到96都代表了一组队列条目,该条目的绘图图元都已经被视频适配器140执行过(被称为已执行的条目430),并且队列条目1到5和97到100则代表了含有未执行的绘图图元或其他形式的空条目的队列条目的组(被称为未执行的条目435)。应当认识到的是,FIFO队列的可选实施方式可以用作FIFO队列144、157和166中的任何一个。例如,在一个实施方式中,视频适配器140中的FIFO队列144可能没有序号。相类似地,在可选实施方式中,FIFO队列所存储的每个绘图图元占用相同的字节量(例如24字节),使得能够通过确定距队列起始点的偏移量来取得序号(而不是将其存储为队列条目的字段)。
图5是描绘了根据本发明的一个实施方式,从应用向视频适配器传送绘制请求的步骤的流程图。虽然参考图1中的远程桌面服务器100的组件描述了这些步骤,应当认识到的是,被配置成以任何顺序来执行这些步骤的任何系统都是符合本发明的。
根据图5的实施方式,在步骤505中,在该步骤执行期间,应用500(即,客户OS 146上运行的应用148中的一个)访问图形绘制接口层150(例如Microsoft Windows中的GDI)的API以向屏幕提交绘制请求,例如,响应用户的动作来更新其图形用户界面。在步骤510中,通过客户OS146,图形绘制接口层150接收绘制请求并且将它们转换成视频适配器驱动器154能明白的绘制命令。在步骤515中,图形绘制接口层150将绘制命令传送到视频适配器驱动器154。在步骤520中,视频适配器驱动器154接收绘制命令并且标记驱动器blitmap数据结构156的条目,以指示帧缓冲区142区域里的像素值中的至少一部分由于执行了绘制命令而将被更新,所述像素值中的至少一部分对应于驱动器blitmap数据结构156中被标记的条目。在一个实施方式中,视频适配器驱动器154计算或者以其他方式确定帧缓冲区142内的区域,例如包围了由于执行绘制命令而将被更新的像素的最小尺寸的矩形(即,本文也被称为“边框”)。然后,视频适配器驱动器154能够识别并且标记驱动器blitmap数据结构156中的与包括了所确定区域中的像素值的帧缓冲区154的区域对应的所有blitmap条目。在步骤525中,视频适配器驱动器154将绘制命令转换为设备特有的绘图图元,并且在步骤530中,可将该设备特有的绘图图元插入到FIFO队列157里,相应地,FIFO队列157中的自由条目指针递增。然后在步骤535中,视频适配器驱动器154将绘图图元插入到FIFO队列144里(例如在视频适配器驱动器154和视频适配器140之间共享FIFO队列144的实施方式中),并相应地递增FIFO队列144中的自由条目指针。在步骤540中,当FIFO队列144中的绘图图元准备好被执行时,则视频适配器140根据它们来更新帧缓冲区142。具体地,在步骤545中,一旦视频适配器140完成了绘图图元的执行,则该视频适配器140递增其FIFO队列144中的当前条目指针,并在步骤550中通知视频适配器驱动器154递增FIFO队列157中的当前条目指针,视频适配器驱动器154将在步骤555中执行该动作。
图6是描绘了根据本发明的一个实施方式从视频适配器向显示编码器传送帧缓冲区数据的步骤的流程图。虽然参考图1中的远程桌面服务器100的组件描述了这些步骤,应当认识到的是,被配置成以任何顺序来执行这些步骤的任何系统都是符合本发明的。
根据图6的实施方式,显示编码器160是在客户OS 146上运行的进程,该进程连续地轮询(例如每秒30或60次)视频适配器驱动器154以获得视频适配器140的帧缓冲区154中的数据,以(例如通过NIC驱动器158)对该数据编码并传送到网络上,用于由远程客户终端来接收。在步骤600中,显示编码器160通过由视频适配器驱动器154公开给它的API例程,向视频适配器驱动器154发出帧缓冲区更新请求,并且将对次帧缓冲区162的存储器引用(reference)(例如指针)传给视频适配器驱动器154,使视频适配器驱动器154能够直接修改次帧缓冲区162。在步骤605中,视频适配器驱动器154接收帧缓冲区更新请求,并且在步骤610中,其遍历驱动器blitmap数据结构156以识别被标记的blitmap条目,这些blitmap条目对应于帧缓冲区142中的那些自上次来自显示编码器160的帧缓冲区更新请求(由于如图5中所描述的来自应用的绘制请求)以来已经改变的区域。如果在步骤615中,当前blitmap条目被标记,那么在步骤620中,视频适配器驱动器154请求视频适配器140的帧缓冲区142的对应区域(即该区域中的像素值)。在步骤625中,视频适配器140接收该请求,并且将帧缓冲区142的被请求区域传送到视频适配器驱动器154。
在步骤630中,视频适配器驱动器154接收帧缓冲区142的被请求区域,并且在步骤635中,将在帧缓冲区142的接受到的被请求区域中的像素值与次帧缓冲区162中对应区域的像素值进行比较,所述次帧缓冲区162反映了帧缓冲区142在视频适配器驱动器154完成了对来自显示编码器160的先前帧缓冲区更新请求的响应时的先前状态。这个比较步骤635使视频适配器驱动器154能够识别因为由如图5中所描述的应用的绘制请求的视觉冗余传输而可能导致的低效率。例如,也许是因为没有关注于优化与其功能方面相关的绘制,在图5的步骤505中,一些应用可能发出这样一些绘制请求,使得即使应用实际上仅仅修改了图形用户界面中的很小的区域,都会冗余地重新绘制它们的整个图形用户界面。这种绘制请求导致驱动器blitmap数据结构156中的条目在图5的步骤520中被标记,即使在被标记的blitmap条目的对应的帧缓冲区142区域不需要用新的像素值来更新时(即,对应于实际上没有被修改的图形用户界面的一些部分的区域)也是如此。用这些被标记blitmap条目,比较步骤635将发现,对应于被标记的blitmap条目的帧缓冲区142和次帧缓冲区162的区域是相同的,这是因为,在视频适配器驱动器154完成了对来自显示编码器160的先前帧缓冲区更新请求的响应之后,由于应用所提交(在步骤505中)的是视觉冗余的绘制请求,上述区域的像素值因而没有改变。
因此,在步骤640中,如果比较步骤635指示帧缓冲区142和次帧缓冲区162的区域是相同的,那么在步骤645中,视频适配器驱动器154通过清除被标记的blitmap条目来“修正”驱动器blitmap数据结构156,以指示自从视频适配器驱动器完成了对来自显示编码器160的先前帧缓冲区更新请求的响应以来,在帧缓冲区142的对应区域中的实际像素值没有被改变。图7描绘了根据本发明的一个实施方式修正blitmap数据结构的例子。图7示出了帧缓冲区142的88×72像素块700。每个被细分的块,例如705,都代表了8×8像素区域,其对应于驱动器blitmap数据结构156中的blitmap条目。如图7中所描绘的,应用依据图5的步骤505发出绘制请求,以便绘制如像素块700中所描绘的笑脸。然而,由应用所发出的绘制请求低效率地请求使整个像素块700重新绘制,而不是仅仅请求绘制笑脸本身的特定像素。因此,在对应的驱动器blitmap数据结构156的11×9blitmap块710中的blitmap条目的每一个条目由视频适配器驱动器154依据图5的步骤420来标记(例如被标记的blitmap条目715)。然而,当显示编码器160向视频适配器驱动器154发出帧缓冲区更新请求时,如本文针对图6所描述的,视频适配器驱动器154能够修正blitmap块710,从而创建blitmap块720,这是通过依据图6的步骤645清除诸如未被标记的blitmap725的blitmap条目来实现的,在帧缓冲区142中,该blitmap条目的对应区域没有被实际改变(即不含有笑脸修改的像素)。
回到图6,然而如果在步骤640中,比较步骤635指示帧缓冲区142和次帧缓冲区162的区域不同(即自从完成了对来自显示编码器160的先前帧缓冲区更新请求的响应以来,在帧缓冲区142中的区域的实际像素值因为步骤505中应用的绘制请求而被改变),然后在步骤650中,视频适配器驱动器154将帧缓冲区142区域中的像素值复制到次帧缓冲区162的对应区域中,以在次帧缓冲区162中正确地反映在帧缓冲区142的区域中被改变的像素值。在步骤655中,如果视频适配器驱动器154没有完成遍历驱动器blitmap数据结构156,则流程返回步骤610。如果在步骤655中,视频适配器驱动器154已经完成遍历驱动器blitmap数据结构156,那么在步骤660中,视频适配器驱动器154向显示编码器160提供驱动器blitmap数据结构156的副本,所述副本成为并且在本文中被称为编码器blitmap数据结构164。就步骤645中驱动器blitmap数据结构156中的被标记的blitmap条目被清除而言,编码器blitmap数据结构164反映了次帧缓冲区162中具有实际被改变的像素值的区域的更优化的视图。在步骤665中,视频适配器驱动器154清除驱动器blitmap数据结构156中所有被标记的blitmap条目,为随后接收来自显示编码器160的帧缓冲区更新请求做准备。在步骤670中,视频适配器驱动器154向显示编码器160提供在步骤600中发出缓冲区更新请求后已经被执行进入帧缓冲区142的、FIFO队列157中的最后的绘图图元的序号,向显示编码器160指示表明视频适配器驱动器154已经完成了对步骤600中的帧缓冲区更新请求的响应。例如,在图4的FIFO队列实施方式中,步骤670中被提供给显示编码器160的序号是96,其代表的队列条目紧接在由当前条目指针425所指向的队列条目的前面。
当视频适配器驱动器154完成对步骤600中由显示编码器160发出的帧缓冲区更新请求的响应时,次帧缓冲区162含有自从完成了对来自显示编码器160的先前的帧缓冲区更新请求的响应以来、由来自应用的绘制请求(来自图5的步骤505)所造成的所有被改变的像素值,而编码器blitmap数据结构164含有指示次帧缓冲区162内的哪些区域含有这些被改变的像素值的被标记的blitmap条目。
在步骤675中,利用这样的信息,显示编码器160能够遍历编码器blitmap数据结构164来找到被标记的blitmap条目,并且仅仅提取次帧缓冲区162中那些与被标记的blitmap条目对应的区域,来进行编码并且传输到远程客户端显示装置。然而,在一个实施方式中,显示编码器160还能够通过选择性地传送描述对帧缓冲区142做出改变的绘图图元,而不是传送在次帧缓冲区162中所反映的实际对应的显示数据的改变,来减少向远程客户端显示装置传送对帧缓冲区142的改变所需的带宽的量。图8示出了节约带宽的一个例子,通过向远程客户端显示装置传送绘图图元,而不是传送对缓冲区所做的对应的显示数据的改变。块800代表了帧缓冲区142的88×72像素块800。例如805的每个被细分的块代表与驱动器blitmap数据结构156中的blitmap条目对应的8×8像素区域。如图8中所描绘的,视频适配器140即将执行FIFO队列140中的队列条目的“复制”绘图图元810,以将已经存在的矩形复制到像素块800(即类似于图4的队列条目415)的另一个区域。当执行了绘图图元810后,帧缓冲区142的像素块800被转换为像素块815(即所述矩形已经被复制到像素块的新的区域)。
相类似地,根据图5的步骤520,如通过blitmap数据结构块820所示出的,还对驱动器blitmap数据结构156进行了更新。等式825显示出把帧缓冲区142中的被改变的显示数据传送到远程客户终端将涉及以非压缩格式传送大约3840字节,而等式830显示出传送绘图图元810本身将涉及仅仅传送大约24字节(即其中远程客户终端将执行所接收到的绘图图元以获得显示数据)。另外,虽然压缩编码技术能够减少被传送的显示数据量,但是即使通过例如100的因数来减少未压缩格式的尺寸的优化压缩技术,仍然会要求传输38.4字节,这依然大于24字节的绘图图元。另一个益处是减少了CPU时间。例如,虽然有可能使用与对应的显示图元一样小甚至更小尺寸的显示压缩显示数据,但是传送显示图元所要求的CPU时间与压缩算法需要的CPU时间相比少得多。
图9是描绘了根据本发明的一个实施方式,从视频适配器驱动器向显示编码器传送绘图图元的步骤的流程图。虽然参考图1中的远程桌面服务器100的组件描述了这些步骤,应当认识到的是,被配置成以任何顺序来完成这些步骤的任何系统都是符合本发明的。
在步骤900中,当完成了图6的步骤670中的帧缓冲区更新请求时,显示编码器160接收由视频适配器驱动器154传送的序号。然后在步骤905中,显示编码器160将序号和对于FIFO队列166的存储器引用传送到视频适配器驱动器154,以请求与被更新的显示数据相关的绘图图元列表,所述被更新的显示数据被包括在步骤900中所接收到的次帧缓冲区162里。当在步骤910中视频适配器驱动器154接收请求时,在步骤915中,该视频适配器驱动器154确定其FIFO队列157中序号最多到(和包括)在该请求中接收到的序号的那些队列条目,并且将这些队列条目复制到FIFO队列166中,用于由显示编码器160进行访问。例如,在一个实施方式中,视频适配器驱动器154的FIFO队列157根据图5的步骤(即步骤530和555)被更新,并且以类似于图4的FIFO队列400的方式被实现,视频适配器驱动器154还存储了在图6的步骤670中被传送到显示编码器160用于帧缓冲区更新请求的在前序号的副本,该帧缓冲区更新请求紧接在导致了由显示编码器160发出步骤900的绘图图元列表请求的当前帧缓冲区更新请求的前面。该在前序号代表了FIFO队列157中被利用来在紧接在当前帧缓冲器更新请求之前的帧缓冲区更新请求中对帧缓冲区142进行更新的最后的绘图图元的序号。因此,FIFO队列157的队列条目中那些序号在所述在前序号之后并且最多到(和包括)步骤905中所接收到的序号的那些绘图图元,代表更新在图6的步骤650中被复制到次帧缓冲区162的显示数据的显示图元。在这样的实施方式里,在步骤920中,视频适配器驱动器154从其FIFO队列157将这些显示图元的队列条目复制到FIFO队列166。然后在步骤925中,视频适配器驱动器154从其自身的FIFO队列157中清除或者以其他方式移除这些队列条目,并且通知显示编码器160已经完成了对于来自步骤905的绘图图元列表请求的响应。
应当认识到的是,可选实施方式可以利用以不同于图5的过程的方式进行更新的FIFO队列157的不同的实现。例如在一个可选实施方式里,绘图图元没有在步骤530中被插入到FIFO队列157。相反地,仅仅步骤550中已经由视频适配器140完成的绘图图元被插入到FIFO队列157。具体地,步骤550被修改成视频适配器140将已完成的绘图图元传送到视频适配器驱动器154,然后该视频适配器驱动器154将所述已完成的绘图图元插入其FIFO队列157。在这样的实施方式里,FIFO队列157能够被实现作为简单的向量缓冲区,并且不需要自由条目指针420或者当前条目指针425。具体地,在步骤910和步骤915中,从FIFO队列157的开始处直到被请求的序号的所有条目都被提供给显示编码器160,当在步骤925中去掉了被提供的条目之后,剩余的条目被转移到FIFO队列157的开始处。
在步骤925之后,显示编码器160可以访问次帧缓冲区162中的被更新的显示数据,指示了次帧缓冲区162中的哪些区域包括了被更新的显示数据的编码器blitmap数据结构164,以及包括了实现次帧缓冲区162中的被更新显示数据的绘图图元列表的FIFO队列166。因此,显示编码器160能够在传送被更新的显示数据本身或者传送实现了被更新的显示数据的数据图元之间,确定将显示数据的改变传递到远程客户终端的更有效的方法。例如,返回图9的实施方式,在步骤930中,显示编码器160检查FIFO队列166中的绘图图元列表以识别孤立的绘图图元,该孤立的绘图图元所进行绘制的帧缓冲区的区域没有被FIFO队列166中的其他绘图图元进行绘制。在步骤935中,如果传送被识别的绘图图元与传送受到这种绘图图元影响的显示数据量相比较快的话,那么在步骤940中,显示编码器160清除编码器blitmap数据结构164中那些与受到绘图图元影响的帧缓冲区162的区域对应的blitmap条目,并且在步骤945中,将绘图图元传送到远程客户终端。如果在步骤935中,显示编码器160确定了传送显示数据而不是传送被识别的绘图图元更有效的话,那么在步骤950中,显示编码器传送次帧缓冲区162中的显示数据(即根据编码器blitmap数据结构164中被标记的条目)。应当认识到的是,显示编码器160可以利用符合本文教导的各种方法在步骤935中确定是将被更新的显示数据还是将对应的绘图图元传送到远程客户终端。例如,在一个实施方式中,显示编码器160把受到步骤930中识别的绘图图元影响的显示数据量和绘图图元本身的尺寸进行比较。在可选实施方式中,某些显示图元(例如复制或者填充绘图图元)被假设为比传送受影响的显示数据更有效率。应当认识到的是,可以用本文教导的任何数量的试探来确定是发送绘图图元还是发送受影响的显示数据。
应当认识到的是,本文所描述的特定实施方式可以做出各种修改和改变而不偏离如所附权利要求中所阐明的本发明的广泛精神和范围。例如,虽然在图1描绘的实施方式里,显示编码器160和视频适配器驱动器154运行在虚拟机1281中,而所述虚拟机1281与管理程序124中的虚拟视频适配器140通信,但是应当认识到的是,本发明的实施方式可以被部署在任何远程桌面服务器结构中,包括基于非虚拟机的计算结构。此外,与使显示编码器160和虚拟视频适配器140作为服务器的软件组件不同的是,可选实施方式可以利用硬件组件用于它们中的每一个或任意一个。相类似地,应当认识到的是,可选实施方式可以不要求任何虚拟视频适配器。反而在这样的可选实施方式中,例如,视频适配器驱动器154可以分配和管理帧缓冲区142和FIFO队列144本身。相类似地,应当认识到的是,在可选实施方式中,可以不要求FIFO队列166。取而代之的是,在这样的可选实施方式中,显示编码器160能够直接访问视频适配器驱动器154的FIFO队列157,例如,通过其自己的读取指针。应当相类似地认识到的是,本文所描述的各种其他数据结构和缓冲器能够由可选的系统组件来分配和维持而不偏离本发明的精神。例如,在可选实施方式中,视频适配器驱动器154可以分配和维持次帧缓冲区162(以及编码器blitmap数据结构164)并且将存储器引用提供给显示编码器160,而不是使显示编码器160分配和维持次帧缓冲区162并将存储器引用传送到视频适配器驱动器154(如图6的步骤600中详细说明的)。另外,应当认识到的是,如本文所描述的由视频适配器驱动器154执行的一些功能和步骤,能够在与预先存在的或者标准的视频适配器驱动器分离的扩展部件或者组件中来实现(即显示编码器160可以与这种和视频适配器驱动器分离的扩展部件进行通信,而不是与预先存在的视频适配器驱动器本身进行通信)。相类似地,应当认识到的是,可选实施方式可以改变本文所描述的系统组件之间交换的数据量和类型,或者利用已知的优化技术而不偏离本发明的精神。例如,在可选实施方式中,视频适配器驱动器154在内部保持对在步骤920中的先前迭代中被提供给显示编码器的先前绘图图元的跟踪,使得视频适配器驱动器154能够向显示编码器160提供相关的绘图图元而不需要序号,而不是如在图9的步骤905中使显示编码器160向视频适配器驱动器154传送序号。另外,可选实施方式可以仅仅向显示编码器160提供驱动器blitmap数据结构156中的相关部分,或者以其他方式利用可选的数据结构以向显示编码器160提供驱动器blitmap数据结构156的该相关部分,而不是在图6的步骤660中提供驱动器blitmap数据结构156的副本作为编码器blitmap数据结构164。相类似地,可选实施方式在视频适配器驱动器154中可以不具有FIFO队列157,而是通过视频适配器140向FIFO队列144请求FIFO队列条目。相类似地,在可选实施方式中,视频适配器驱动器154能够在图5的步骤555后触发对显示编码器160的中断,以通知显示编码器160接收对帧缓冲区142进行了更新的绘图图元,而不是(或者除了)使显示编码器160连续地轮询视频适配器驱动器154。以这种方式,例如如果帧缓冲区142没有改变,则显示编码器160不需要向视频适配器驱动器154连续发出请求。
本文所描述的各种实施方式可以使用各种计算机实现的操作,这些操作涉及到计算机系统中存储的数据。例如,这些操作通常可以要求物理量的物理操作,但是不是必须的,这些量可以采取电或磁信号的形式,这里它们或它们的表现形式能够被存储、传输、组合、比较、或者以其他形式操作。此外,这样的操作常常以术语来称呼,例如制造、识别、确定或者比较。本文所描述的任何操作可以是有用的机器操作,所述操作形成本发明的一个或多个实施方式的一部分。另外,本发明的一个或多个实施方式还涉及用于完成这些操作的设备或装置。这些装置可以被特别地构造用于特定要求用途,或者它们可以是由计算机中所存储的计算机程序选择性地激活或配置的通用计算机。特别地,各种通用计算机可以与根据本文的教导所编写的程序一起使用,或者其可以更方便地构造更专的装置以执行被要求的操作。
本文所描述的各种实施方式可以用其他计算机系统配置来实践,所述计算机系统配置包括手持设备微处理器系统、基于微处理器的或可编程的消费电器、微型计算机、大型计算机,等等。
本发明的一个或多个实施方式可以被实现作为一个或多个计算机程序,或者作为一个或多个计算机程序模块,所述计算机程序或计算机程序模块在一个或多个计算机可读介质中实施。术语计算机可读介质指的是能够存储数据的任何数据存储设备,而这些数据能够随后被输入到计算机系统,计算机可读介质可以基于任何已存在或者随后开发的技术,用于使它们能够被计算机读取的方式来实施计算机程序。计算机可读介质的例子包括硬盘驱动器、网络附加存储器(NAS)、只读存储器随机存取存储器(例如闪存设备)、CD(光盘)、CD-ROM、CD-R、或者CD-RW、DVD(数字多功能光盘)、磁带、和其他光学和非光学数据存储设备。计算机可读介质还能够分布于与计算机系统耦合的网络中,使得计算机可读代码以分布方式被存储和执行。
虽然为了清楚理解,已经以一些细节描述了本发明的一个或多个实施方式,但显而易见的是,能够在权利要求的范围内做出某些改变和修改。因此,所描述的实施方式被认为是说明性的而非限制性的,并且权利要求的范围不被限制在本文所给出的细节中,而是可以在权利要求的范围和等价形式内来修改。在权利要求中,除非在权利要求中明确说明,元件和/或步骤不暗示任何特殊操作顺序。
此外,虽然所描述的虚拟化方法通常假设虚拟机存在符合特定硬件系统的接口,但是本领域中的技术人员将认识到所描述的方法可以连同不直接对应于任何特定硬件系统的虚拟化一起来使用。根据各种实施方式,作为宿主实施方式、非宿主实施方式、或者作为倾向于使两者之间的区别模糊的实施方式实现的虚拟化系统全部都被设想到了。此外,各种虚拟化操作可以在硬件中被整个地或部分地实现。例如,硬件实现可以使用用于修改存储器访问请求的查询表,以保证非磁盘数据的安全性。
无论虚拟化的程度如何,都可能有许多变化、修改、增补、以及改进。因此,虚拟化软件能够包括执行虚拟化功能的主机、控制台、或者客户操作系统的组件。多个实例可以被提供给本文作为单个实例被描述的组件、操作或者结构。最后,各种组件、操作和数据存储之间的界限在某种程度上是任意的,并且特定操作在特定说明性配置的背景中被示出。其他的功能分配被考虑并且可以属于本发明的范围。一般来说,在示例性配置中作为分离组件出现的结构和功能可作为组合的结构或组件来实现。相类似地,作为单个组件出现的结构和功能可作为分离组件来实现。这些和其他的变化、修改、增补、以及改进可以属于所附权利要求的范围。
相关申请的交叉引用
本发明涉及与本申请同日提交的名称为“Method and System forCopying a Framebuffer for Transmission to a Remote Display”(代理案号:A336)的美国专利申请,在此将其引入作为参考。
QQ群二维码
意见反馈