A method for communicating, from a host computer to a plurality of remote computers, a plurality of asynchronous image sequences generated by a plurality of independent entities, comprising independently monitoring updates of the plurality of image sequences to determine a plurality of image portions ready for communication to the remote computers, wherein the updates are at least one of spatially or temporally erratic; determining an availability of at least one transfer resource for transferring at least two of the plurality of image portions and sharable by at least two of the plurality of image sequences; selecting a first image portion from the plurality of image portions based on the availability, the monitoring, determining, and selecting done at the host computer; and transferring the first image portion, from the host computer to a remote computer within the plurality of remote computers, utilizing the at least one transfer resource.
|
11. An image transfer system, comprising:
a processor memory to store current frames from a plurality of image sequences;
at least one processor enabled to asynchronously write update portions of the current frames into the processor memory;
a direct memory access controller (DMAC) enabled for transferring selective portions of the update portions from the processor memory to an encoder;
the encoder enabled to encode the selective portions to generate encoded images;
a network interface enabled to transmit the encoded images, via a shared packet switched network, to a plurality of remote computers; and
a controller enabled to generate communication schedules for at least two resource types of a set comprising the at least one processor, the DMAC, the encoder and the network interface based on an image transfer requirement and the availability of two or more different resource types of a second set comprising the at least one processor, the DMAC, the encoder and the shared packet switched network, wherein each of the plurality of image sequences is generated by a different one of a plurality of virtual machines, wherein subsequent generation of an image sequence of the plurality of image sequences, which comprises a portion of the selective portions, is restricted until transferring of the portion of the selective portions is completed, and wherein restricting the subsequent generation comprises restricting processor cycles of the at least one processor to a virtual machine which generated the image sequence.
1. A method for communicating a plurality of image sequences, wherein each of the plurality of image sequences is generated by a different one of a plurality of virtual machines, comprising:
generating, by a shared image generation resource of a host computer, the plurality of image sequences;
monitoring the plurality of image sequences to determine updated image portions of the plurality of image sequences, wherein the updated image portions are at least one of spatially erratic or temporally erratic;
determining an availability of at least two transfer resource types of a set comprising the shared image generation resource, an image capture resource, an image encode resource and a network resource, wherein the at least two transfer resource types are required to transfer the plurality of image sequences;
selecting a first image portion from the updated image portions based on image transfer requirements and the availability of the at least two transfer resource types;
transferring the first image portion, from the host computer to a remote computer, utilizing the at least two transfer resource types; and
restricting subsequent generation of an image sequence from which the first image portion was selected, wherein transferring the first image portion further comprises capturing the first image portion, wherein restricting the subsequent generation persists until capturing the first image portion is completed, and wherein restricting the subsequent generation comprises restricting processor cycles to a virtual machine which generated the image sequence.
2. The method of
generating an encoding of the first image portion; and
communicating the encoding to the remote computer.
3. The method of
4. The method of
5. The method of
obtaining predicted availability information for the at least two transfer resource types; and
controlling generation of the plurality of image sequences based upon the predicted availability information.
6. The method of
7. The method of
8. The method of
9. The method of
10. The method of
12. The image transfer system of
13. The image transfer system of
14. The image transfer system of
15. The image transfer system of
16. The image transfer system of
|
This application claims benefit of U.S. Provisional Patent Application Ser. No. 61/086,580, entitled “Image Sequence Transfer Scheduling Apparatus and Methods”, filed Aug. 6, 2008. This application is a continuation-in-part of: (1) co-pending U.S. patent application Ser. No. 11/278,128, entitled “Methods and Apparatus for Managing Multiple Remote Displays”, filed Mar. 30, 2006, which claims benefit of U.S. provisional patent application Ser. No. 60/669,178, filed Apr. 6, 2005, and (2) U.S. patent application Ser. No. 11/904,879, entitled “Method and Apparatus for Scheduling a Resource of a Virtual Machine”, filed Sep. 28, 2007 now U.S. Pat. No. 8,341,624, which claims benefit of U.S. provisional patent application Ser. No. 60/827,382, filed Sep. 28, 2006. Each of the aforementioned related patent applications is herein incorporated in their entirety by reference.
1. Field of the Invention
Embodiments of the present invention relate generally to a method and system for transferring image data from a processor memory to remote communication endpoints. Specifically, a plurality of image sequences, generated by independent entities, in processor memory are prioritized and scheduled for transfer based on at least one of image status and communications resource availability.
2. Description of the Related Art
Existing remote desktop protocols include various proprietary and open source technologies, such as SGI's OpenGL-based Vizserver, IBM's Deep Computing Visualization (DCV), Mercury International Technology's ThinAnywhere, Citrix ICA, Microsoft Remote Desktop Protocol (RDP), and HP's Remote Graphics Software, Virtual Network Computing (VNC), VirtualGL, and the Chromium Renderserver (CRRS).
Recently, initiatives such as Virtual Desktop Infrastructure (VDI) from VMWARE and XENDESKTOP from CITRIX CORPORATION have enabled traditional Personal Computers to be replaced by virtual machines which are aggregated and hosted on a centralized processing platform such as computer server. The virtualized computers then connect to a client computer using some form of protocol such as one of the existing remote desktop protocols described.
In order to prevent visible tearing in a displayed image on a remote desktop, drawing commands and data structures known to the art may be utilized in the architecture for copying a desktop image from a framebuffer to a display. Such drawing commands and data structures enable separation of a display buffer and a drawing buffer using multi-buffering techniques. However, copying multiple desktop images from multiple frame buffers in a virtualized environment to multiple endpoints presents numerous challenges if the original desktop display image quality is to be maintained for the remote desktop images.
Therefore, there is a need in the art for a method and system for effectively communicating a plurality of desktop images in a virtualized environment to a plurality of remote endpoints.
Embodiments of the present invention generally relate to a method and system for communicating, from a host computer to a plurality of remote computers, a plurality of image sequences generated by a plurality of independent entities. The method comprises independently monitoring, at the host computer, updates of the plurality of image sequences to determine a plurality of image portions ready for communication to the remote computers, wherein the updates are at least one of spatially erratic or temporally erratic; determining, at the host computer, an availability of at least one transfer resource, the at least one transfer resource for transferring at least two of the plurality of image portions and sharable by at least two of the plurality of image sequences; selecting, at the host computer, a first image portion from the plurality of image portions based on the availability; and transferring the first image portion, from the host computer to a remote computer within the plurality of remote computers, utilizing the at least one transfer resource.
So that the manner in which the above recited features of the present invention can be understood in detail, a more particular description of the invention, briefly summarized above, may be had by reference to embodiments, some of which are illustrated in the appended drawings. It is to be noted, however, that the appended drawings illustrate only typical embodiments of this invention and are therefore not to be considered limiting of its scope, for the invention may admit to other equally effective embodiments.
The invention may be implemented in numerous ways, including as a process, an article of manufacture, an apparatus, a system, and as a set of computer-readable descriptions and/or instructions embedded on and/or in a computer-readable medium such as a computer-readable storage medium. In this specification, these implementations, or any other form that the invention may take, may be referred to as techniques. The Detailed Description provides an exposition of one or more embodiments of the invention that enable improvements in features such as performance, power utilization, cost, scalability, efficiency, and utility of use in the field identified above. The Detailed Description includes an Introduction to facilitate the more rapid understanding of the remainder of the Detailed Description. As is discussed in more detail in the Conclusions, the invention encompasses all possible modifications and variations within the scope of the issued claims.
The term processor as used herein refers to any type of processor, central processing unit (CPU), microprocessor, microcontroller, embedded processor, media processor, graphics processor, or any other programmable device capable of executing and/or interpreting instructions in a form of software (such as microcode, firmware and/or programs).
The term software as used herein refers to any type of computer-executable instructions for any type of processor, such as programs, applications, scripts, drivers, operating systems, firmware, and microcode. Computer-executable instructions include any types of instructions performed by a processor, such as binary instructions that are directly performed, instructions that are translated and/or decoded prior to being performed, and instructions that are interpreted.
The term ‘image sequence’ as used herein refers to a data sequence such as a stream of drawing commands, pixel data or both associated with a dynamic display image.
The term ‘image portion’ as used herein refers to part, or all, of one image frame (e.g. a display image frame) associated with an image sequence. An image portion is herein alternatively termed an ‘image region’ or an ‘image area’.
The term ‘display update’ as used herein refers to change in an image sequence (generally affected by a software application) resultant in a changed image portion.
In one or more embodiments of the present invention, a computer system, such as system 100 in
In various embodiments, each VM comprises an update manager which provides image status information to the transfer scheduler so that the capture of image data from the various VMs can be prioritized and timed to ensure tear-free image capture, unnecessary queuing of data or sub-optimum use of communications resources. In some such embodiments, the image processing system provides the transfer scheduler with communication resource availability information such as shared encoder or network bandwidth availability so that encoding resources and image communications latency are optimized while preventing gaps or bottlenecks in the image processing and communication pipeline.
In further embodiments, the drawing software of a virtual machine is de-prioritized or suspended once image data has been captured which enables other application software or other virtual machines to meet image update or other application timing requirements.
Host computer 102 (“computer 102”) is, generally, a computer or system of computers that has been designated for running software associated with a plurality of communication endpoints, such as user interfaces; wherein the software associated with each endpoint is typically executed in a separate virtual machine (VM) domain. In various embodiments, the software in each VM domain comprises operating system, driver software, and application software with display presentation requirements. In an embodiment, computer 102 comprises processor 110 coupled to memory 112 by bus 118, wherein bus 118 comprises one or more bus structures, such as memory and/or I/O busses known to the art. Processor 110 is also coupled to independent image transfer device 116, for example by one or more I/O busses or computer expansion card busses such as a Peripheral Component Interconnect (PCI)-Express bus, one or more graphics busses such as one or more Digital Visual Interface (DVI) or DisplayPort busses. In the embodiment of
In various embodiments, processor 110 comprises one or more CPUs, one or more GPUs or a combination of CPU and GPU processing elements.
Memory 112 comprises any one or combination of volatile computer readable media (e.g., random access memory (RAM), such as dynamic random access memory (DRAM), static random access memory (SRAM), extreme data rate (XDR) RAM, Double Data Rate (DDR) RAM etc.) and nonvolatile computer readable media (e.g., ROM, hard drive, tape, CDROM, DVDROM, magneto-optical disks, Erasable Programmable Read-Only Memory (EPROM), Electrically Erasable Programmable Read-Only Memory (EEPROM), Flash EPROM etc.). Moreover, memory 112 may incorporate electronic, magnetic, optical, and/or other types of storage media. In an exemplary embodiment, the memory 112 stores executable software in the form of machine-readable instructions. Memory 112 further comprises hypervisor 120 with transfer scheduler 130 and the virtual machines 140 (illustrated as a virtual machine 1401 and a virtual machine 1402), where the virtual machines 140 are one example of independent entities that are created and supported by the processor 110 when the processor 110 executes specific instructions. In some embodiments, the virtual machines 140 comprise application software 142 (illustrated as an application s/w 1421 within virtual machine 1401 and an application s/w 1422 within virtual machine 1402), image sequence memory 144 (illustrated as an image sequence memory 1441 within virtual machine 1401 and an image sequence memory 1442 within virtual machine 1402) and update manager 146 (illustrated as an update manager 1461 within virtual machine 1401 and an update manager 1462 within virtual machine 1402). While the embodiment of system 100 comprises two VMs illustrated as virtual machine 1401 and virtual machine 1402, other embodiments may comprise additional VMs. For example, in some embodiments, processor 110 executes 32 or 64 VMs, at least one of the VMs comprising application software, update manager and image sequence memory. In some embodiments, image sequence memory (ref. memory 144) is located outside the VM domain, for example in memory associated with hypervisor 120 or video memory associated with a GPU. In some embodiments, the processor 110 is enabled to write asynchronous update portions for the plurality of image sequences into the processor memory 112 (e.g., into the image sequence memory 144 of the corresponding updated image sequence).
VM 140 is an operating system domain or similar ‘computing process’ of computer 102. In general terms, a VM 140 comprises an interdependent set of processes scheduled by hypervisor 120. Each VM 140 under control of the hypervisor 120 is an autonomous operating system environment with one or more applications and related drivers. In an exemplary embodiment, each VM 140 comprises an operating system such as a WINDOWS operating system from MICROSOFT, Inc. for example WINDOWS XP or WINDOWS VISTA, a LINUX operating system available from many vendors or a UNIX operating system, also available from many vendors including HEWLETT-PACKARD, Inc. or SUN MICROSYSTEMS, Inc.
Application software 142 comprises one or more executable applications with image display presentation or storage requirements, such as word processing software, spreadsheets, financial data presentation, video or photo display or editing software, graphics software such as Computer Aided Design (CAD) software, Desktop Publishing (DTP) software, digital signage software or the like.
Image sequence memory 144 comprises memory associated with the rendering, drawing or composition of one or more output images (e.g., image sequences) by the operating system, application software, graphics drivers such as OPENGL from SILICON GRAPHICS corporation or DIRECTX from MICROSOFT CORPORATION or image composition software such as the WINDOWS VISTA Desktop Windows Manager (DWM) or QUARTZ from APPLE CORPORATION. In various embodiments, memory 144 comprises at least one of a drawing command queue, a raster frame buffer, front and back frame buffers, a partial display image buffer (for example, comprising image data associated with part of a display image such as a video, picture, background or text window), or an image buffer associated with a display image spanning multiple display windows wherein each window corresponds to a separate display of a multi-display system. In some such embodiments, an image sequence spans multiple displays. In other such embodiments, application software 142 generates multiple image sequences spanning multiple displays, for example one image sequence per display.
In an embodiment, update manager 146 comprises machine-executable software executed in virtual machine 140, or, alternatively, at least in part in virtual machine 140. In some alternative embodiments, update manager 146 comprises both a virtual machine component and a component in the hypervisor domain, (i.e., in such alternative embodiments the update manager 146 spans both the virtual machine 140 and the hypervisor 120), the hypervisor component comprising various functions of the update manager 146 and providing an interface to a hypervisor-based transfer scheduler, such as scheduler 130 discussed below. Update manager 146 monitors the status of image data in memory 144 (i.e., update manager 146 monitors erratic spatial and temporal updates to a corresponding image sequence) and provides status information associated with the image data, such as image sequence availability, to transfer scheduler 130 so that the transfer of image data from memory 144 to the image processing system is timed to avoid image tearing. In various embodiments, update manager 146 provides timing functions, such as frame timing, to graphics software (e.g., application software 142) in the absence of timing signals provided by a local display controller of computer 102 (such as Vertical Retrace (VSYNC) signal) used by graphics software to determine frame buffer update timing. An embodiment of update manager 146 is depicted in
In alternative embodiments to system 100, parts or all of update manager 146 comprise machine executable software or hardware logic executed by at least one of a chipset, GPU, or processor 110.
According to various virtualized embodiments, hypervisor 120 manages the virtual machines 140 (and other virtual machines if present in computer 102). Generally, the hypervisor 120 (alternatively referred to as a ‘Virtualization Manager’ in some embodiments) coordinates the execution schedule of the virtual machines 140 and the interaction of the virtual machines 140 and various hardware components, for example by ensuring non-overlapping memory ranges available to each VM 140 in the system. Examples of commercially available hypervisor products include VMWARE ESX SERVER from EMC Corporation, XENSERVER from CITRIX Corporation, HYPER-V from MICROSOFT Corporation and products such as the VIRTUAL IRON hypervisor based on open source XEN source code.
Hypervisor 120 comprises VM scheduling software, for example various XEN embodiments comprise one of a ‘Borrowed Virtual Time (BVT)’, Atropos, round robin or sEDF schedulers known the art. An embodiment of VMWARE ESX 3.0 comprises a Distributed Resource Scheduler (DRS) which dynamically allocates and balances computing capacity across collections of hardware resources aggregated into logical resource pools. DRS monitors utilization across resource pools and allocates available resources among virtual machines.
In some embodiments, hypervisor 120 comprises a VM state monitor that monitors VM execution schedules, for example by maintaining a log of start and end timestamps when each VM 140 is swapped in and out from an execution state or by maintaining address traps that characterize image sequence memory accesses. In some such embodiments, execution timing information or image memory access information is provided to transfer scheduler 130 which in turn uses the execution timing information to adapt transfer priorities.
It will be appreciated by those of ordinary skill in the art that hypervisor 120 further comprises other functions such as resource manager, address manager, virtual machine monitors, distributed VM file system, network stack, virtual network interface, storage stack, device drivers and hardware interface drivers omitted from
In an embodiment, transfer scheduler 130 comprises machine-executable software executed at least in part in hypervisor 120. Transfer scheduler 130 determines the timing for the transfer of image data from image sequence memory (ref. memory 144) based on image status information, such as image sequence availability provided by the update managers (ref. update manager 146), communication resource availability information provided by downstream image transfer means described below, and other resource allocation information such as other priority requirements. An embodiment of transfer scheduler 130 is depicted in
In some embodiments such as various XEN-based paravirtualization environments, an Input/Output (I/O) VM is also present in memory 112. In some such paravirtualized embodiments, driver software is implemented as paired components split between the virtual machines and the IOVM using front-end (FE) and back-end (BE) driver structures know to the art. In some such embodiments, transfer scheduler 130 is located in the IOVM rather than the hypervisor. In other embodiments, update managers 146 comprise FE and BE components, enabling efficient communication coupling with the transfer scheduler.
It will be recognized by those skilled in the art that some embodiments of memory 112 further comprise other application software, operating system components, drivers, administrative software and the like, not depicted in
In various embodiments, image transfer device 116 comprises an image processing system 160 and a network interface 170, which collectively operate to encode and communicate image data from computer 102 to the remote computers 190. In some embodiments, the image processing system 160 and network interface 170 of image transfer device 116 may be co-located on a single physical device, such as an Application Specific Integrated Circuit (ASIC) or System on Chip (SoC) device. In other embodiments, image transfer means comprising image processing system 160 and network interface 170 are implemented as separate physical devices coupled by some form of communication bus such as a PCI-Express bus or alternative peripheral device interconnect.
In some embodiments, communications resource availability, such as network bandwidth and encoding resource availability, is provided by image transfer device 116 to transfer scheduler 130 to aid timing and prioritization of image capture from memory 112. An embodiment of image processing system 160 is depicted in
In various embodiments, processor 110, memory 112, system 160, and interface 170 are coupled with the aid of support circuits 114. Support circuits 114 include at least one of north bridge, south bridge, chipset, power supplies, clock circuits, data registers, I/O interfaces, and network interfaces. In other embodiments, support circuits 114 include at least one of address, control, interrupt and/or data connections, controllers, data buffers, drivers, repeaters, and receivers to enable appropriate communications between processor 110, memory 112, processing system 160, and interface 170.
In some embodiments, support circuits 114 further incorporate hardware-based virtualization management features such as emulated register sets, address translation tables, interrupt tables, PCI I/O virtualization (IOV) features and/or I/O memory management unit (IOMMU) to enable DMA operations between image sequence memory 144 and image processing system 160.
According to various embodiments, interconnect 118 is, for example but not limited to, one or more buses such as a Peripheral Component Interconnect (PCI) bus, a PCI-EXPRESS bus, a HYPERTRANSPORT bus, DVI bus, DisplayPort bus or other wired, optical or wireless connections, as is known in the art. Interconnect 118 has additional elements, such as controllers, data buffers, drivers, repeaters, and receivers, to enable communications but omitted from
The network 180 comprises a communication system (e.g., the Internet, local area network (LAN), wide area network (WAN), and the like) that connects computer systems completely by wire, cable, fiber optic, and/or wireless links facilitated by various types of well-known network elements, such as hubs, switches, routers, and the like. In one embodiment, the network 180 may be a shared packet switched network that employs various well-known protocols (e.g., TCP/IP and the like) to communicate information amongst the network resources. For example, in various embodiments, the network 180 employs part of the Internet.
Remote computer 190 is generally any form of computing device that can display or store image data and connect to network 180. For example, in an embodiment, remote computer 190 is a terminal in a networked computer system (e.g., in an embodiment, system 100 is a remote computing system). Such remote terminals include thin clients, personal computers, workstations, Personal Digital Assistants (PDAs), wireless devices, storage systems and the like. In some embodiments, remote computer 190 comprises an image decoder that decodes image information for presentation on display 192. In other embodiments, remote computer 190 also comprises one or more peripheral devices such as mouse, keyboard and/or other well known peripherals and computer 190 presents a remote Graphical User Interface (GUI) on display 192.
Display 192 is any screen type device (e.g., liquid crystal display (LCD), cathode ray tube (CRT), plasma display, and the like) that displays images. In some embodiments, the remote computer 190 connects to a plurality of displays, for example using multiple separate display connections such as Digital Visual Interface (DVI) or a multiplexed display connection such as DisplayPort.
In an embodiment, drawing command analyzer 202 inspects drawing commands, rendering operations or video commands issued by the operating system or application software to rendering software or a GPU.
Analyzer 202 extracts image change information, such as the exact location of pixels in sequence memory 144 (ref
In various embodiments, analyzer 202 extracts image type information (such as video type, picture type, text type or background type), display refresh rate, window manager state information (e.g. information related to the state of MICROSOFT VISTA DESKTOP WINDOW MANAGER), and current draw state from the drawing commands. Analyzer 202 derives image status from this information which is stored as state information 220, for example as a table comprising image status information for defined frames, blocks and/or other image surfaces of image sequence memory 144.
In various embodiments, the current draw state is monitored to prevent the capture and communication of partially drawn image regions which results in visible display tearing. In some such embodiments, the optimum time to perform image copy operations for a composed display image is determined by recognizing drawing completion commands such as completion of OpenGL “Swapbuffer” or “Flushbuffer” commands. Draw state for off-screen buffers, windowed image areas or other defined pre-composed image buffers is determined by recognizing the completion of canonical commands such as window updates.
In other embodiments, analyzer 202 determines update rates for an image frame, window or other region of a display image by tracking the temporal frequency of image updates.
In an embodiment, state information 220 comprises image status determined by the analysis of drawing commands and other VM state information useful in determining display update priorities. For example, in an embodiment, state information comprises pointer information, such as pointer location information, so that image regions associated with pointer location or activity receive update priority. In another embodiment, state information 220 comprises cursor location information so that image regions associated with Human Interface Device (HID) events/activity, such as keyboard events, receive update priority.
In an embodiment, drawing command sequencer 230 influences image update operations by manipulating drawing commands prior to execution. For example, in an embodiment, analyzer 202 or sequencer 230 extracts commands from the command queue. The extracted commands are then delayed, re-ordered or modified based on the timing of image copy operations initiated by transfer scheduler 130 in
In another embodiment, sequencer 230 suspends the drawing thread, for example by sending it to ‘sleep’ immediately following a frame or region update operation, freeing processing resources to execute other processes during the period that the frame or image region is being copied and optionally until an updated image is required by the image transfer device 116 in
In an embodiment, timing function 240 provides select display controller information, such as frame timing, to drawing software. In an embodiment, timing function 240 emulates a Vertical Synchronization (VSYNC) interrupt signal which is triggered immediately after sequence memory 144 in
In other embodiments, a GPU generates a VSYNC signal which is distributed to the update manager 1461 and 1462 and used as a time base. In other embodiments, the display refresh rate of display 192 is determined (for example by determining the display attributes) and used to specify the timing interval of an emulated local VSYNC interrupt. In a select embodiment, an endpoint such as one of remote computer 190 generates a display timing signal and display timing information is communicated back to timing function 240 so that drawing operations and/or image capture can be timed to meet the remote timing requirements. In other embodiments, timing function 240 uses operating system timing as a basis for determining timing of frame or region updates. In other embodiments, timing function 240 extracts audio timing information from audio software associated with application software 142 to enable alignment between frame timing and audio signals which ensures lip synchronization is maintained. In another select embodiment, the endpoint returns audio timing information back to timing function 240.
In an embodiment, change detect function 250 comprises image memory update detection means such as a memory access trap. In an exemplary embodiment in which processor 110 coupled to memory 112 comprises hardware-assisted virtualization features such an INTEL VT technology, function 250 comprises machine-executable instructions enabled to program the Memory Management Unit (MMU) to generate exceptions whenever drawing software updates the image sequence memory. Exceptions are trapped in hypervisor 120 or VM 140 for analysis to determine which areas of the frame buffer have been updated. In one embodiment, memory access instructions are modified such that change detect function 250 is enabled to record sequence memory update operations.
In an embodiment, transfer scheduler 130 comprises resource association and allocation information 302 such as a table that maintains and tracks associations between the image data of image sequence memory 144 and various resource attributes such as display attributes, user attributes or attributes of communication resources so that communication resource utilization can be managed on at least one of a per VM basis, a per-user basis or a per-endpoint basis.
In an embodiment, user priority attributes are used to prioritize display updates according to priority assigned to the application or user of a VM, for example a CAD application user may be assigned a higher transfer priority than a user of a word processing application to ensure responsive performance of the CAD software. As another example, a video application is assigned a lower priority to ensure fair network bandwidth allocation.
In another embodiment image type attributes (such as picture type, video type, text type etc. determined by drawing command analysis) are associated with image frames or regions of image sequence memory 144 so that the usage of shared communication resources is optimized. For example, an embodiment of image transfer device 116 in
In other embodiments, the general availability of communications resources such as I/O bus availability, network bandwidth availability, remote connection availability, remote connection performance, memory or processing resource availability of image processing system 160 in
In an embodiment, transfer scheduler 130 comprises image sequence priority list 310, for example an ordered list of transfer priorities based on at least one of image status, resource allocation as determined from resource association and allocation information 302, user priority, image update preferences, content-based priority (for example based on image type), display refresh priority or a sequenced schedule requirement (such as a constant frame rate demanded by a video application). An embodiment of a method for scheduling the transfer of image updates is depicted in
In an embodiment, transfer scheduler 130 comprises Update Manager Interface 320 to update managers 1461 and 1462 (and other update managers in embodiments with additional VMs). Update Manager Interface 320 receives image status information, for example a list of presentable (i.e. “ready” for communication) tear-free image frames or other image surfaces of image sequence memory. In various embodiments, the image status information is communicated using a shared memory structure or virtual communication channel known to the art. In an embodiment, Update Manager Interface 320 also communicates transfer timing information to the update managers, for example as a simple semaphore indicating immediate transfer timing or a timing schedule indicating future transfer timing requirements.
In some embodiments, transfer scheduler 130 predicts future communications resource availability based on communications resource usage history stored in transfer history table 330. For example, in an embodiment, a video application periodically updates image sequence memory 144 and update manager 146 periodically indicates to transfer scheduler 130 the availability of a presentable tear-free video image frame. Transfer scheduler 130 monitors the resource allocation associated with encoding and communicating the periodic image sequence and is enabled to schedule future image transfers associated with other images in conjunction with a reserved communications resource allocation for the predicted video sequence.
In an embodiment, transfer scheduler 130 comprises hypervisor scheduler interface 340 enabled to indicate VM scheduling preferences (as determined by transfer scheduler 130) to scheduling software of hypervisor 120. As one example, interface 340 indicates that a VM should be de-queued or de-prioritized once a presentable image is available in order to prevent additional drawing operations ahead of the image transfer. As another example, a de-scheduled VM is prioritized for service ahead of an expected frame update requirement associated with a periodic video image sequence or remote display refresh timing requirement. As another example, a de-scheduled VM is prioritized for service when peripheral device data associated with the VM is detected by network interface 170 in
In an embodiment, transfer scheduler 130 comprises transfer system interface 350 to image transfer device 116 in
In select embodiments, transfer scheduler 130 comprises means for determining the timing associated with the completion of image sequence transfers onto the network or to a remote endpoint, such as a transfer completion flag (TCF) 360. Transfer completion flag 360 enables a schedule for the encoding and transfer of new image updates to be coordinated with the completion of previous transfers. In one exemplary case, transfer completion flag 360 is set when a queue monitor that monitors the depth of the network transmit queue or the encoded output image queue registers a specified network transmit queue depth. In a second exemplary case, transfer completion flag 360 is set when a transfer completion signal is received from the remote computer.
In an embodiment, image processing system 160 comprises encoding resources 402 and DMAC resources 410 coupled to image processing memory 420 by local interconnect 402 and coupled to communication bus 118 of computer 102 in
In some embodiments, a means to obtain image updates comprises the DMAC resources 410; alternatively, the means to obtain image updates may comprise DMAC resources associated with at least one of processor 110, a chipset associated with processor 110 or image processing system 160, the DMAC resources coupled between memory 112 and image processing memory, and further operating in conjunction with transfer scheduler 130 and update manager 146 described. In a select embodiment, the means to obtain image updates comprises one or more sets of machine readable instructions executed by processor 110 enabled to write image updates to image processing system 160.
According to various embodiments, bus 402 is one or more of: a Peripheral Component Interconnect (PCI) bus; a PCI-EXPRESS bus; a HYPERTRANSPORT bus; an Advanced Microprocessor Bus Architecture (AMBA®) bus; and any other connections, including wired, wireless, and optical connections, for coupling image encoder resources. In some embodiments, bus 402 includes communications elements, such as controllers, data buffers and/or registers, drivers, repeaters, and receivers. In some embodiments, bus 402 includes address, control, and data connections to enable communications among components. According to various embodiments, bus 402 is one or more of: independent of bus 118 in
Encoding resources 402 performs image encoding operations, such as one or more of image analysis (e.g. image type decomposition), image transform functions, text encoding, picture encoding, background encoding, progressive quantization, and binary encoding. In some embodiments, encoding resources 402 is implemented, at least in part, as a set of computer-executable instructions. According to various embodiments, encoding resources 402 includes one or more of: a programmable embedded digital media processor, such as a TMS320DM64x DaVinci™ digital media processor available from TEXAS INSTRUMENTS; a PNX1300 NEXPERIA processor from NXP Semiconductors; a Field Programmable Gate Array (FPGA) or an Application Specific Integrated Circuit (ASIC) configured, at least in part, as a logic circuit to perform image encoding; other processors and/or electronic hardware suitable for performing image encoding; and any combination of the foregoing.
Generally, encoding resources 402 comprises a set of independent and/or shared image encoding elements enabled to apply one or more encoding techniques to a plurality of independent image updates, display surfaces or frames associated with independent operating environments (ref. environments VM 1401 and VM 1402 in
In some embodiments, encoding resources 402 comprises one or more independent or shared decomposition filters that decomposes image frames, sub-frames such as blocks or other defined image regions into different image types such as background, text, picture, video or object layers based on spatial and temporal features such as contrast, color content or other suitable parameters. According to some embodiments, images are further decomposed into different layers based on text recognition methods known to the art or analysis of drawing commands executed by processor 110 in
The image processing memory 420 comprises random access memory such as Dynamic Random Access Memory (DRAM), synchronous DRAM or video DRAM, read only memory, removable disk memory, flash memory, and various combinations of these types of memory. According to various embodiments, memory 420 comprises processing order list 422, input image data 424, encoded image data 426 and resource list 428 in addition to general data structures including intermediate encoding results and state information, registers and machine-readable instructions associated with the execution of image encoding operations. In some embodiments, memory 420 stores one or more DMA transfer lists executed by DMAC resources 410. In some embodiments, at least part of memory 420 is distributed, for example coupled to specified encoding resources.
In various embodiments, processing order list 422 received from transfer scheduler 130 in
In an embodiment, DMAC resources 410 comprise one or more image capture resources, such as one or more DMA engines, that copy image updates from sequence memory 144 to input image data region 424 of memory 420 by executing one or more DMA transfer lists as prioritized by processing order list 422. In another embodiment, DMAC resources 410 transfer image updates directly to encoding resources 402 without intermediate storage. In some such embodiments, encoding resources 402 performs in-line pre-processing functions such as image analysis (for example, change detection processing) before storing selective input image data 424.
In an embodiment, encoded image data generated by encoding resources 402 is stored as encoded image data 426 of image processing memory 420, for example as one or more output image queues, each image queue associated with a different communication endpoint such as one of the remote computers 190 in
Controller 430 is generally an embedded microcontroller or microprocessor such as an Advanced RISC Machine (ARM), Microprocessor without Interlocked Pipeline Stages (MIPS) or another type of embedded processor tasked with initializing image processing system 160, allocating local resources, managing communications errors, and reporting image transfer status, error conditions and communication resource availability information back to transfer scheduler 130 in
In various embodiments, controller 430 maintains resource list 428 comprising a list of shared encoding resources, availability information based on current encoder loading and image transfer status associated with in-queue image updates for example including transfer latency associated with image data 424 and image data 426. Resource availability information and image transfer status is conveyed to transfer scheduler 130 in
In some embodiments, display attributes such as display refresh timing are provided to image processing system 160 by remote computer 190 in
According to various embodiments, remote computer 190 further comprised one or more of: Human Interface Devices (HIDs) such as mouse and keyboard; peripheral components, such as microphones or speakers; other interfaces, such as a USB interface; and other components, interfaces, and/or connections associated with computer systems, desktop computers, and/or processors. In some embodiments, remote computer 190 is implemented as a stand-alone system, such as a thin client or a desktop computer. In some embodiments, such as some stand-alone embodiments, remote computer system 190 also includes mechanical housing components, connectors, power supplies, and other components not illustrated in
According to various embodiments, bus 502 is one or more of: a Peripheral Component Interconnect (PCI) bus; a PCI-Express™ bus; a HyperTransport™ bus; an Advanced Microprocessor Bus Architecture (AMBA®) bus; and any other connections, including wired, wireless, and optical connections, for coupling components of remote computer 190. In some embodiments, bus 502 includes communications elements, such as controllers, data buffers and/or registers, drivers, repeaters, and receivers. In various embodiments, bus 502 includes address, control, and data connections to enable communications among components of remote computer 190. According to various embodiments, bus 502 is one or more of: a single bus; a plurality of independent busses, with some of the components of remote computer 190 coupled to more than one of the independent busses; a plurality of bridged busses; a fabric, such as HyperTransport™ or InfiniBand™ and any other one or more busses configured to couple the components of remote computer 190.
In some embodiments, network interface 504 provides communicative coupling between remote computer 190 and host computer 102 of
In various embodiments, controller 510 provides control and/or management functions for remote computer 190. In some such embodiments, controller 510 includes one or more of: a microcontroller, such as those manufactured by Microchip; a 32-bit CPU; a 64-bit CPU; an AMD CPU, such as an Opteron™ or Athlon™ CPU; an Intel CPU, such as a Peryn™, Xeon™ or Pentium™ or other x86 CPU; a SPARC™ microprocessor, such as those manufactured by Sun Microsystems Inc.; a PowerPC™ microprocessor, such as those manufactured by Motorola or IBM; and any other processor or computing device. In some embodiments where remote computer 190 includes an ASIC or an FPGA, controller 510 comprises an embedded processor, such as an X86 class, MIPS, an ARM, or another type of embedded processor.
According to various embodiments, controller 510 initializes one or more of: bus 502, network interface 504, decoder 520, memory 530, display interface 540, and other components of remote computer 190. In some embodiments, controller 510 establishes a management connection with host computer 102 of
In various embodiments, decoder 520 performs image decoding, such as decoding of image updates, frames or sequences. In some embodiments, decoder 520 performs operations such as binary decoding, inverse image transformation such as inverse wavelet or inverse DCT transformation and/or video decoding. In further embodiments, decoder 520 is implemented, at least in part, as a set of computer-executable instructions. According to various embodiments, decoder 520 includes one or more of: a programmable embedded digital media processor, such as a TMS320DM64x DaVinci™ digital media processor available from Texas Instruments; a PNX1300 Nexperia™ processor from NXP Semiconductors; a Field Programmable Gate Array (FPGA) or an Application Specific Integrated Circuit (ASIC) configured, at least in part, as a logic circuit to perform image decoding; and other processors and/or electronic hardware suitable for performing image decoding; software executing on and/or in conjunction with a processor, including any of the foregoing; and any combination of the foregoing.
In some embodiments, decoder 520 includes binary decoding resources performing one or more of: entropy arithmetic decoding; and a lossless data decompression technique. In further embodiments, the operation of the binary decoder is complementary to binary encoding performed by image processing system 160 in
In some embodiments where remote computer 190 includes a processor (such as a CPU, a microprocessor, a microcontroller, or a programmable media processor), resources of the processor are used, at least in part, to implement one or more functions of components of remote computer 190, such as functions of network interface 504, decoder 520 and display interface 540.
According to various embodiments, memory 530 includes one or more of: electronic, magnetic, optical, and/or other types of storage media; volatile computer-readable media, such as RAM, DRAM, and SRAM; and nonvolatile computer-readable media, such as ROM, hard drive, tape, CDROM, DVDROM, magneto-optical disks, EPROM, EEPROM, Flash EPROM. In various embodiments, memory 530 stores information such as received image update information, decoded image information, decoded raster image information in a format accessible to display interface 540, and information associated with controller 510, such as software and/or data used by controller 510. In further embodiments, memory 530 includes a type of ROM or other non-volatile media used to store software, such as programs or firmware, executed by controller 510. In various embodiments, memory 530 is partitioned and/or distributed into system and frame buffer partitions, wherein the frame buffer partition is accessible by display interface 540. In various embodiments, memory 530 uses different busses for coupling with network interface 504, controller 510, decode 520, display interface 540, and/or other components of remote computer 190. In further embodiments, memory 530 includes control logic for arbitrating access to memory 530 among the components of remote computer 190.
Display interface 540 accesses display information, such as decoded raster image information, from memory 530, and provides a display signal, such as a raster signal, for display 192 in
In some embodiments, display interface 540 determines attributes of display 192 in
Support circuits 550 include at least one of power supplies, clock circuits, data registers, I/O interfaces, network interfaces, and the like. The support circuits 550 support the functionality of bus 502, network interface 504, decoder 520, memory 530, display interface 540, and other components of remote computer 190.
In some embodiments, remote computer 190 comprises a storage system interface such as a Redundant Array of Inexpensive Disks (RAID), Small Computer System Interface (SCSI), FIREWIRE, Integrated Drive Electronics (IDE), INFINIBAND, Ethernet interface or the like enabled to store at least one of encoded or decoded image updates from computer 102 in
In some embodiments, various combinations of all or portions of functions performed by a computer (such as computer 102 or remote computer 190 of
Process 600 starts (“Start” 602) and proceeds to step 610 (“Determine and Prioritize Resources”). According to various embodiments step 610 comprises determining the availability of shared and/or individual communications resources required to communicate image data associated with one or more image sequences. In some embodiments, the availability of such resources is determined and the resources prioritized; in other embodiments, the availability of such resources is determined but the resources are not prioritized and in other embodiments the availability of resources is assumed and process 600 bypasses step 610 and proceeds to step 620.
Examples of shared communications resources comprise image processing resources, encoding resources, memory, data busses, and the like. Such shared communication resources are used on a time-sharing basis to support the communication of image sequences associated with different virtual machines. In an embodiment, an image processing system such as processing system 160 in
Individual communications resources comprise resources required to communicate part of any one image sequence, for example image processing resources, memory, DMAC resources, network queues and the like for communicating any one image sequence. In some embodiments, such as a WAN connection used as a shared resource comprising multiple VLAN overlays, each VLAN is associated with a different connection to a different remote computer. In some such embodiments, each VLAN is managed as a separate individual resource, for example by managing the bandwidth associated with the VLAN.
In various embodiments, both shared and individual communications resources are subject to communications bottlenecks and therefore are factors in prioritizing communications. In the case of shared resources, the processing of different image sequences must be scheduled to optimize the usage of the resource and prevent excessive pre-processing queue depth which causes latency and communication of obsolete image data. In an embodiment, future usage requirements (e.g., availability) of shared resources is predicted, for example based on determined image generation history or historic usage patterns including frequency and duration of usage (e.g., in the case of an image sequence comprising video content generated at a predictable video frame rate, a video encoding resource may be required at the predicted periodic schedule). In some embodiment, generation of image sequence portions is controlled based on some or all of the predicted availability information.
In the case of an individual resource such as a low bandwidth WAN connection to a remote computer, excessive queuing results in both added latency and transmission of out-of-date content. By minimizing the depth of the output queue to the network and minimizing the delay between when an image is updated by software and when it is captured, the transmission of out-of-date image data is limited or avoided.
Process 600 proceeds to step 620 (“Determine and Prioritize Ready Portions”). According to select embodiments, step 620 comprises determining which portions of which image sequences are available for communication; e.g., the generation of updates to each image sequence may be independently monitored to determine the available image portions. In some embodiments, an image portion is deemed “available” (or “ready” for communication) when a frame buffer in image sequence memory that maintains the image portion has been updated since the previous version of the image portion, generally at the same location, was captured and communicated.
In other embodiments, an image portion is deemed “available” based on an update status indication that the image portion is in a tear-free state, for example as determined by a period of inactive image generation, interpretation of drawing commands, or analysis of update location information (e.g. completion of a raster update). In other embodiments, the update status indicates when all image updates associated with the generation of a static image have been completed so that tear-free capture is enabled.
In other embodiments, the update status indicates capture timing (i.e. tear-free image availability) immediately following temporary suspension or re-ordering of drawing operations or commands.
In other embodiments, an image portion is deemed ready for communication by monitoring image update timing and/or image update location. In some such embodiments, an image region is ready for communication immediately following an update. In another such embodiment, the image region is predicted to be ready for communication based on a history of previous periodic updates by drawing software.
In further embodiments, the elapsed time period between when a region of a frame buffer is updated and when the region of the frame buffer is communicated is monitored. When a region is updated and a determined period of time has elapsed, it is deemed ready for communication. In other embodiments, different regions of different image sequences are prioritized based on the elapsed time between update and capture for each image sequence.
In some embodiments in which image portions associated with different image sequences are all ready, the image sequences are prioritized for communication and selected using one or more prioritization metrics such as communication or communication completion recentness, I/O recentness, update recentness, analysis recentness or a review of pending updates. In an embodiment, a communication recentness metric grants the most recently communicated portion the lowest priority and the least recently communicated portion the highest priority, an analysis recentness metric grants the portion most recently analyzed (for an image update) the lowest priority and the portion least recently analyzed the highest priority. A review of available or pending updates grants the image sequence with the oldest or most pending updates the highest priority. Numerous other prioritization metrics are contemplated such as granting image sequence priority based on the area of change, user administrative criteria, user input such as HID events (e.g. mouse movement), image content attributes, round robin priority, a network fairness priority, a display refresh priority, content update priorities, display configuration priorities and the like. In some embodiments, a single VM supports multiple image sequences, each sequence associated with a separate display of a multiple-display configuration (such as a desktop comprising a quad display configuration). In some such embodiments, different image portions associated with the same multiple-display configuration are granted similar or equal priority such that the entire system is updated at essentially the same time.
In other embodiments, image sequences are scheduled and image sequence priority granted based on predicted, estimated or previously determined communication timing requirements for each image sequence or updated portion ready for communication, including a prediction of when a resource will be available and how long the resource will be available. In some embodiments, the communication priority is based on the elapsed time since the image portion was deemed available for communication. In other embodiments, the priority is associated with the timing of anticipated updates. For example, an initial high priority decreases over time if the portion is not communicated, in anticipation of an imminent update of the portion. In some such cases, the portion will be overwritten by the update rather than being communicated once the priority has dropped too low compared to other outstanding priorities, resulting in a dropped portion or image frame. In some embodiments, the total communication timing comprises a component in which the image portion is captured (i.e. obtained from image sequence memory), a second component in which the image portion is encoded, and a third component in which the encoded image portion is transmitted. In one such embodiment, a small image update (for example, a small pointer update) associated with a first image sequence is prioritized over a large screen update (for example an entire display image change) associated with a second image sequence based on the shorter duration of the encoding time component associated with the first image update.
Process 600 proceeds to step 630 (“Communicate Prioritized Portion(s)”). According to various embodiments step 630 comprises selecting, capturing, encoding, and transmitting one or more image portions to a remote computer such as one of computers 190 in
In some embodiments, process 600 proceeds to step 640 (“De-prioritize Image Sequence”) in which subsequent drawing operations associated with the image sequence communicated in step 630 are de-prioritized or restricted. In an embodiment, the VM associated with the communicated image sequence is de-scheduled by scheduling software in the hypervisor. In another embodiment, the drawing thread of the VM associated with the image sequence is forced into a sleep mode for a determined period. In some such embodiments, the determined period is based on the timing of future expected updates (e.g. a video frame refresh period). In other embodiments, a recently communicated image sequence is not necessarily de-prioritized and process 600 proceeds directly to step 650.
Process 600 then proceeds to step 650 (“Status”) in which method 600 either proceeds to step 660 (“End”), for example when all image sequences have been terminated or method 600 repeats from step 610 in case 652 if additional image information is available or expected to become available for communication.
Image generation control functions 7121, 7122 and 712N comprising, in an embodiment, update manager 146 in
Individual image capture control function 732, comprising image transfer control resources such as transfer scheduler 130 in
Individual image encode control function 752 comprising controller 430 in
Individual network bandwidth control function 762 is tasked with managing the bandwidth allocated to each encoded image update utilizing shared network resource 770 in the presence of unrelated network traffic 772 utilizing shared network resource 770, and further in consideration of individual network resources 7801, 7802 and 780N associated with each independent downstream image path to a remote computer 190 in
Resource control flow in direction 704 generally communicates resource availability from the individual network resources 780 towards image generation resource 710 in order to optimize resource utilization and optimize data flow and processing priorities in the egress direction 702. By enabling a backpressure associated with resource availability, bandwidth consumption and priorities of egress data may be exactly matched to the available resources. As an exemplary case of a system comprising a host computer 102 in
The following example embodiments, including at least some explicitly enumerated as “ECs” (Example Combinations), provide additional description of a variety of embodiment types in accordance with the concepts described herein; these examples are not meant to be mutually exclusive, exhaustive, or restrictive; and the invention is not limited to these example embodiments but rather encompasses all possible modifications and variations within the scope of the issued claims.
EC1. A method for communicating a plurality of image sequences comprising repeated acts of determining at least one portion of the plurality of image sequences comprises an available communication resource and image content ready for communication; and communicating at least one of the at least one portion of the plurality of image sequences; wherein at least one of the determining and the communicating is based on a first priority.
EC2. The method of EC1 further comprising de-prioritizing subsequent drawing operations associated with the communicated at least one of the at least one portion of the plurality of image sequences.
EC10. The available communication resource of EC1 comprising at least one of a shared communication resource or an individual communication resource.
EC10a. The method of EC10 where in the shared communication resource is unavailable for communicating other portions of the plurality of image sequences while performing the communicating.
EC11. The shared communication resource of EC10 comprising an image processing resource.
EC12. The image processing resource of EC11 comprising at least one of an image capture resource, an encoder resource or a memory resource.
EC12a. The image capture resource of claim EC12 comprising an image analysis resource.
EC13. The encoder resource of EC12 comprising an encoder specified to encode an image type.
EC14. The shared communication resource of EC10 comprising a data bus.
EC15. The shared communication resource of EC10 comprising a network segment.
EC16. The shared communication resource of EC10 comprising a shared communication bandwidth under management of a traffic shaper.
EC17. The individual communication resource of EC10 comprising a network queue.
EC18. The network queue of EC17 associated with a low bandwidth WAN connection.
EC19. The individual communication resource of EC10 comprising a managed communication bandwidth.
EC20. The method of EC1 wherein determining the at least one portion of the plurality of image sequences comprises an available communication resource further comprises predicting a period for the available communication resource, the period used to synchronize utilization of the available communication resources for communicating at least one other portion of the plurality of image sequences.
EC30. The method of EC1 wherein determining the at least one portion of the plurality of image sequences comprises an image ready for communication comprises determining that the at least one portion is available.
EC31. The method of EC1 wherein determining the at least one portion of the plurality of image sequences comprises an image ready for communication comprises determining that a frame buffer enabled to maintain a current image associated with the at least one portion has been updated since a previous communication, the previous communication related to the at least one portion.
EC32. The method of EC1 wherein determining the at least one portion of the plurality of image sequences comprises an image ready for communication comprises determining an update status for the at least one portion.
EC33. The update status of EC32 comprising a tear-free state for the at least one portion in which essentially all image updates associated with a complete static image generation are completed.
EC34. The method of EC1 wherein determining the at least one portion of the plurality of image sequences comprises at least one of reordering drawing operations or suspending the drawing operations to ensure that the at least one portion is tear-free.
EC35. The method of EC1 wherein determining the at least one portion of the plurality of image sequences comprises an image ready for communication comprises interpreting at least one drawing command.
EC36. The method of EC1 wherein determining the at least one portion of the plurality of image sequences comprises an image ready for communication comprises monitoring at least one of image update timing or image update location.
EC37. The method of EC1 wherein determining the at least one portion of the plurality of image sequences comprises an image ready for communication comprises determining that a frame buffer enabled to maintain a current image associated with the at least one portion has been updated since a previous communication, the previous communication related to the at least one portion; and further determining that the frame buffer has not been updated for a define period of time.
EC38. The method of EC1 wherein the plurality of image sequences comprise at least one portion not ready for communication that was previously ready for communication.
EC39. The method of EC1 wherein communicating the at least one of the at least one portion of the plurality of image sequences comprises preventing updates to the at least one of the at least one portion of the plurality of image sequences while the at least one of the at least one portion of the plurality of image sequences is being captured.
EC40a. The method of EC1 wherein the first priority comprises a communication priority based on a duration following the determining the at least one portion of an image sequence is ready for communication.
EC40b. The method of EC1 wherein the first priority decreases with time when another update is expected in a predetermined period of time.
EC40c. The method of EC40b resultant in a dropped frame.
EC40d. The method of EC1 wherein the first priority comprises a communication priority based on a detected I/O event.
EC40e. The detected IO event of EC40d comprising a mouse event.
EC40. The method of EC1 wherein the first priority comprises a communication priority associated with the plurality of image sequences.
EC41. The method of EC1 wherein the first priority comprises a communication priority based on at least one of pending image updates or pending communication updates associated with the plurality of image sequences.
EC42. The method of EC1 wherein the first priority comprises an image sequence selection priority based on at least one of: communication recentness, analysis recentness or pending update status.
EC43. The method of EC1 wherein the first priority comprises a timing priority related to at least one of a first determined time to obtain the at least one portion, a second determined time to encode the at least one portion or a third determined time to transmit the at least one portion.
EC44. The method of EC1 wherein the first priority comprises performing the determining in a recentness order.
EC44a. The recentness order of EC44 associated with at least one of a recentness of image updates to each of the plurality of image sequences, a recentness of user I/O operations associated with each of the plurality of image sequences or a recentness of communication completion of each of the plurality of image sequences.
EC45. The recentness order of EC44 comprising ordering from a least recently communicated image sequence in the plurality to a most recently communicated image sequence in the plurality.
EC45a. The recentness order of EC44 comprising ordering from a least recently communicated image sequence in the plurality to a most recently communicated image, sequence in the plurality.
EC45b. The recentness order of EC44 comprising ordering from a least recent image portion of an image sequence portion determined ready for communication to most recent image portion of an image sequence portion determined ready for communication.
EC46. The recentness order of EC44 comprising ordering in compliance with at least one of a round robin priority, a network fairness priority or a priority associated with a display refresh requirement.
EC50. The method of EC1 wherein the communicating the at least one of the at least one portion comprises encoding the at least one of the at least one portion.
EC50a. The method of EC1 wherein the communicating the at least one of the at least one portion comprises obtaining the at least one of the at least one portion.
EC51. The method of EC1 wherein the communicating the at least one of the at least one portion comprises at least one of obtaining the at least one of the at least one portion, encoding the at least one of the at least one portion, transmitting the at least one of the at least one portion or queuing, for transmission, the at least one of the at least one portion.
EC52. The transmitting the at least one of the at least one portion of EC51 comprising transmitting the at least one of the at least one portion to a remote computer.
EC53. The method of EC1 wherein the communicating the at least one of the at least one portion comprises communicating the at least one of the at least one portion according to a content update priority associated with the at least one of the at least one portion.
EC53a. The method of EC1 wherein the communicating the at least one of the at least one portion comprises communicating the at least one of the at least one portion according to a display configuration priority.
EC54. The display configuration priority of EC53a associated with a multiple-display configuration.
EC55. The method of EC1 wherein the communicating the at least one of the at least one portion comprises communicating the at least one of the at least one portion responsive to user input.
EC55a. The determining the at least one portion of the plurality of image sequences of EC1 comprising determining the at least one portion responsive to user input.
EC56. The user input of EC55a comprising mouse movement.
EC57. The method of EC1 wherein the communicating the at least one of the at least one portion comprises communicating the at least one of the at least one portion according to the first priority, the first priority comprising a second priority associated with at least one of an amount of image change or an image content type.
EC58. The method of EC1 wherein the communicating the at least one of the at least one portion comprises communicating the at least one of the at least one portion according to the first priority, the first priority comprising a user priority associated with the plurality of image sequences.
EC100. Apparatus for communicating a plurality of image sequences comprising at least one update manager enabled to determine image transfer requirements for at least one portion of at least one in the plurality of image sequences; image transfer means enabled to communicate image memory contents to a plurality of end points, the image memory contents comprising the at least one portion of the at least one in the plurality of image sequences, the transfer means further enabled to determine image transfer status; and a transfer scheduler enabled to schedule the image transfer means to communicate the portion of the one in the plurality of image sequences based on the image transfer requirements and the image transfer status.
EC101. The at least one update manager of EC100 comprising a set of machine-readable instructions in memory, the set of machine-readable instructions executed by a processor, the processor further configured to execute drawing software associated with the plurality of image sequences.
EC102. The at least one update manager of EC101 executed at least in part in a virtual machine operative on the processor.
EC103. The at least one update manager of EC101 executed at least in part in a hypervisor domain operative on the processor.
EC104. The processor of EC101 comprising one of a single core processor, a multi-core processor or a multi-processing system.
EC105. The transfer scheduler of EC100 comprising a set of machine readable instructions.
EC106. The set of machine readable instructions of EC105 executed in a hypervisor domain of a processor, the processor further configured to execute drawing software associated with the plurality of image sequences.
EC107. The transfer scheduler of EC100 comprising a logic module independent of a processor, the processor configured to execute drawing software associated with the plurality of image sequences.
EC108. The logic module of EC107 co-located with the image transfer means.
EC109. The at least one update manager of EC100 further enabled to present the image transfer status to the transfer scheduler.
EC110. The image transfer means of EC100 independent of a processor configured to execute drawing software associated with the plurality of image sequences.
EC111. The image transfer means of EC100 enabled to encode the at least one portion of the at least one in the plurality of image sequences.
EC112. The image transfer status of EC100 comprising status of at least one communication path to at least one of the plurality of endpoints.
EC113. The image transfer means of EC100 comprising image capture means for capturing the at least one portion of the at least one in the plurality of image sequences.
EC120. The at least one update manager of EC100 comprising state information used to determine the image status
EC121. The state information of EC120 comprising at least one of buffer location information, image type information, frame update state information, window manager state information, pointer state information or refresh timing information.
EC122. The at least one update manager of EC100 comprising a drawing command analyzer to determine at least one of buffer location information, image type information, frame update state information, window manager state information, pointer state information or refresh timing information
EC123. The at least one update manager of EC100 comprising a drawing command sequencer enabled to manage tear-free image capture by reordering or delaying drawing commands.
EC124. The drawing command sequencer of EC123 enabled to return the drawing commands to a drawing software command queue.
EC125. The at least one update manager of EC100 comprising a means for detecting image memory updates.
EC126. The means for detecting image memory updates of EC125 comprising a trap enabled to analyze memory access operations.
EC127. The means for detecting image memory updates of EC125 enabled to utilize modified processor instructions to record image update area information.
EC130. The at least one update manager of EC100 comprising image change information associated with the one in the plurality of image sequences.
EC131. The at least one update manager of EC100 comprising at least one of location of changed pixels or attributes of changed pixels.
EC140. The at least one update manager of EC100 comprising a timing function enabled to generate frame timing information for drawing software associated with the at least one from the plurality of image sequences.
EC141. The frame timing information of EC140 associated with the communication of the at least part of one from the plurality of image sequences.
EC142. The frame timing information of EC140 associated with display timing information received from the image transfer means
EC143. The frame timing information of EC140 associated with display timing information communicated from at least one in the plurality of end points.
EC144. The frame timing information of EC140 associated with audio timing information received by the at least one update manager.
EC145. The frame timing information of EC140 associated with audio timing information received by the at least one in the plurality of end points.
EC146. The frame timing information of EC140 associated with operating system timing information received by the at least one update manager.
EC147. The frame timing information of EC140 associated with update timing information received from the transfer scheduler.
EC148. The at least one update manager of EC100 comprising a timing function enabled to suspend drawing software associated with the at least one from the plurality of image sequences.
EC150. The image transfer means of EC100 comprising a network interface, a means for obtaining image updates and an image processing system.
EC151. The means for obtaining image updates of EC150 comprising Direct Memory Access (DMA) resources coupled between a processor memory and an image processing memory.
EC152. The means for obtaining image updates of EC151 comprising a processor enabled to write image updates to the image processing memory.
EC153. The processor of EC152 further enabled to perform operations of the at least one update manager.
EC154. The image processing memory of EC151 comprising at least one processing order list.
EC155. The image processing system of EC150 comprising at least one shared encoding resource.
EC156. The image processing system of EC150 comprising storage for at least one input image associated with the at least one image sequence.
EC157. The image processing system of EC150 comprising storage for at least one encoded image associated with the at least one image sequence.
EC158. The network interface of EC150 independent of a second network interface associated with a processor enabled to render images associated with the at least one from the plurality of image sequences.
EC159. The image transfer means of EC100 enabled to provide the transfer scheduler with communications resource information.
EC160. The communications resource information of EC159 comprising at least one of shared encoding resource availability, input image queue status, encoded image queue status or a network queue status.
EC161. The image transfer means of EC100 enabled to provide the at least one update manager with display timing information.
EC170. The transfer scheduler of EC100 comprising resource association information.
EC171. The resource association information of EC170 comprising associations between the plurality of image sequences and at least one of display attributes, user attributes or communication resources.
EC172. The resource association information of EC171 enabled to track communications resource utilization.
EC173. The resource association information of EC171 enabled to manage communication resource utilization.
EC174. The resource association information of EC171 enabled to manage communication resource utilization per user and per resource.
EC175. The transfer scheduler of EC100 comprising image sequence priority information associated with the plurality of image sequences
EC176. The image sequence priority information of EC175 comprising information related to at least one of user interface service requirements, display refresh requirements, image update requirements, content-based priority information or communications resource availability information.
EC177. The image sequence priority information of EC175 comprising means for determining transfer completion timing of a previous portion associated with the plurality of image sequences.
EC178. The transfer scheduler of EC100 comprising image transfer history information supportive of predicting communications resource availability.
EC179. The transfer scheduler of EC100 comprising a scheduler interface enabled to provide priority information to hypervisor scheduling software.
EC180. The transfer scheduler of EC100 comprising a transfer control interface enabled to provide image transfer information to the image transfer means.
EC181. The transfer scheduler of EC100 comprising a status interface enabled to receive transfer status information from the image transfer means.
EC181. The transfer scheduler of EC100 comprising a timing interface enabled to provide update timing information to the at least one update manager.
EC200. A computer-readable medium containing instructions which, when executed by a computer, communicate a plurality of image sequences by performing prioritized repeated acts of determining that at least one portion of one in the plurality of image sequences has an available communication resource; determining that the at least one portion of the one in the plurality of image sequences is ready for communication; and communicating the at least one portion of the one in the plurality of image sequences.
EC400. (
While the foregoing is directed to embodiments of the present invention, other and further embodiments of the invention may be devised without departing from the basic scope thereof, and the scope thereof is determined by the claims that follow.
Patent | Priority | Assignee | Title |
10073328, | Oct 20 2011 | IMAX Corporation | Reducing angular spread in digital image projection |
10218891, | Feb 22 2017 | Canon Kabushiki Kaisha | Communication apparatus, control method for the same, and storage medium for priority image transfer |
10326968, | Oct 20 2011 | IMAX Corporation | Invisible or low perceptibility of image alignment in dual projection systems |
10353718, | Jul 23 2012 | OMNISSA, LLC | Providing access to a remote application via a web client |
10540077, | Dec 05 2014 | Amazon Technologies, Inc. | Conserving processing resources by controlling updates to damaged tiles of a content page |
10546038, | Dec 08 2014 | Amazon Technologies, Inc | Intelligent browser-based display tiling |
10795539, | Dec 10 2013 | International Business Machines Corporation | Visualizing migration of a resource of a distributed computing environment |
10795540, | Dec 10 2013 | International Business Machines Corporation | Visualizing migration of a resource of a distributed computing environment |
10871990, | Dec 28 2017 | Fujitsu Limited | Effective synchronous communication of screen information shared among information processing apparatuses |
11470139, | Jun 23 2020 | Comcast Cable Communications, LLC | Video encoding for low-concurrency linear channels |
11782745, | Jul 01 2014 | Lynx Software Technologies, Inc. | Systems and methods involving aspects of hardware virtualization such as separation kernel hypervisors, hypervisors, hypervisor guest context, hypervisor context, anti-fingerprinting and/or other features |
11782766, | May 15 2014 | Lynx Software Technologies, Inc. | Systems and methods involving features of hardware virtualization, hypervisor, APIs of interest, and/or other features |
11861005, | Apr 30 2020 | Lynx Software Technologies, Inc. | Systems and methods involving features of hardware virtualization such as separation kernel hypervisors, hypervisors, hypervisor guest context, hypervisor context, rootkit detection/prevention, and/or other features |
8995307, | Jun 18 2012 | Cisco Technology, Inc.; Cisco Technology, Inc | Multicast media notification for queued calls |
9099051, | Mar 02 2012 | ATI Technologies ULC | GPU display abstraction and emulation in a virtualization system |
9146884, | Dec 10 2009 | Microsoft Technology Licensing, LLC | Push pull adaptive capture |
9201644, | Sep 19 2011 | Amazon Technologies, Inc. | Distributed update service |
9305384, | Aug 16 2011 | IMAX Corporation | Hybrid image decomposition and projection |
9342291, | Nov 14 2012 | Amazon Technologies, Inc | Distributed update service |
9503711, | Oct 20 2011 | IMAX Corporation | Reducing angular spread in digital image projection |
9544349, | Jun 18 2012 | Cisco Technology, Inc. | Multicast media notification for queued calls |
9602687, | Apr 26 2013 | Canon Kabushiki Kaisha | Communication apparatus, method for controlling communication with an external apparatus using generated session and changed session, and program therefor |
9614892, | Jul 14 2011 | OMNISSA, LLC | Method and system for measuring display performance of a remote application |
9674263, | Dec 20 2013 | OMNISSA, LLC | Measurement of remote display responsiveness to application display changes |
9674265, | Nov 04 2013 | OMNISSA, LLC | Filtering unnecessary display updates for a networked client |
9674518, | Dec 20 2013 | OMNISSA, LLC | Measuring remote video display with embedded pixels |
9699247, | Jun 17 2014 | OMNISSA, LLC | User experience monitoring for application remoting |
9780992, | May 25 2012 | Schneider Electric Industries SAS | Method for managing the startup of instances of applications on virtual machines of a distributed network |
9851980, | Oct 22 2012 | Amazon Technologies, Inc | Distributed update service enabling update requests |
9961316, | Aug 16 2011 | IMAX Corporation | Hybrid image decomposition and projection |
Patent | Priority | Assignee | Title |
5018076, | Sep 16 1988 | Intel Corporation | Method and circuitry for dual panel displays |
5526017, | Dec 11 1990 | International Business Machines Corporation | Analog image signal processor for a multimedia system |
5742745, | May 24 1994 | Kabushiki Kaisha Toshiba | Communication device |
5883670, | Aug 02 1996 | CERBERUS BUSINESS FINANCE, LLC, AS COLLATERAL AGENT | Motion video processing circuit for capture playback and manipulation of digital motion video information on a computer |
6012101, | Jan 16 1998 | CLEARCUBE TECHNOLOGY, INC | Computer network having commonly located computing systems |
6038616, | Dec 15 1997 | CLEARCUBE TECHNOLOGY, INC | Computer system with remotely located interface where signals are encoded at the computer system, transferred through a 4-wire cable, and decoded at the interface |
6046751, | Feb 10 1997 | SSD Company Limited | Color graphics processor |
6119146, | May 04 1998 | CLEARCUBE TECHNOLOGY, INC | Computer network having multiple remotely located human interfaces sharing a common computing system |
6252979, | Jun 07 1995 | TRIPATH IMAGING, INC | Interactive method and apparatus for sorting biological specimens |
6333750, | Mar 12 1997 | Avocent Huntsville Corporation | Multi-sourced video distribution hub |
6385666, | Dec 15 1997 | CLEARCUBE TECHNOLOGY, INC | Computer system having remotely located I/O devices where signals are encoded at the computer system through two encoders and decoded at I/O devices through two decoders |
6483515, | Apr 09 1999 | Oracle America, Inc | Method and apparatus for displaying data patterns in information systems |
6535238, | Oct 23 2001 | Codian Limited | Method and apparatus for automatically scaling processor resource usage during video conferencing |
6570890, | Jun 10 1998 | NETWORK-1 SECURITY SOLUTIONS, INC | Method for the transmission and control of audio, video, and computer data over a single network fabric using ethernet packets |
6806885, | Mar 01 1999 | U S BANK NATIONAL ASSOCIATION, AS COLLATERAL AGENT | Remote monitor controller |
6934945, | Mar 19 1997 | CARDSOFT INC | Method and apparatus for controlling communications |
7024045, | Aug 21 2001 | Oracle America, Inc | Dynamic bandwidth adaptive image compression/decompression scheme |
7043748, | Dec 15 1997 | ClearCube Technology, Inc. | Computer network comprising computing systems with remotely located human interfaces |
7095386, | Jun 07 2001 | Nvidia Corporation | Graphics system including a plurality of heads |
7133362, | Nov 14 2001 | Microsoft Technology Licensing, LLC | Intelligent buffering process for network conference video |
7136394, | Mar 12 2002 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Low-delay video encoding method for concealing the effects of packet loss in multi-channel packet switched networks |
7161557, | Apr 08 2002 | ClearCube Technology, Inc. | Selectively updating a display in a multi-display system |
7191440, | Aug 15 2001 | Intel Corporation | Tracking operating system process and thread execution and virtual machine execution in hardware or in a virtual machine monitor |
7317685, | Nov 26 2001 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | System and method for dynamic bandwidth allocation for videoconferencing in lossy packet switched networks |
7650603, | Jul 08 2005 | Microsoft Technology Licensing, LLC | Resource management for virtualization of graphics adapters |
7676578, | Jul 25 2006 | Hewlett Packard Enterprise Development LP | Resource entitlement control system controlling resource entitlement based on automatic determination of a target utilization and controller gain |
20010000539, | |||
20010011965, | |||
20020059639, | |||
20020143842, | |||
20020149617, | |||
20020180725, | |||
20030033441, | |||
20030098820, | |||
20030193486, | |||
20030208340, | |||
20030212811, | |||
20040001622, | |||
20040015597, | |||
20040143664, | |||
20040212730, | |||
20040222941, | |||
20040225744, | |||
20050060421, | |||
20050108712, | |||
20050114395, | |||
20050204015, | |||
20050240685, | |||
20050257239, | |||
20060069458, | |||
20060089992, | |||
20060123166, | |||
20060282855, | |||
20070097130, | |||
20070124474, | |||
20070209035, | |||
20080037656, | |||
20090024746, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Jul 16 2009 | HOBBS, DAVID VICTOR | Teradici Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 023024 | /0065 | |
Jul 17 2009 | Teradici Corporation | (assignment on the face of the patent) | / | |||
Feb 04 2013 | Teradici Corporation | WF FUND IV LIMITED PARTNERSHIP | SECURITY AGREEMENT | 029800 | /0593 | |
Feb 19 2016 | Teradici Corporation | BEEDIE CAPITAL PARTNERS FUND I LIMITED PARTNERSHIP | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 037988 | /0364 | |
Feb 22 2019 | Teradici Corporation | COMERICA BANK | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 048454 | /0895 | |
Feb 26 2019 | BEEDIE CAPITAL PARTNERS FUND I LIMITED PARTNERSHIP | Teradici Corporation | RELEASE BY SECURED PARTY SEE DOCUMENT FOR DETAILS | 048473 | /0846 | |
Feb 28 2019 | WF FUND IV LIMITED PARTNERSHIP | Teradici Corporation | RELEASE BY SECURED PARTY SEE DOCUMENT FOR DETAILS | 048499 | /0800 |
Date | Maintenance Fee Events |
Nov 28 2016 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Nov 11 2020 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Date | Maintenance Schedule |
May 28 2016 | 4 years fee payment window open |
Nov 28 2016 | 6 months grace period start (w surcharge) |
May 28 2017 | patent expiry (for year 4) |
May 28 2019 | 2 years to revive unintentionally abandoned end. (for year 4) |
May 28 2020 | 8 years fee payment window open |
Nov 28 2020 | 6 months grace period start (w surcharge) |
May 28 2021 | patent expiry (for year 8) |
May 28 2023 | 2 years to revive unintentionally abandoned end. (for year 8) |
May 28 2024 | 12 years fee payment window open |
Nov 28 2024 | 6 months grace period start (w surcharge) |
May 28 2025 | patent expiry (for year 12) |
May 28 2027 | 2 years to revive unintentionally abandoned end. (for year 12) |