Patent Publication Number: US-7908391-B1

Title: Application streaming and network file system optimization via feature popularity

Description:
TECHNICAL FIELD 
     This invention pertains generally to application streaming technology and network file systems, and more specifically to optimizing transmission of application content from a server for remote execution, based on application feature popularity. 
     BACKGROUND 
     Application streaming provides the ability for an endpoint (e.g., a client computer) to run an application locally that is stored remotely, for example on a server. The server transmits specific portions of the application (e.g., code pages) to the endpoint, as the endpoint needs them. Application streaming offers a number of advantages over running the application on the server. Streaming the application allows the application to execute locally on the endpoint, instead of remotely on the server. This eliminates the need for large farms of servers to provide applications to a plurality of client computers. Application response time to the user is also significantly faster when the application is run locally on the endpoint, as opposed to remotely on the server. Commercial application streaming technology exists today. 
     A network file system is a computer file system that supports sharing of resources such as files, printers and/or persistent storage over a computer network. Network file systems such as Andrew File System (AFS), NetWare Core Protocol (NCP), and Server Message Block (SMB, also known as Common Internet File System (CIFS)) exist today. Network file systems can share files, including executable files, between servers and endpoints. 
     An important performance measurement of a network file system is the amount of time needed to satisfy service requests. In conventional file systems, this time consists of a disk-access time and a small amount of CPU-processing time. But in a network file system, a remote access has additional overhead due to the distributed structure. This includes the time to deliver the request to a server, the time to deliver the response to the client, and for each direction, a CPU overhead of running the communication protocol software. 
     Both application streaming technologies and network file systems can be used to execute applications stored on a remote server on a local endpoint. When a server streams application content to an endpoint, the endpoint typically stores that content in a cache, so that the server need not retransmit duplicate application content to the same endpoint. 
     Current application streaming technologies and network file systems do not take into account which features of an application being transmitted for execution on an endpoint are most popular, and/or are being most frequently being utilized by the user. Where application content is already stored in the cache, the associated application feature(s) run much more quickly on the endpoint, as the application content is already present and does not need to be transmitted across the network. However no known application steaming or network file system technology attempts to dynamically track application feature popularity and real-time usage, so as to optimize application content transmission and cache management to improve the user experience. 
     It would be desirable to have application streaming technology and network file systems that do not have these problems. 
     SUMMARY 
     The performance of a remotely originated application is improved by determining the most popular application features, and proactively making the corresponding application content available to local computers on which the application runs. More specifically, an application streaming or network file system transmits an application to a plurality of endpoints for execution. The server determines the relative popularity of the application features, and maps the features to corresponding application content. The server proactively pushes the application content corresponding to the most popular features to user&#39;s computers, so that those features can be executed locally without having to request the relevant application content and wait while it downloads. The popularity of application features can be dynamically updated on a regular, ongoing basis. The proactive pushing of code pages can be kept current with the updated popularity determinations, such that endpoints always have the code pages for the most popular features, without having to request them. 
     The features and advantages described in this summary and in the following detailed description are not all-inclusive, and particularly, many additional features and advantages will be apparent to one of ordinary skill in the relevant art in view of the drawings, specification, and claims hereof. Moreover, it should be noted that the language used in the specification has been principally selected for readability and instructional purposes, and may not have been selected to delineate or circumscribe the inventive subject matter, resort to the claims being necessary to determine such inventive subject matter. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a block diagram illustrating optimizing transmission of application content from a server to a plurality of endpoints, based, on application feature popularity, according to other embodiments of the present invention. 
     
    
    
     The FIGURES depict embodiments of the present invention for purposes of illustration only. One skilled in the art will readily recognize from the following discussion that alternative embodiments of the structures and methods illustrated herein may be employed without departing from the principles of the invention described herein. 
     DETAILED DESCRIPTION 
       FIG. 1  illustrates a system  100  for optimizing transmission of application content from a server  103  to a plurality of endpoints  109 , based on application feature popularity, according to some embodiments of the present invention. It is to be understood that although various components are illustrated in  FIG. 1  as separate entities, each illustrated component represents a collection of functionalities which can be implemented as software, hardware, firmware or any combination of these. Where a component is implemented as software, it can be implemented as a standalone program, but can also be implemented in other ways, for example as part of a larger program, as a plurality of separate programs, as a kernel loadable module, as one or more device drivers or as one or more statically or dynamically linked libraries. 
     As illustrated, in  FIG. 1 , a server agent  101  running on an application streaming or network file system server  103  transmits code pages  105  of applications  107  to a plurality of endpoints  109 , such that the transmitted applications  107  are executed on the endpoints  109 . For the sake of illustration,  FIG. 1  shows one only application  107  being transmitted to three endpoints  109 , but it is to but it is to be understood that an application streaming or remote file system typically transmits many applications  107  to a large plurality of endpoints  109 , the endpoints  109  sometimes being very diverse geographically. When a server  103  transmits application code pages  105  to an endpoint  109 , the endpoint  109  typically stores those code pages  105  in a cache  110 , so that the server  103  need not retransmit duplicate application content to the same endpoint  109 . 
     A popularity tracking component  111  dynamically determines application feature popularity, and feeds this popularity data  113  to the server agent  101 . The server agent  101  uses the popularity data  113  to determine which code pages  105  of the application  107  to proactively push to endpoints  109 . In one embodiment the popularity tracking component  111  is in the form of a known feature popularity tracking technology. A number of application feature popularity tracking packages are available today, and the implementation mechanics of such technology in the context of the present invention will be readily apparent to one of ordinary skill in the relevant art in light of this specification. Another embodiment uses the application tracking methodology disclosed in the pending patent application titled “Application Streaming Profiling,” having the same assignee as the present application, filed on Feb. 28, 2008 and now bearing Ser. No. 12/039,515 (“the Profiling Application”). The Profiling Application is herein incorporated by reference. The use of the application tracking methodology disclosed in the Profiling Application to dynamically determines application feature popularity will be readily apparent to one of ordinary skill in the relevant art in light of this specification and the incorporated specification of the Profiling Application. In yet other embodiments, the popularity tracking component  111  itself tracks which application features are most popular on the basis of the interaction of existing users with applications  107  transmitted from the server  103  to the plurality of endpoints  109 . 
     A mapping component  115  maps specific code pages  105  of an application  107  to specific program features. An application developer or the like provides the source code  117  for the application  107  being analyzed. The mapping component  115 , by referring to the corresponding source code  117 , can map specific code pages  105  back to specific program functionality, at least approximately. In some embodiments, some or all of this mapping is entered by, for example, an application developer, who has access to both the source code  117  and the popularity data  113 . In  FIG. 1 , the mapping component  115  is illustrated as running on the server  103 . In other embodiments, this component can run at other locations, as desired. 
     It is to be understood that how much of the mapping is performed automatically by the mapping component  115 , and how much is input by, e.g., an application developer, is a variable design parameter. The implementation mechanics of performing such mapping based on the popularity data  113  and the application source code  117  are within the skill set of one of ordinary skill in the relevant art, and the usage thereof within the context of the present invention will be readily apparent to one of such a skill level in light of this specification. 
     Once code pages  105  of an application  107  have been mapped to program features, the server agent  101  can proactively push specific code pages  105  so that the most popular features are readily available on endpoints  109 , and thus the performance of the application  107  is improved. For example, the server agent  101  can push code pages  105  associated with the most popular features before an endpoint  109  even requests them. This way, the endpoint  109  receives the code pages  105  it is most likely to utilize during the execution of the application  107 , before it needs the code it needs the code pages  105 , and without having to request them. The endpoint  109  stores received code pages  105  in the cache  110 , and thus when the user wishes to execute popular application features, the corresponding code pages  105  are already stored on the endpoint  109 , and need not be transmitted from the server  103 . 
     In one embodiment, the popularity tracking component  111  ranks the code pages  105  of each application  107  on the basis of the popularity of the corresponding features (e.g., with the code pages  105  corresponding to the most popular features rated highest). When a user starts running an application  107  on an endpoint  109 , the server agent  101  promptly consults the ranking order of code pages  105 , and proactively pushes the pages  105  corresponding to the most popular features. The endpoint  109  thus automatically receives and caches code pages  105  corresponding to those application features that have the highest likelihood (on the basis of popularity) of being executed. The number of code pages  105  to proactively push can be determined by, e.g., the size of the cache  110 . 
     In some embodiments, the popularity tracking component  111  receives or calculates updated popularity data  113  on a regular basis in real time, e.g., X times per Y period of time. The popularity tracking component  111  and and mapping component  115  therefore re-determine the most popular features and their corresponding code pages  105 , and the specific pages  105  to proactively push can change as various features become more and less popular over time. As the popularity data  113  can be determined based on the actions of many users in the field, it can be very dynamic in nature, as it changes in synchronization with the latest feature trends. 
     It is to be understood that code pages  105  can encompass application functionality instantiated across one or more binary files, including dependent binaries such as dynamic link libraries and other late binding objects. Therefore, the rating and/or proactive pushing of code pages  105  can be implemented across all the binary files that constitutes an application  107 , and not simply within a single executable image. 
     The server agent  101  can also utilize the above described methodology to build a default cache  110  to push to one or more endpoints  109  as desired. With a preloaded cache  110  including the code pages  105  mapped to the most popular features, a user can benefit from the improved performance without delay. This concept can be extended to building and transmitting a seeded cache  110  whenever a preloaded cache  110  may be desired, for example upon the establishment of a new endpoint  109 , the deployment of a new application  107 , version thereof, or update thereto, upon a significant change in feature popularity, etc. It is to be further understood that the server agent  101  can simply transmit specific code pages  105  corresponding to popular features to endpoints  109  under any of the above circumstances, without specifically building and pushing a seeded cache  110 . 
     As will be understood by those familiar with the art, the invention may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. Likewise, the particular naming and division of the portions, modules, agents, managers, components, functions, procedures, actions, layers, features, attributes, methodologies and other aspects are not mandatory or significant, and the mechanisms that implement the invention or its features may have different names, divisions and/or formats. Furthermore, as will be apparent to one of ordinary skill in the relevant art, the portions, modules, agents, managers, components, functions, procedures, actions, layers, features, attributes, methodologies and other aspects of the invention can be implemented as software, hardware, firmware or any combination of the three. Of course, wherever a component of the present invention is implemented as software, the component can be implemented as a script, as a standalone program, as part of a larger program, as a plurality of separate scripts and/or programs, as a statically or dynamically linked library, as a kernel loadable module, as a device driver, and/or in every and any other way known now or in the future to those of skill in the art of computer programming. Additionally, the present invention is in no way limited to implementation in any specific programming language, or for any specific operating system or environment. Furthermore, it will be readily apparent to those of ordinary skill in the relevant art that where the present invention is implemented in whole or in part in software, the software components thereof can be stored on computer readable media as computer program products. Any form of computer readable medium can be used in this context, such as magnetic or optical storage media. Additionally, software portions of the present invention can be instantiated (for example as object code or executable images) within the memory of any programmable computing device. Accordingly, the disclosure of the present invention is intended to be illustrative, but not limiting, of the scope of the invention, which is set forth in the following claims.