High-Speed Save Data Storage for Cloud Games
The cloud game system addresses the performance mismatch by using NVMe SSDs in management servers to handle data access requests, ensuring seamless and high-performance data access for cloud games while maintaining cost-effective HDD storage.
Patent Information
- Application Number
- JP2022580453
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2020-11-30
- Filing Date
- 2021-06-23
- Publication Date
- 2025-07-16
- Estimated Expiration
- 2041-06-23
AI Technical Summary
Next-generation video game consoles require NVMe-level data storage performance, which is not met by conventional cloud game systems using HDD-level storage, leading to potential game crashes and undefined behavior due to mismatched data storage performance expectations.
Implement a cloud game system with a management server that includes high-speed NVMe SSDs to handle data access requests, while maintaining cost-effective HDD storage for non-urgent game data, using management servers to proxy data access between cloud game servers and cloud storage servers.
Ensures seamless and high-performance data access for cloud games, preventing crashes and undefined behavior by matching local console storage speeds, while reducing costs by retaining HDD storage for non-urgent data.
Smart Images

Figure 0007709134000001 
Figure 0007709134000002 
Figure 0007709134000003
Abstract
Description
Background Art
[0001] The video game industry has undergone many changes over the years. Along with the increase in computing power, video game developers have also developed game software that utilizes this improved computing power. To that end, video game developers have coded games that incorporate advanced operations and mathematics to create a very realistic gaming experience.
[0002] Game developers are not only adapting to the expanding computing power but also developing online games that enhance the interaction or dialogue between the user and the game system. Interactive online games, or interactive multiplayer games, provide the function of capturing such interactions or dialogues where users can interactively battle or play together with other users over the Internet. Furthermore, as the trend towards cloud-based computing strengthens, game developers are developing new ways to play existing legacy games and develop new games by leveraging the improvement in computing power and the interactivity of users. A cloud-based computing system can include a cloud-based processing server that communicates with a remote client system located at the game player's location and is configured to execute a game application, receive input from the game player, and draw images on a display for the game player to view. The present invention has been made under such a background.
Summary of the Invention
[0003] In one exemplary embodiment, a cloud game system is disclosed. The cloud game system includes a cloud game server configured to execute a video game according to input received from a user's controller device. The cloud game server is configured to instruct the transmission of a video stream that reflects the play of the video game by the user to the user's local computing system. The cloud game system also includes a cloud storage server. The cloud storage server includes a data storage device for storing user data of the user. The user data includes data for recording or memorializing the play of the video game by the user. The cloud game system also includes a management server that communicates with both the cloud game server and the cloud storage server. The management server includes a high-speed data storage device that operates at a data speed faster and latency lower than the data storage device in the cloud storage server. The management server is programmed to receive a data access request issued by a video game running on the cloud game server. The data access request identifies the requested data stored in the data storage device in the cloud storage server. The management server is programmed to copy the requested data from the data storage device in the cloud storage server to the high-speed data storage device. The management server is programmed to respond to the data access request using the high-speed data storage device instead of the cloud storage server responding to the data access request.
[0004] In an exemplary embodiment, a method for operating a cloud game system is disclosed. The method includes executing a video game on a cloud game server according to input received from a user's controller device. The method includes operating the cloud game server to instruct transmission of a video stream that reflects play of the video game by the user to the user's local computing system. The method also includes storing user data of the user in a cloud storage server. The user data includes data recording play of the video game by the user. The method also includes receiving a data access request at a management server. The data access request is issued by a video game executing on the cloud game server. The data access request identifies requested data stored in a data storage device within the cloud storage server. The method also includes copying the requested data from the data storage device within the cloud storage server to a high-speed data storage device within the management server. The high-speed data storage device operates at a higher data speed and lower latency than the data storage device within the cloud storage server. The method also includes using the high-speed data storage device within the management server to respond to the data access request instead of the cloud storage server responding to the data access request.
Brief Description of the Drawings
[0005]
Figure 1
Figure 2
Figure 3
Figure 4
[0006] In the following embodiments for carrying out the invention, some specific details are shown in order to provide a complete understanding of the present disclosure. However, it will be apparent to those skilled in the art that the embodiments of the present disclosure can be practiced without some or all of these specific details. In other instances, well-known process operations have not been described in detail so as not to unnecessarily obscure the present disclosure.
[0007] Next-generation video game consoles have very high-speed data storage solutions such as NVMe (Non-Volatile Memory Express) SSDs (Solid State Drives), which are much faster than currently available data storage solutions such as HDDs (Hard Disk Drives). The very high-speed data storage solutions of next-generation video game consoles pose problems for cloud games that rely on shared storage servers not only for game saves but also for storing game data and user data. In conventional cloud game systems, user data is typically stored within a cloud storage solution such as a cloud storage server that operates at HDD-level data storage performance in order to keep costs down. However, next-generation video game consoles require at least NVMe-level data storage performance in order to meet the expectations for data access of game console titles (video games).
[0008] A system and method are disclosed herein for addressing the challenge of providing NVMe-level data storage performance for the execution of online video games while continuing to use cost-effective HDD technology for storing user data related to the playing of online video games. It should be understood that the term online video game as used herein refers to a video game provided to a client computing device by a cloud computing system for a user to play on the client computing device. The online video games referred to herein can be single-player video games or multiplayer video games. The principles of the systems and methods disclosed herein are to provide tight data communication between a cloud game server that executes an online video game and a cloud data storage solution where data currently required by the running online video game is stored in a high-speed data storage / system within a management server, while save data and other game-related data that are not urgently required in the running online video game are stored in a slower and more cost-effective cloud storage server.
[0009] FIG. 1 shows a cloud game system 100 according to some embodiments. The cloud game system 100 includes a cloud game server rack 101 that includes a plurality (N) of cloud game servers 103-1 to 103-N. In some embodiments, the number (N) of cloud game servers 103-1 to 103-N can be up to 100 or more. The cloud game server rack 101 also includes a plurality (X) of management servers 105-1 to 105-X and one or more storage servers 107. The storage server 107 includes a number of data storage devices 107A such as HDDs and / or SSDs. The storage server 107 stores all video games available for play in the cloud game system 100. Each of the management servers 105-1 to 105-X is responsible for managing cloud game sessions. Also, a given management server 105-1 to 105-X can be responsible for managing a plurality of cloud game sessions simultaneously. In some embodiments, each of the management servers 105-1 to 105-X powers on one or more of the cloud game servers 103-1 to 103-N as needed, loads a requested video game from the storage server 107 onto a given one of the cloud game servers 103-1 to 103-N, starts execution of the requested video game on a given server of the cloud game servers 103-1 to 103-N, logs in a user to a given one of the cloud game servers 103-1 to 103-N, and mounts user data 111 from the cloud storage server 109 to the logged-in user, among other operations.
[0010] In some embodiments, the storage server 107 can be replaced with a storage configuration that converts it into a mini-server by mounting an HDD and / or an SSD, a network interface card (NIC), and a small central processing unit (CPU). An example of such a storage configuration is an embedded SSD (ESSD). For example, in some ESSDs, a ball grid array (BGA) format is used in a flip chip package process, and a memory controller integrated circuit (IC) chip is combined with an SSD within a single package. In some embodiments, a single package containing the IC chip and the SSD can be directly attached to a printed circuit board (motherboard) without using a module connector. Of course, it should be understood that there are many possible configurations of ESSDs that can be used in place of the storage server 107 in various embodiments. One motivation for using an ESSD instead of the storage server 107 is that traditional storage servers cannot scale well because storage data communication has become faster than network data communication. In some embodiments, when an ESSD storage configuration is used instead of the storage server 107, the game can be striped across multiple ESSDs. In these embodiments, the cloud game servers 103-1 to 103-N need to reach different drives (different ESSDs) for different parts of the game. Also, in some embodiments, the use of ESSDs can be extended to the cloud storage server 109. In such embodiments, it is necessary to have a cluster of many ESSDs together with the management servers 105-1 to 105-X that function to hide the details of the implementation of the ESSD-based cloud storage server 109 from the cloud game servers 103-1 to 103-N.
[0011] In a cloud game (or online game), a user (game player) 121 operates a local computing system 120 to log in to a cloud game system 100 on a network 123 such as the Internet, and plays an online video game remotely executed on one or more of cloud game servers 103-1 to 103-N. In some embodiments, the user 121 logs in to the cloud game system 100 via one of management servers 105-1 to 105-X. However, it should be understood that there are various cloud services related to the login of the user 121. For example, there are cloud services involved in authenticating the user 121, ensuring that the user 121 has an Internet connection of sufficient quality, and finding an available server near the user 121 to which the user 121 can log in. In some embodiments, the local computing system 120 includes a game controller 125 and a display device 126 such as a television or a monitor. In some embodiments, the local computing system 120 includes a dongle 128 connected to the display device 126, and the dongle 128 is configured to enable data communication between the game controller 125 and the display device 126 so that the network interface controller (NIC) of the display device 126 can be used to transmit signals from the game controller 125 to the network 123. In some embodiments, the local computing system 120 also includes a local game machine 127. In these embodiments, the signals generated by the game controller 125 can be transmitted to the network 123 via the local game machine 127 using the NIC of the local game machine 127. Also, in some embodiments, the game controller 125 can directly transmit signals to the network 123 through a local area network such as a WIFI network. Also, in some embodiments, the user 121 can play an online video game on a local computing device other than the local computing system 120. For example, in some embodiments, the user 121 can play an online video game on, among other things, a mobile computing device such as a mobile phone, a tablet, a laptop, a smart car system, etc. Also, in some embodiments, the user 121 can play an online video game on a desktop computing system. For the sake of simplicity, the reference to the local computing system 120 here also conveys a reference to any other computing device on which the user 121 can play an online video game.
[0012] Furthermore, in various embodiments, data (such as video stream data, audio data, or tactile feedback data) is transmitted from the cloud game system 100 to the local computing system 120 via the network 123. In some embodiments, the data is transmitted from the cloud game system 100 to the display device 126 via the network 123. In some embodiments, the data is transmitted from the cloud game system 100 to the local game machine 127 via the network 123, and then from the local game machine 127 to the display device 126. Also, in some embodiments, the data is transmitted from the cloud game system 100 to the game controller 125 via the network 123.
[0013] During gameplay, user 121 generates game commands that are transmitted via network 123 to cloud game servers 103-1 to 103-N. In some embodiments, user 121 uses game controller 125 to generate game commands, and the game commands are transmitted in signal form from game controller 125 to network 123 and then to cloud game servers 103-1 to 103-N. In some embodiments, the game commands are transmitted in signal form from game controller 125 to local game machine 127 or display device 126, from where the game commands are transmitted via network 123 to cloud game servers 103-1 to 103-N. In various embodiments, the transmission of game commands in signal form from game controller 125 to network 123 can be performed via a wired network connection, a wireless network connection, or a combination thereof. Cloud game servers 103-1 to 103-N execute a video game according to the game commands received from user 121 and generate a video stream reflecting the user play of the video game. The video stream is transmitted via network 123 from cloud game servers 103-1 to 103-N to user 121's local computing system 120 for display on display device 126.
[0014] Cloud game servers 103-1 to 103-N use the network storage protocol 117 to load all of the game data 113 and game executable files 115 from the storage server 107. In some embodiments, the network storage protocol 117 utilizes block storage, such as iSCSI (Internet Small Computer System Interface) in particular. In some embodiments, the network storage protocol utilizes file storage, such as NFS (Network File System) or CIFS (Common Internet File System) in particular. In some embodiments, cloud game servers 103-1 to 103-N may be restricted in the supported network storage protocol 117. For example, in some embodiments, cloud game servers 103-1 to 103-N may be restricted in the supported network storage protocol 117 due to the absence of software drivers. Or, in some embodiments, some network storage protocols may use excessive resources such as CPU usage and / or memory usage, so cloud game servers 103-1 to 103-N may be restricted in the supported network storage protocol 117. In some embodiments, since cloud game servers 103-1 to 103-N may be restricted in the supported network storage protocol 117, access by cloud game servers 103-1 to 103-N to user data 111 can be performed via management servers 105-1 to 105-X that function as proxies. In these embodiments, management servers 105-1 to 105-X mount user data 111 from the cloud storage server 109 and expose the user data 111 to cloud game servers 103-1 to 103-N using the data storage protocol supported by cloud game servers 103-1 to 103-N.
[0015] In various embodiments, the cloud storage server 109 exposes data storage via various data storage protocols, such as object storage, file storage, block storage, or other data storage protocols. The management servers 105-1 to 105-X are equipped to interface with any data storage protocol used by the cloud storage server 109, whether it is object storage, file storage, block storage, or other data storage protocols. The management servers 105-1 to 105-X are also configured to expose their own data storage via various data storage protocols, such as object storage, file storage, block storage, or other data storage protocols. Also, the data storage protocol by which the management servers 105-1 to 105-X expose their own data storage may be the same as or different from the data storage protocol by which the cloud storage server 109 exposes its own data storage. For example, in some embodiments, the management servers 105-1 to 105-X are programmed to mount object storage from the cloud storage system 109 as a file system and then present the mounted file system to the NFS protocol of the cloud game servers 103-1 to 103-N. Similarly, in another exemplary embodiment, the management servers 105-1 to 105-X are programmed to mount block storage from the cloud storage system 109 as a file system and then present the mounted file system to the cloud game servers 103-1 to 103-N. In some embodiments, the block storage is based on Ceph RBD (RADOS (Reliable Autonomic Distributed Object Store) Block Device). However, in other embodiments, the block storage can be based on any type of block data storage protocol.
[0016] Functioning the management servers 105-1 to 105-X as proxies in the data path between the cloud game servers 103-1 to 103-N and the cloud storage server 109 may add a certain degree of latency when fulfilling the data access requests issued by the cloud game servers 103-1 to 103-N. However, functioning the management servers 105-1 to 105-X as proxies in the data path between the cloud game servers 103-1 to 103-N and the cloud storage server 109 provides more flexibility regarding how data transfer is managed between the cloud storage server 109 and the cloud game servers 103-1 to 103-N. For example, in some embodiments, the management servers 105-1 to 105-X can operate to buffer and / or cache the data input / output requests issued by the cloud game servers 103-1 to 103-N as needed. For example, when the cloud storage server 109 is busy or unavailable for some reason, the management servers 105-1 to 105-X can absorb the lack of availability of the cloud storage server 109 by buffering the data input / output requests issued by the cloud game servers 103-1 to 103-N.
[0017] Conventionally, the interaction between the cloud game servers 103-1 to 103-N and the management servers 105-1 to 105-X / cloud storage server 109 is somewhat separated. For example, a network file system is provided to the cloud game servers 103-1 to 103-N, and some network storage software manages the data read and write operations of the cloud game servers 103-1 to 103-N. In this situation, the management servers 105-1 to 105-X are only involved in mounting the data from the cloud storage server 109, but have no knowledge of which data is being read and written by the video games running on the cloud game servers 103-1 to 103-N, or which data the video games are accessing.
[0018] Next-generation game consoles use high-speed NVMe data storage drives that operate at a data speed of 4 to 5 gigabytes per second (GB / s). For comparison, the 2.5-inch HDD currently used in the cloud storage system 109 reaches a peak data speed of 100 megabytes per second (MB / s). Also, the latency of the HDD is much higher than that of the NVMe data storage drive. For example, normal HDD latency is in the range of about 10 milliseconds to about 20 milliseconds, while normal NVMe data storage drive latency is less than about 0.1 millisecond. As storage performance improves, the expectations for video game programming regarding how fast a video game can access data storage also increase. In video games, assumptions are often made about the performance of data storage. If the actual data storage performance varies significantly from the data storage performance assumed in the video game, the video game may crash or other undefined behavior may occur within the video game.
[0019] In some embodiments, the same video game used / executed on the local game console 127 is often stored in the storage server 107 without modification and is executed by the cloud game servers 103-1 to 103-N in the cloud game. These video games are developed using performance assumptions based on video games executed on the local game console 127 with a faster storage solution, especially regarding data read and write operations. Therefore, when the same video game is executed by the cloud game servers 103-1 to 103-N, the performance of the data storage solution implemented in the cloud game servers 103-1 to 103-N substantially matches or exceeds the performance of the local data storage solution available on the local game console 127.
[0020] The data storage solution implemented in the cloud game system 100 needs to be updated to keep up with the expected data read and write performance of next-generation video games, as set by a very fast data storage solution implemented in the next-generation local game console 127. In some embodiments, the existing cloud storage server 109 can be updated to use a high-speed NVMe storage solution. However, this approach is very expensive. Therefore, the goal of a balanced solution is to reduce costs while retaining the data stored on the performance-limited HDDs within the cloud storage server 109, and at the same time ensure that the data currently required in video games can be reliably accessed through the high-speed storage within the management servers 105-1 to 105-X. This goal can be achieved through close cooperation between the cloud game servers 103-1 to 103-N and the cloud storage solution, which is the opposite of the prior art that essentially decouples or disconnects the interaction between the cloud game servers 103-1 to 103-N and the management servers 105-1 to 105-X / cloud storage server 109. In some embodiments, the close cooperation between the cloud game servers 103-1 to 103-N and the cloud storage solution involves hooking F into the file system API (application programming interface) called by the video games running on the cloud game servers 103-1 to 103-N to obtain information regarding the data currently being accessed by the video game, the data that the video game will access next / soon, and the data that the video game will use to end when specific data is used.
[0021] The file system access API triggers data access that occurs at a specific time for a specific reason. Various operating systems comply with the POSIX (Portable Operating System Interface) standard that defines APIs for many operating system concepts, including file system access. The four most common POSIX APIs for file system access are "open", "close", "read", and "write". The "open" API is used to open a file. The "close" API is used to close a file and triggers the writing back of data to the data storage device if the data has not yet been written back to the data storage device. The "read" API is used to read data. The "write" API is used to write data. The "open" and "close" APIs are considered control path APIs, which are APIs used to obtain access to a file or change permissions. The "read" and "write" APIs are considered data path APIs, which are APIs used to access data or change data.
[0022] In some embodiments, the video game console API utilizes the POSIX API with some additions. A typical personal computer or server computer usually has a single data storage device such as an HDD or SSD, with one or more partitions, and each partition has a file system configured on it. The storage system of a video game console is configured in a similar way to that of a personal computer or server computer. However, in a video game console, for security and user separation reasons, save data and other user data are often stored in save data disk images, and each save data disk image corresponds to an individual save slot of a video game. Each save data disk image has its own file system and needs to be mounted before use and unmounted after use. The "mount" operation and the "unmount" operation are performed by respective APIs that are considered control path APIs. Thus, an example of a data access flow in a video game console is 1) (optionally, as needed) create a save data disk image, 2) mount the save data disk image, 3) open a file, 4) read from and / or write data to the file, 5) close the file, and 6) unmount the save data disk image.
[0023] An important part of the performance of the data access flow in a video game lies within the data path that uses the "read" and "write" APIs. In the case of a data "read" operation, the video game may expect the data to be returned within a certain amount of time in order to support the continuous and correct execution of the video game. Similarly, in the case of a data "write" operation, the video game may expect the data to be written within a certain amount of time in order to support the continuous and correct execution of the video game. If the storage solution cannot perform the "read" and / or "write" of the data within the required time, bad events may occur during the execution of the video game. The exact types of these bad events that may occur vary depending on the design of the video game and the way the video game code is written. Some examples of these bad events that may occur include crashes of the video game, undefined behavior within the video game, and / or, among other things, interruptions in the sound within the video game.
[0024] When a video game calls a data "read" API or a data "write" API, the video game passes one or more flags to the called API. These flags can be set to control how the called API is executed. The operations of both data reading and data writing within the video game depend on the flags passed by the video game to the called API and the structure of the video game. For example, in some video games, flags can be set asynchronously for data reading operations and data writing operations, which means that the data "read" API and the data "write" API prevent the continuation of the execution of the video game until the data reading operation and the data writing operation are completed. When a video game is described to call synchronous data reading or data writing from the code that executes game rendering, there is always a slowdown or a break in the video game when the storage device is slow and it takes time to complete the reading or writing operation. However, when the video game flags a data writing operation asynchronously, which is usually done for data writing operations, the video game passes the data to be written to the operating system and continues the execution of the video game without waiting for the data to be written. The locations of data reading and data writing operations in the video game, and the flags associated with the data reading and data writing operations, vary depending on the design of the video game. A properly written video game attempts to perform data reading operations and data writing operations in at least smart areas of the video game code so as not to interfere with the smooth execution of the video game.
[0025] Control path APIs such as "mount", "open", "close", "unmount" are also important, but it is often predicted that they will interfere with the continuous execution of video games until they are completed. Therefore, executing control path APIs in a timely manner is usually not that important for the performance of video games. For example, video games cannot perform anything on the data storage until the "mount" and "open" API calls are completed, and video game designers are aware of this. The control path APIs are used in the systems and methods disclosed herein to achieve the purpose of having a balanced storage solution that continues to store data on the HDD with limited performance in the cloud storage server 109 to reduce costs, while at the same time, the data that the video game currently needs is quickly available from the storage devices in the management servers 105-1 to 105-X.
[0026] In modern video games, a large amount of user data is generated. Depending on the video game and the video game platform (video game console), there may be various types of user data generated for a given user's video game. For example, in some embodiments, user data includes, among other types of user data, save data for the user, download data for the user, recording data for the user (records of the user's gameplay in the buffer or for a recently played time amount), the user's trophy data, the user's profile data, the user's video data, the user's audio data, the user's pause and resume data (capturing the overall state of an online game system at a particular time). Save data is part of the user data and is typically a data image of the video game that includes all data related to the state of the game and the state of the user within the game at a specific save time. When a user plays a video game, there may be many save data images created for the user. For example, in some embodiments, among many other times / examples when the generation of save data is triggered, at a specific point during gameplay, such as when transitioning from one level to another or when changing from one scene to another, the user's save data is generated. Also, in some embodiments, the generation of save data is triggered by a menu selection by the user. The size of the user's save data disk image is several megabytes (MB).
[0027] In some embodiments, different types of user data may have different types of input / output (I / O) requirements, such as different types of data access performance requirements. Thus, in some embodiments, different types of user data can be stored in different cloud storage systems or different cloud storage servers that meet different types of I / O requirements. Also, in some embodiments, the reliability of certain data is not as important as that of other data. The reliability of data in this sense refers to ensuring the protection and availability of the data. For example, the reliability of save data is very important to the user. However, the reliability of suspend and resume data that is very large in size may not be so critical in some cases. Thus, losing suspend data and resume data may not harm the user as much as losing the user's save data. Also, in some embodiments, some types of user data have a limited lifespan associated with them. For example, due to system updates or video game updates, some types of user data may no longer be compatible or relevant to the user's video game play. Also, in some embodiments, different types of data may have different load time requirements. For example, when the user logs in to the system, it may be necessary to load system data and / or user profile data from cloud storage server 109 to management servers 105-1 to 105-X. Also, when a specific game is started, other data may be loaded from cloud storage server 109 to management servers 105-1 to 105-X. Considering possible variations in I / O requirements, reliability, expiration period, and load timing among various types of user data and system data, there may be various performance layers and various reliability layers of cloud storage servers in which user data and system data are stored.
[0028] The control path API provides information about the data that a video game is attempting to access. For example, if a video game is attempting to read data from a specific file within a specific save data disk image, the video game first needs to use a "mount" API call to mount the specific save data disk image and then use an "open" API call to open the specific file within the mounted save data disk image. In this case, the "mount" API and / or "open" API calls made by the video game provide information that the video game is attempting to access data within a specific save data disk image. In some embodiments, information obtained from control path API calls made by video games running on cloud game servers 103-1 to 103-N triggers prefetching of data associated with control path API calls from the low-speed HDD-based cloud storage server 109 and is used to store the fetched data in the high-speed memory within management servers 105-1 to 105-X. Subsequently, any subsequent data path API calls made by the video game directed at the fetched data are completed quickly by accessing the data in the high-speed memory within management servers 105-1 to 105-X. And when a video game is played using the data in the high-speed memory within management servers 105-1 to 105-X, for example, when an "unmount" control path API call is made, the data in the high-speed memory within management servers 105-1 to 105-X is flashed back to the low-speed HDD-based cloud storage server 109. By flashing back, it means that the data in the high-speed memory within management servers 105-1 to 105-X is copied to the low-speed HDD-based cloud storage server 109 and then removed from the high-speed memory within management servers 105-1 to 105-X. Depending on the implementation, there may be cases where data has already been written back to the cloud storage server 109 by a "write" API call. This can occur via the operating system in a way that is transparent to the running video game.The "unmount" API call always forces a flush of the data to be unmounted to the cloud storage server 109. However, if the data has already been written back to the cloud storage server 109 by a "write" API call as part of the normal operation process, since the data has already been written back to the cloud storage server 109, there is no need to perform a data flush when the "unmount" API call is made.
[0029] FIG. 2 shows a process diagram of a method for triggering data transfer from a low-speed data storage device in cloud storage server 109 to high-speed data storage 119 in management server 105-1 using a control path API call by cloud game server 103-1 before a data path API call by cloud game server 103-1 to access transferred data, according to some embodiments. In a first step, cloud game server 103-1 issues a control path API call to mount a specific save data disk image (save data 2 in the example of FIG. 2). In response, management server 105-1 mounts the specific save disk image. In a second step, the specific save disk image (e.g., save data 2) requested to be mounted by cloud game servers 103-1 to 103-N is copied from cloud storage server 109 to high-speed data storage 119 in management server 105-1. In some embodiments, high-speed data storage 119 is a computer memory device such as RAM or storage class memory, or another type of computer memory substantially equivalent to RAM and / or storage class memory. In some embodiments, high-speed data storage 119 is NVMe-level storage such as an SSD. In a third step, cloud game server 103-1 issues one or more data path API calls to read and / or write data to and from the specific save disk image. However, instead of having cloud storage server 109 provide the data path API call from cloud game server 103-1, the data path API call is provided instead by management server 105-1, which currently has the specific save disk image in its high-speed data storage 119.
[0030] In the fourth step, the cloud game server 103-1 issues a control path API call to unmount a specific save data disk image. In response to the unmount API call, the storage system performs a fifth step of operating such that the management server 105-1 copies and returns the data of the specific save disk image currently in the high-speed data storage 119 to the cloud storage server 109. In some embodiments, when the data written to a specific save disk image in the high-speed data storage 119 is copied and returned to the cloud storage server 109 during normal operation (e.g., when written to the high-speed data storage 119), there may be no data that needs to be copied and returned to the cloud storage server 109 when the cloud game server 103-1 issues an unmount API call. In response to the unmount API call by the cloud game server 103-1, it should be understood that the management server 105-1 operates to ensure that the current data of the specific save disk image is also stored in the cloud storage server 109 so that it is stored in the high-speed data storage 119 of the management server 105-1 at the time of issuing the unmount API call. When the management server 105-1 confirms that all of the current data of the specific save disk image is properly stored within the cloud storage server 109, the management server 105-1 operates to unmount the specific save disk image in accordance with the unmount API call.
[0031] In some embodiments, while the user is playing a video game, the user's game data is maintained on management servers 105-1 to 105-X. The management servers 105-1 to 105-X should have sufficient storage capacity to handle the storage requirements during the user's play of the video game. In some embodiments, the management servers 105-1 to 105-X operate to reserve a certain amount of storage for each active user. In the case of storage pressure / overload on the management servers 105-1 to 105-X, as one option, the management servers 105-1 to 105-X can instruct a storage access API call to be handled by the cloud storage server 109 instead of by the management servers 105-1 to 105-X. As another option, the management servers 105-1 to 105-X can flash back some data to the cloud storage server 109 to relieve the storage pressure / overload on the management servers 105-1 to 105-X. In this case, the management servers 105-1 to 105-X flash back either all the data or a portion of the data to the cloud storage server 109. In some embodiments, the operation of flashing back the data of the management servers 105-1 to 105-X to the cloud storage server 109 to relieve the storage pressure / overload is based on an analysis of the current storage requirements and usage patterns of all users whose current data is stored on the management servers 105-1 to 105-X. In some embodiments, when the management servers 105-1 to 105-X flash back data to the cloud storage server 109 to relieve the storage pressure / overload, the management servers 105-1 to 105-X copy back some data from the cloud storage server 109 in anticipation of being required by one or more video games executed on one or more cloud game servers 103-1 to 103-N provided by the management servers 105-1 to 105-X.In some embodiments, when a video game writes data to management servers 105-1 to 105-X, even if the data is copied to the future cloud storage server 109, it is maintained in the management servers 105-1 to 105-X for access by the video game. In some embodiments, when there is pressure / overload on the management servers 105-1 to 105-X, various algorithms are implemented to classify the data stored in the management servers 105-1 to 105-X at a given time in order to prioritize the flashback of data to the cloud storage server 109. Also, in some embodiments, in the case of storage pressure / overload on the management servers 105-1 to 105-X, as another option, the management servers 105-1 to 105-X can notify the cloud game servers 103-1 to 103-N and / or, or the video game of the storage pressure / overload situation, and trigger the cloud storage server 109 to perform a flashback of data to relieve the storage pressure / overload situation for the cloud game servers 103-1 to 103-N and / or, or the video game. This option can be used to prevent data loss. In this case, when the management servers 105-1 to 105-X operate to flash back data to the cloud storage server 109, the cloud game servers 103-1 to 103-N and / or, or the video game are prevented from performing any data updates, thereby preventing data loss.
[0032] In some embodiments, the process of FIG. 2 can be particularly beneficial when a user starts an online game session. When a user starts an online video game, the cloud game servers 103-1 to 103-N need to load the executable code of the online video game from the storage server 107. Also, the cloud game servers 103-1 to 103-N may need to load other data such as, among other things, audio data and / or data such as texture data to start the video game. It takes about 5 seconds for the cloud game servers 103-1 to 103-N to load this data and execute the video game to the game menu display state. This time can be used to load the user's user data from the cloud storage server 109 to the management servers 105-1 to 105-X. For example, this time can be used to load the user's user data corresponding to the user's last save point in the video game from the cloud storage server 109 to the management servers 105-1 to 105-X when the video game is launched. Next, when the video game presents game menu options such as a new game or a loaded game, the user data of the user's last save point in the video game is already stored in the high-speed data storage 119 of the management servers 105-1 to 105-N, and when the user selects to continue playing the video game from the last save point, it is ready for immediate and high-speed access by the cloud game servers 103-1 to 103-N. Next, when the user selects to load a previously saved game, an open API call is made to the video game running on the cloud game servers 103-1 to 103-N to open the user's save data file within the previous save data disk image. This open API call is processed by the management servers 105-1 to 105-X, and the requested save data file is read from the high-speed data storage 119 within the management servers 105-1 to 105-X, rather than from the low-speed cloud storage server 109.It should be understood that by reading the user's save data file from the high-speed data storage 119 in the management servers 105-1 to 105-X, the user can start playing the video game faster. During the execution of the video game on the cloud game servers 103-1 to 103-N, the video game can issue an additional data storage access API call that triggers the copying of additional data from the cloud storage server 109 to the high-speed data storage 119 in the management servers 105-1 to 105-X, thereby enabling the video game to quickly access the data required from the high-speed data storage 119 in the management servers 105-1 to 105-X.
[0033] In some embodiments, cloud game servers 103-1 to 103-N maintain a database of locations where user data is stored in cloud storage server 109. In some embodiments, management servers 105-1 to 105-X shield cloud game servers 103-1 to 103-N from cloud storage server 109, such that cloud game systems 103-1 to 103-N do not need to keep track of where data is stored in cloud storage server 109. In some embodiments, management servers 105-1 to 105-X maintain a storage tracking database that includes information indicating where various data is stored within cloud storage server 109. When management servers 105-1 to 105-X receive a request for a particular type of user data from cloud game servers 103-1 to 103-N, management servers 105-1 to 105-X operate to query the storage tracking database via a data storage access API call to determine the identification information of the cloud storage server 109 where the requested data is located and where in the identified cloud storage server 109 the requested data is located. Next, management servers 105-1 to 105-X send a data request to the identified cloud storage server 109. In some embodiments, the storage tracking database is stored in cloud storage server 109 and is loaded into the high-speed data storage 119 of management servers 105-1 to 105-X where the storage tracking database is accessed and queried.
[0034] In some embodiments, the storage tracking databases on management servers 105-1 to 105-X are queried to determine which user data files need to be updated in other data centers in order to maintain the current redundancy and synchronization of user data in multiple data centers for purposes such as when the user is traveling and / or for data backup purposes and / or for other reasons. Also, in some embodiments, the user plays video games on the local game machine 127 rather than on the cloud game servers 103-1 to 103-N. In these embodiments, the storage tracking databases on management systems 105-1 to 105-X are used when the local game machine 127 needs to access data stored on the cloud storage server 109 via the management servers 105-1 to 105. Also, in some embodiments, the storage tracking databases on management servers 105-1 to 105-X are used to enable synchronization between local play of video games by the user on the local game machine 127 and cloud game play of video games by the user on the cloud game servers 103-1 to 103-N.
[0035] In some embodiments, the local gaming machine 127 includes an SSD that is consumed by writing data. Knowing this, video game developers program video games to direct storage operations in consideration of the limited lifespan of the SSD, which corresponds to a limited number of program / write cycles that the memory units within the SSD can withstand. Also, video game developers program video games considering that writing small amounts of data to the SSD can be particularly problematic. Thus, in many video games, the flash memory of the local gaming machine 127 equipped with an SSD is not permitted to write small blocks of data to the SSD, and instead, the data must be held until enough data has accumulated to write larger blocks of data to the SSD. To reduce the amount of write / program cycles to the SSD, video games are programmed to use "transactions" for storage access. Using transactions for storage access also has the advantage of reducing the risk of data corruption, among other things. The idea behind using transactions for storage access is that while video games continue to use POSIX API calls such as read and write, when the video game calls the "commit" API to trigger flushing the data stored in RAM to the SSD, the written data is stored only in RAM until the transaction is complete. The unmount API is an "implicit commit". Thus, the data access flow in a local gaming machine 127 equipped with an SSD that uses transactions for storage access is as follows: 1) (optionally, if needed) create a save data disk image, 2) create a transaction resource, 3) mount the save data disk image, 4) open a file, 5) read and / or write data to / from the file (writing only to RAM), 6) close the file, 7) commit the data, 8) delete the transaction resource, 9) unmount the save data disk image.If it is considered that the cloud game system can execute the same video game as that executed on the local game machine 127 equipped with an SSD, the cloud game servers 103-1 to 103-N, the management servers 105-1 to 105-X, and the cloud storage server 109 are collectively configured to handle the use of transactions for storage access.
[0036] In some embodiments, a transaction data buffer can be provided by either the video game or any of the cloud game systems 103-1 to 103-N. In some embodiments, the transaction data buffer is in the RAM. In some embodiments, since the size of the transaction buffer is small in the cloud game systems 103-1 to 103-N, the video game is made to provide the transaction buffer. Also, by making the video game provide the transaction buffer, the video game recognizes the limited capacity of the transaction buffer. In some embodiments, if the video game writes too much data using the standard data path "write API", the write operation fails with an error that there is not enough space to complete the write operation.
[0037] In some embodiments, when the cloud game servers 103-1 to 103-N call the commit API, the cloud game servers 103-1 to 103-N also enable the management servers 105-1 to 105-X to commit the buffer changes that the management servers 105-1 to 105-X return to the cloud storage server 109. In some embodiments, if the commit API call is a blocking API call (by default or by flag setting), the commit API call makes the video game wait until the management servers 105-1 to 105-X complete the flashback of the data to the cloud storage server 109. Otherwise, data corruption may occur if the management servers 105-1 to 105-X crash.
[0038] In some embodiments, to prevent data corruption, there is a mechanism to revert to the data state that existed before executing the commit / unmount operation in case of a power outage or other error condition during the commit / unmount operation. For example, in some embodiments, before committing data, the system reads any of the data expected to be updated, so that the read data can be recovered if a problem occurs during the commit operation. In some embodiments, management servers 105-1 to 105-X are programmed to read any of the data expected to be updated before executing the commit API operation. Management servers 105-1 to 105-X are programmed to track which data changes were requested and how they were requested to change that data. Also, in some embodiments, cloud storage server 109 is configured to support transactions. In these embodiments, the cloud storage server 109 tracks data changes when mounted by the management servers 105-1 to 105-X. Next, the commit / unmount API call triggers a flush of the data changes. If the flush of the data changes from the management servers 105-1 to 105-X to the cloud storage server 109 fails, the cloud storage server 109 can be used to revert the data changes.
[0039] FIG. 3 shows an exemplary diagram of some internal components of cloud game server 103-1 and management server 105-1 according to some embodiments. The root complex 311 of cloud game server 103-1 has a PCIe (peripheral component interconnect express) port 313 connected to the PCIe port 315 of PCIe switch 305 via PCIe link 309. Also, the root complex 317 of management server 105-1 has a PCIe port 316 connected to the PCIe port 319 of PCIe switch 305 via PCIe link 307. The PCIe switch 305 includes logic that bridges the memory address spaces of the management server 105-1 and the cloud game server 103-1. For example, the logic for bridging the memory address spaces of the management server 105-1 and the cloud game server 103-1 can include a non-transparent bridge (NTB) or a special direct memory access (DMA) engine that communicates with both the management server 105-1 and the cloud game server 103-1 and processes the necessary memory address translations. In some embodiments, the DMA engine can be implemented within the PCIe switch 305. It should be understood that both the root complex 311 of the cloud game server 103-1 and the root complex 317 of the management server 105-1 include a PCIe interface, or, by way of example, a Gen-Z communication / interconnect specification developed by the Gen-Z Consortium, or an equivalent interface such as a Gen-Z interface defined according to either a PCIe interface or a Gen-Z interface and any other future-developed interface that is essentially equivalent thereto.
[0040] For example, in some embodiments, the PCIe switch 305 optionally includes an NTB 321. When the PCIe switch 305 includes the NTB 321 and is in the NTB mode, the NTB 321 functions to convert the physical memory addresses within the memory access commands written to the data I / O (input / output) command buffer by the cloud game server 103-1 into memory addresses that can be obtained by the management server 105-1 within the computer memory 323 of the management server 105-1. The NTB 321 operates functionally to change the memory addresses at the PCIe transaction layer where transaction layer packets (TLPs) are assembled and disassembled. In some embodiments, the NTB 321 also operates to change the requester identifier. When the cloud game server 103-1 generates a command buffer via the storage CPU 331 or the like, the command buffer is finally wrapped in a TLP by the root complex 311. The storage CPU 331 operates to ensure the accuracy of any memory address in the command buffer generated by the storage CPU 331. Also, when the management server 105-1 needs to write data back to the cloud game server 103-1, the storage CPU 331 operates to ensure that the memory address in the command buffer is the converted address. The NTB 321 comes into play when the cloud game server 103-1 writes the command buffer to a memory address in the management server 105-1. In this case, the memory address to which the command buffer is written is converted by the NTB 321 and / or by the input / output memory management unit (IOMMU) 381 in the computer memory 323 of the management server 105-1. The IOMMU 381 maps the virtual memory address visible to the device to the physical memory address. Also, in this case, the content of the command buffer itself is not changed by the NTB 321 or the IOMMU 381.
[0041] In NTB mode, multiple root complexes can communicate with each other, that is, exchange data with each other. In some embodiments, when the PCIe switch 305 is connected to a secondary PCIe switch to which only NTB devices are connected, the secondary PCIe switch only transfers transaction layer packets (TLPs), so there is no need to use NTB. The computer memory 323 represents the high-speed data storage 119 mentioned with respect to FIG. 2. In various embodiments, the computer memory 323 can be RAM or storage class memory, or another type of computer memory substantially equivalent to RAM and / or storage class memory. The NTB 321 handles the conversion of the memory address in the data I / O command buffer and provides the converted memory address to the management server 105-1. When the PCIe switch 305 does not use the NTB321, the memory access commands written to the data I / O command buffer can be generated to include other metadata such as host identifiers or other types of metadata that can be used to determine the memory addresses in the computer memory 323 of the management server 105-1 where the memory addresses in the data I / O command buffer are mapped. In some embodiments where the PCIe switch 305 does not use the NTB321, the DMA engine can be used to send packets across the PCIe switch 305 to the correct destination. Also, in some embodiments, when the PCIe switch 305 does not use the NTB321 and is connected to a secondary PCIe switch, the secondary PCIe switch operates to forward the packets to the correct destination.
[0042] The cloud game server 103-1 includes at least one CPU 325 connected to an internal data bus 327. In various embodiments, the cloud game server 103-1 can also include one or more of the GPUs 329 connected to the internal data bus 327, and / or one or more of the storage CPUs 331 connected to the internal data bus 327, and / or one or more of the decoding / encryption engines 333 connected to the internal data bus 327, and / or one or more of the decompression / compression engines 335 connected to the internal data bus 327. The internal data bus 327 is connected to the root complex 311 of the cloud game server 103-1. In various embodiments, the GPU 329 is a processor configured to perform parallel operations to render images, animations, and videos for display on an electronic display screen. Also, in some embodiments, the parallel processing capabilities of the GPU 329 can be used for vector processing in non-graphic applications that require iterative calculations.
[0043] In various embodiments, the storage CPU 331 is configured to handle requests for storage commands and allocate storage to a particular type of storage media. In various embodiments, the storage CPU 331 and the main CPU 325 can have the same or different architectures. For example, in some embodiments, the storage CPU 331 can be an Advanced RISC (Reduced Instruction Set Computer) Machine (ARM) processor or a MIPS processor where the main CPU 325 is an x86 processor. It should be understood that in various embodiments, the storage CPU 331 can be essentially any type of suitable computer processor and the main CPU 325 can be essentially any type of suitable computer processor. Also, in some embodiments, instead of having both the main CPU 325 and the storage CPU 331, the cloud game servers 103-1 to 103-N have only the main CPU 325. In this case, the operations that would otherwise be performed by the storage CPU 331 when having both CPUs are performed by the main CPU 325. However, for the purposes of the description herein, the cloud game servers 103-1 to 103-N are considered to include both the main CPU 325 and the storage CPU 331. The particular type of storage media to which the storage CPU 331 allocates data for storage can vary depending on the execution capabilities, e.g., the data read speed and / or data write speed of the storage media and / or the form in which the data is stored in the storage media such as file-based data storage, folder-based data storage, or byte-based data storage. In some embodiments, the storage CPU 331 operates to divide data into multiple data chunks for placement in respective locations within the computer memory 337 of the cloud game server 103-1 having various storage locations within the computer memory 337 that are tracked and updated based on a storage table.In various embodiments, computer memory 337 can be RAM or storage class memory, or another type of computer memory that is substantially equivalent to RAM and / or storage class memory. Storage CPU 331 can also function to optimize storage based on input / output operations per second (IOPS). In some embodiments, IOPS-based storage optimization can be correlated to the access speed of available storage media, which can include rotating storage media, solid state storage media, and / or hybrid storage media. In various embodiments, decryption / encryption engine 333 is configured to apply an encryption algorithm to decrypt encrypted data and encrypt unencrypted data, and is a dedicated processor for applying the encryption algorithm. In various embodiments, decompression / compression engine 335 is configured to apply an algorithm to decompress compressed data and compress uncompressed data, and is configured to be dedicated to that algorithm.
[0044] In some embodiments, the computer memory 337 of the cloud game server 103-1 is connected to the root complex 311. In some embodiments, the cloud game server 103-1 also includes a DMA controller 339 connected to the root complex 311. In some embodiments, the computer memory 337 and / or the DMA controller 339 can be connected to the internal data bus 327 as indicated by lines 361 and 363 respectively. Also, in some embodiments, the cloud game server 103-1 can include one or more of the NVMe SSDs 341 connected to the PCIe port 345 of the root complex 311 via the PCIe link 343. Also, in some embodiments, the cloud game server 103-1 can include one or more of the SATA controllers 347 connected to the PCIe port 351 of the root complex 311 via the PCIe link 349. The SATA controller 347 can function as a bridge between one or more of the HDD 353 and the PCIe fabric. Also, in various embodiments, one or more other PCIe-compatible component devices (plural) 355 can be connected to the respective PCIe ports (plural) 357 of the root complex 311 via the respective PCIe links 359. In various embodiments, the other PCIe-compatible component devices (plural) 355 can include, among other devices, one or more GPUs, one or more field programmable gate arrays (FPGAs), one or more network adapters, one or more SSDs, and one or more SATA / HHDs. It should be understood that the architecture of the cloud game server 103-1 shown in FIG. 3 is provided as an example. In various embodiments, the cloud game server 103-1 can include more or fewer components than those shown in the example of FIG. 3.
[0045] The management server 105-1 includes at least one CPU 365 connected to an internal data bus 367. In various embodiments, the management server 105-1 can also include one or more of the GPUs 369 connected to the internal data bus 367 and / or one or more of the network interface cards (NICs) 373 connected to the internal data bus 367. The internal data bus 367 is connected to the root complex 317 of the management server 105-1. The management server 105-1 can also include one or more of the NVMe SSDs 371 connected to the root complex 317. Also, in some embodiments, the GPUs 369 and / or NICs 373, and / or other devices can be configured to use PCIe and can be directly connected to the root complex 317 instead of the internal data bus 367.
[0046] The systems and methods disclosed herein utilize a PCIe fabric that connects the cloud game server 103-1 to the cloud management server 105-1, enabling the CPU 325 and / or the storage CPU 331 and / or the DMA controller 339 (and / or other devices) on the cloud game server 103-1 to send messages and copy data between the computer memory 323 of the management server 105-1 and the computer memory 337 of the cloud game server 103-1, and vice versa. As a result of connecting the cloud game server 103-1 and the management server 105-1 using the PCIe fabric and after configuring the PCIe switch 305, a "shared memory" mechanism exists across the cloud game server 103-1 and the management server 105. The cloud game server 103-1 can directly access a specific portion 377 of the computer memory 323 within the management server 105-1, with very little cost, for example, bypassing the CPU 365 of the management server 105-1 as indicated by the arrow 379. The direct access to the computer memory 323 in the server management server 105-1 by the cloud game server 103-1 can manage data storage requests and can be directed by any device in the cloud game server 103-1 connected to the PCIe switch 305 such as the CPU 325 and / or the storage CPU 331 and / or the DMA controller 339 via the root complex 311. However, it should be understood that it may not be the most efficient use of the CPU 325 of the cloud game server 103-1 to manage data storage requests. Thus, the storage CPU 331 and / or the DMA controller 339 can be used to manage the data storage requests of the cloud game server 103-1 mainly by generating memory access commands that are written to the data I / O command buffer in the computer memory 323 of the management server 105-1.
[0047] In addition to providing the "shared memory" mechanism, the connection of the cloud game server 103-1 to the management server 105-1 via the PCIe switch 305 provides for the transmission of "messages" from the cloud game server 103-1 to the management server 105-1 by writing messages directly to the computer memory 337 of the cloud game server 103-1 or to the computer memory 323 of the management server 105-1 or to some memory within the PCIe switch 305, and vice versa. The use of message transmission between the cloud game server 103-1 and the management server 105-1 can facilitate the execution of memory access commands written to the data I / O command buffer. For example, when the cloud game server 103-1 expects the management server 105-1 to execute some memory access command that brings some of the requested data obtained from the data storage device and stored somewhere in the shared memory existing between the cloud game server 103-1 and the management server 105-1, the management server 105-1 can write a message to the memory location monitored by the cloud game server 103-1 to notify the cloud game server 103-1 of the time and place when the requested data becomes available for use by the management server 105-1.
[0048] In some embodiments, the message can be sent to one or more doorbell register(s) 375 published via the PCIe switch 305 by either the cloud game server 103-1 or the management server 105-1. In some embodiments, writing to the doorbell register 375 by the cloud game server 103-1 causes an interrupt to occur on the management server 105-1, whereby the management server 105-1 processes the interrupt. In some embodiments, by processing the interrupt by the management server 105-1, the management server 105-1 reads a message (some data) from a specific location in the shared memory existing between the cloud game server 103-1 and the management server 105-1. Similarly, writing to the doorbell register 375 by the management server 105-1 causes an interrupt to occur on the cloud game server 103-1, whereby the cloud game server 103-1 processes the interrupt. In some embodiments, by processing the interrupt by the cloud game server 103-1, the cloud game server 103-1 reads a message (some data) from a specific location in the shared memory existing between the cloud game server 103-1 and the management server 105-1.
[0049] The content of the message varies depending on the use case. In some use cases, the message can convey a request to read a certain amount of data from a storage device and store the read data in a shared memory existing between the cloud game server 103-1 and the management server 105-1. Next, after the request in the message is completed, another message can be sent to notify the completion. For example, when the cloud game server 103-1 sends a first message requesting the management server 105-1 to read specific data from the data storage, the management server 105-1 executes the request in the first message, and a second message notifying the completion of the first message request is sent to the cloud game server 103-1, and the specific requested data is stored in the shared memory existing between the cloud game server 103-1 and the management server 105-1.
[0050] The cloud game server 103-1 and the management server 105-1 are independent systems each having its own memory map. The memory map holds the memory addresses of the computer memory and other devices within the system. The PCIe switch 305 occupies a user-configurable area of the memory address space within the memory maps of the cloud game server 103-1 and the management server 105-1. In various embodiments, depending on the configuration of the PCIe switch 305, the physical memory address of the computer memory 337 of the cloud game server 103-1 can be mapped to the same or a different physical memory address within the computer memory 323 of the management server 105-1.
[0051] In some embodiments, for security and / or other reasons, the cloud management server 105-1 can be configured to hide its actual physical memory address, such as by implementing an IOMMU 381 that maps device-visible virtual memory addresses to physical memory addresses. The IOMMU 381 is configured to map device memory addresses to physical memory addresses, while a normal memory management unit (MMU) is configured to map virtual memory addresses to physical memory addresses. In the case of a normal MMU, since virtual memory addresses are contiguous, an application can recognize a block of memory, such as a block of 64 MB of memory, and operate on the block of memory. However, in reality, the MMU maps contiguous virtual memory addresses to multiple separate physical memory addresses, hiding the memory mapping from the application. Similar to a normal MMU, the IOMMU 381 maps virtual memory addresses visible to the cloud game server 103-1 to multiple separate physical memory addresses within the computer memory 323, hiding the memory mapping from the management server 105-1. Thus, by using the IOMMU 381, the cloud game server 103-1 can view a contiguous block of virtual memory addresses that exist on the management server 105-1 while hiding the complexity of how the contiguous block of virtual memory addresses is actually mapped across different physical memory addresses in the computer memory 323 of the management server 105-1. In some embodiments, the IOMMU 381 is included in the root complex 317 of the management server 105-1. In some embodiments, the root complex 311 of the cloud game server 103-1 can also include an IOMMU 383.
[0052] In the configuration of FIG. 3, the IOMMU 381 can enable the cloud game server 103-1 to view a specific memory address (device address) as having a one-to-one communication with a specific physical memory address in the computer memory 323 of the management server 105-1. However, in reality, the IOMMU 381 can remap a specific memory address as seen from the cloud game server 103-1 to a different physical memory address in the computer memory 323 of the management server 105-1. Also, in some embodiments, the IOMMU 381 can be used to block access to one or more specified physical memory regions in the computer memory 323 of the management server 105-1 that are not permitted to be accessed by the cloud game server 103-1. Further, since the IOMMU 381 effectively hides memory fragmentation in the computer memory 323 of the management server 105-1 from the cloud game server 103-1, the use of the IOMMU 381 can simplify the DMA transfer operation in the cloud game server 103-1. For example, if the IOMMU 381 were not used to present fragmented physical memory addresses in the computer memory 323 to the cloud game server 103-1 as a contiguous virtual block of memory addresses, the cloud game server 103-1 would need to execute multiple DMA transfer operations or scatter / gather transactions to read data across the fragmented physical memory addresses in the computer memory 323. However, by using the IOMMU 381 to present the fragmented physical memory addresses in the computer memory 323 to the cloud game server 103-1 as a contiguous virtual block of memory addresses, the cloud game server 103-1 can execute a single DMA transfer operation to read data across the fragmented physical memory addresses in the computer memory 323.
[0053] In some embodiments, the management server 105-1 is connected to the cloud storage system 390 via the NIC 373, as indicated by the connection portion 392. The cloud storage system 390 includes one or more cloud storage servers 109-1 to 109-Y. Each cloud storage server 109-1 to 109-Y includes respective NICs 387-1 to 387-Y. Further, each cloud storage server 109-1 to 109-Y includes one or more HDDs 389-1 to 389-Y. Also, in some embodiments, some of the cloud storage servers 109-1 to 109-Y include one or more NVMe SSDs or other types of data storage devices. In some embodiments, the cloud storage system 390 is configured and operated to distribute data storage among a plurality of physical storage media (HDDs) and optimize the use of the plurality of physical storage media using a data deduplication method. The plurality of physical storage media accessible / controlled by the cloud storage system 390 can be located in a plurality of different storage boxes interconnected by a high-speed interconnect and a high-speed switch. In some embodiments, the plurality of different storage boxes including the plurality of physical storage media accessible / controlled by the cloud storage system 390 can be installed at separate locations within a data center or between a plurality of geographically dispersed data centers. In some embodiments, since a caching system can be used to manage data storage among a plurality of data centers, data utilized or required for a particular requesting entity, e.g., a particular remote client device used by a user to play a cloud game application, can be moved to a particular data center that is closest to the requesting entity or provides an acceptable quality of service to the requesting entity. In some embodiments, the caching system can utilize a migration algorithm defined to migrate user data and / or game data to a particular data center.
[0054] Normally, access to game data is read-only. However, access to save data includes both read operations and write operations. Access to user data can be managed by management servers 105-1 to 105-X. The management servers 105-1 to 105-X mount the requested save data disk image from cloud storage servers 109-1 to 109-Y and implement the protocols necessary for data communication with the cloud storage servers 109-1 to 109-Y. In various embodiments, for various data communications between the management servers 105-1 to 105-X and the cloud storage servers 109-1 to 109-Y, TCP-based data communication protocols such as, for example, Ceph, NFS, Amazon S3 (http-based), or some other types of object, file, or block storage protocols can be used. As described above, in some embodiments, the cloud game servers 103-1 to 103-N communicate data with the management servers 105-1 to 105-X using PCI Express. In some embodiments, the cloud game servers 103-1 to 103-N communicate data with the management servers 105-1 to 105-X over the network via NIC 393 connected to NIC 373, as indicated by connection portion 394. Data communication between the cloud game servers 103-1 to 103-N and the management servers 105-1 to 105-X is performed according to one or more of various data communication protocols such as, among others, Ethernet (TCP / IP), RDMA, InfiniBand.
[0055] The data communication path followed by save data (and other user data) somewhat resembles that of game data. In both cases, the CPUs 325 of the cloud game servers 103-1 to 103-N generate command buffers corresponding to different control path APIs and data path APIs. The command buffers are processed by the storage CPUs 331 of the cloud game servers 103-1 to 103-N. The storage CPUs 331 instruct the management servers 105-1 to 105-X to manage the transmission of the command buffers, and the management servers 105-1 to 105-X have cloud storage mounted from one or more of the cloud storage servers 109-1 to 109-Y. In some embodiments, the control path API can be transmitted, among other things, over network connections such as Ethernet, RDMA, InfiniBand. However, command buffers that are performance-critical, such as those including the data path API, are transmitted to the management servers 105-1 to 105-X over high-speed data connections, such as over a PCIe fabric. The management servers 105-1 to 105-X are programmed to operate the CPU 365 to receive and process the command buffers received from the cloud game servers 103-1 to 103-N. According to the command buffers received from the cloud game servers 103-1 to 103-N, the management servers 105-1 to 105-X operate to obtain data from the cloud storage system 390 as necessary, using network protocols such as Ethernet, Ceph, NFS, and S3. For example, in some embodiments, the "mountSaveDiskImage" control path API triggers the transfer of data from the HDDs 389-1 to 389-Y in a given cloud storage server 109-1 to 109-Y to the RAM 323 or NVMe SSD 371 in the management servers 105-1 to 105-X. In some embodiments, the read / write data path API accesses or modifies the data in the RAM 323 of the management servers 105-1 to 105-X. The process by which data is written back to the cloud storage system 390 depends on whether a transaction is used. Without using a transaction, the write / close / unmount API flushes the data from the management servers 105-1 to 105-X back to the cloud storage system 390. Using a transaction, the commit API flushes any changes to the data from the management servers 105-1 to 105-X back to the cloud storage system 390.
[0056] Various embodiments of the cloud game server 100 are disclosed herein as including a cloud game server 103 (where the cloud game server 103 is any one of cloud game servers 103-1 to 103-N), a cloud storage server 109 (where the cloud storage server 109 is any one of cloud storage servers 109-1 to 109-Y), and an administrative server 105 (where the administrative server 105 is any one of administrative servers 105-1 to 105-X). The cloud game server 103 is configured to execute a video game according to an input received from the controller device 125 of the user 121. The cloud game server 103 is configured to instruct the transmission of a video stream that reflects the play of the video game by the user 121 to the local computing system 120 of the user 121. The cloud storage server 109 is in data communication with the cloud game server 103. The cloud storage server 109 includes a data storage device 389 for storing user data of the user 121 (where the data storage device 389 is data storage devices 389-1 to 389-Y within the corresponding cloud storage servers 109-1 to 109-Y). The user data includes data recording the playing of video games by user 121. The management server 105 communicates data with both the cloud game server 103 and the cloud storage server 109. The management server 105 includes a high-speed data storage device such as an NVMe SSD 371 that operates at a data speed faster and latency lower than the data storage device in the cloud storage server 109. In some embodiments, the data storage device in the cloud storage server 109 is an HDD, and the high-speed storage device is an NVMe SSD. The management server 105 is programmed to receive a data access request issued by a video game running on the cloud game server 103. The data access request identifies the requested data stored in the data storage device 389 in the cloud storage server 109. The management server 105 is programmed to copy the requested data from the data storage device 389 in the cloud storage server 109 to the high-speed data storage device 371 in the management server 105. The management server 105 is also programmed to respond to the data access request using the high-speed data storage device 371 instead of the cloud storage server 109 responding to the data access request.
[0057] It should be understood that there are differences in storage performance between the management servers 105-1 to 105-X and the cloud storage server 109, and the NVMe SSDs of the management servers 105-1 to 105-X operate to provide data to the cloud game servers 103-1 to 103-N, which are much faster than the HDDs of the cloud storage server 109. Also, there are differences in network performance between the management servers 105-1 to 105-X and the cloud storage server 109, and the management servers 105-1 to 105-X provide a higher network data transmission speed (higher network bandwidth) between the cloud game servers 103-1 to 103-N compared to the cloud storage server 109. By using the management servers 105-1 to 105-X as data caches, the data load in network communication with the cloud storage server 109 can be restricted. By using the management servers 105-1 to 105-X as data caches, it is guaranteed that the read operations from the cloud storage server 109 can be executed with very high performance. In some embodiments, without providing a cache to the management servers 105-1 to 105-X, there is a possibility that the effective data communication bandwidth with the cloud storage server 109 will be significantly reduced.
[0058] In some embodiments, the cloud storage server 109 is located at a different location from the cloud game servers 103-1 to 103-N. In some embodiments, a number of cloud game servers 103-1 to 103-N are deployed in an Internet service provider (ISP). This is inexpensive for operational reasons because the ISP provides power and Internet connection for free. In such embodiments, the network bandwidth between the ISP's data center and the cloud game data center should be good, but it is not always sufficient for the cloud game servers 103-1 to 103-N to write data directly to the NVMe SSD drives in the cloud storage server 109. Therefore, in these embodiments, even if the cloud storage server 109 implements an NVMe SSD drive that is faster than an HDD, the data caching function provided by the management servers 105-1 to 105-X is still beneficial.
[0059] In some embodiments, the management server 105 is programmed to perform two-way data communication with the cloud storage server 109 using a first network storage protocol, and the management server 105 is programmed to perform two-way data communication with the cloud game server 103 using a second network storage protocol different from the first network storage protocol. In some embodiments, the second network storage protocol is PCIe.
[0060] In some embodiments, the data access requests issued by the video game running on the cloud game server 103 are requests to mount a specific group of data. Instead of causing the cloud storage server 109 to respond to subsequent data access requests, the management server 105 is programmed to respond to subsequent data access requests to a specific group of data issued by the video game running on the cloud game server 103 by using the high-speed storage device 371. In some embodiments, the specific group of data is a data object, a data file, or a data block. In some embodiments, the specific group of data is a save data disk image for a video game, including save data for a user's play of the video game.
[0061] In some embodiments, subsequent data access requests issued by a video game running on cloud game server 103 are either read API calls or write API calls or unmount API calls or commit API calls. In some embodiments, management server 105 is programmed to respond to a write API call by writing data to a particular group of data in high-speed storage device 371 within management server 105. In some embodiments, management server 105 is programmed to respond to a write API call by writing data to both a particular group of data in high-speed storage device 371 within management server 105 and a particular group of data in data storage device 389 within cloud storage server 109. In some embodiments, management server 105 is programmed to respond to a read API call by reading data from a particular group of data in high-speed storage device 371 within management server 105. In some embodiments, management server 105 is programmed to respond to unmount and commit API calls by ensuring that all current data within a particular classification of data in high-speed storage device 371 within management server 105 also currently exists within a particular classification of data in data storage device 389 within cloud storage server 109.
[0062] Figure 4 shows a flowchart of a method for operating the cloud game system 100 according to some embodiments. The method includes an operation 401 for executing a video game on the cloud game server 103 according to an input received from the controller device 125 of the user 121. The method also includes an operation 403 for operating the cloud game server 103 to instruct the transmission of a video stream that reflects the playing of the video game by the user 121 to the local computing system 120 of the user 121. The method further includes an operation 405 for causing the user data of the user 121 to be stored in the cloud storage server 109. The user data includes data for recording the playing of the video game by the user 121. The method also includes an operation 407 for receiving a data access request at the management server 105. The data access request is issued by a video game being executed on the cloud game server 103. The data access request identifies the requested data stored in the data storage device 389 within the cloud storage server 109. The method also includes an operation 409 for copying the requested data from the data storage device 389 within the cloud storage server 109 to the high-speed data storage device 371 within the management server 105. The high-speed data storage device 371 operates at a higher data speed and lower latency than the data storage device 389 within the cloud storage server 109. In some embodiments, the data storage device 389 within the cloud storage server 109 is an HDD, and the high-speed storage device 371 within the management server 105 is an NVMe SSD. The method further includes an operation 411 for responding to the data access request using the high-speed data storage device 371 within the management server 105 instead of the cloud storage server 109 responding to the data access request.
[0063] In some embodiments, the method includes using a first network storage protocol for bi-directional data communication between the management server 105 and the cloud storage server 109, and using a second network storage protocol for bi-directional data communication between the management server 105 and the cloud game server 103, where the second network storage protocol is different from the first network storage protocol. In some embodiments, the second network storage protocol is PCIe.
[0064] In some embodiments, the data access request is a request to mount a specific classification of data. In some embodiments, a specific group of data is a data object, a data file, or a data block. In some embodiments, a specific group of data is a save data disk image for a video game, including save data for a user's play of the video game. The method also includes receiving a subsequent data access request at the management server 105, where the subsequent data access request is issued by a video game running on the cloud game server 103 and is directed to a specific classification of data. The method also includes using a high-speed data storage device 371 within the management server 105 to respond to the subsequent data access request instead of the cloud storage server 109 responding to the subsequent data access request.
[0065] In some embodiments, subsequent data access requests are any of a read API call, a write API call, an unmount API call, or a commit API call. In some embodiments, the method includes operating the management server 105 in response to a write API call by writing data to a specific classification of data within the high-speed storage device 371 within the management server 105. In some embodiments, the method includes operating the management server 105 to respond to a write API call by writing data to both a specific classification of data within the high-speed storage device 371 within the management server 105 and a specific classification of data within the data storage device 389 within the cloud storage server 109. In some embodiments, the method includes operating the management server 105 to respond to a read API call by reading data from a specific classification of data within the high-speed storage device 371 within the management server 105. In some embodiments, the method includes operating the management server 105 to respond to unmount and commit API calls by ensuring that all data currently present in a specific classification of data within the high-speed storage device 371 within the management server 105 is also currently present in a specific classification of data within the data storage device 389 within the cloud storage server 109.
[0066] In some embodiments, the CPUs 365 of the management servers 105-1 to 105-X are configured to implement the method of FIG. 4, including any optional and / or auxiliary operations associated with the method of FIG. 4. In some embodiments, computer-executable program instructions for performing the operations of the method of FIG. 4 are stored in the computer memory 323 of the management servers 105-1 to 105-X.
[0067] As described herein, access is provided to a user to play an online video game within the cloud game system 100. Access to the cloud game system 100 can be provided over a wide geographical area. Cloud computing is a computing paradigm in which dynamically scalable and often virtualized resources are provided as a service over the Internet. A user does not need to be an expert in the technical infrastructure of the computing "cloud" that supports the user. Cloud computing can be classified into different services such as infrastructure as a service (IaaS), platform as a service (PaaS), and software as a service (SaaS). Cloud computing services often provide common online applications such as video games that can be accessed from a web browser, but the software and data are stored on a server computing system within the cloud. The term "cloud" is used as a metaphor for the Internet based on the way the Internet is depicted in a computer network diagram and is an abstract concept that hides the complex infrastructure.
[0068] In other embodiments, the online video game may be executed by a distributed game engine. In these embodiments, the distributed game engine may be executed on a plurality of processing entities such as cloud game servers 103-1 to 103-N, such that each processing entity executes a given functional segment of the game engine online where the video game is executed. Each processing entity is regarded as merely a computing node from the perspective of the game engine. The game engine typically performs a functionally diverse set of operations to execute the video game application along with additional services experienced by the user. For example, the game engine implements game logic and executes game calculations, physical processes, geometry transformations, rendering, lighting, shading, audio, and additional in-game or game-related services. Additional services executed by the game engine may include, for example, messaging, social utilities, audio communication, game play replay functionality, help functionality, and the like. The game engine may be executed on an operating system virtualized by a hypervisor of a particular server, but in other embodiments, the game engine itself is distributed across a plurality of processing entities, and each entity may reside on a different server unit of the data center. In some embodiments, the plurality of processing entities includes one or more of server units, virtual machines, and containers among other types of processing entities, as required for each game engine segment. For example, if a game engine segment is responsible for camera transformation, since it will perform a large number of relatively simple mathematical operations (e.g., matrix transformation), that particular game engine segment may be provisioned with a virtual machine associated with a graphics processing unit (GPU). Also, by way of example, other game engine segments that require fewer but more complex operations may be provisioned with a processing entity associated with one or more higher-powered central processing units (CPUs). In some embodiments, a single cloud game server 103-1 can host multiple lightweight games (where the weight is with respect to computing resource consumption) for different users. In these embodiments, the cloud game server 103-1 including the storage CPU 331 and other components is shared. The network / PCIe connection is shared, and when each user needs to obtain a fair amount of time, this sharing of the cloud game server 103-1 can result in different levels of storage requirements and / or load balancing priorities. In some embodiments, a single cloud game server 103-1 can host both lightweight games and heavier games (where the weight is with respect to computing resource consumption).
[0069] By distributing the game engine, the game engine has elastic computing characteristics that are not constrained by the capabilities of physical server units. Instead, the game engine is provisioned with more or fewer compute nodes as needed to meet the requirements of online video games. From the perspective of an online video game and a video game player, a game engine distributed across multiple compute nodes is indistinguishable from a non-distributed game engine executed by a single processing entity because a game engine manager or supervisor distributes the workload and seamlessly integrates the results to provide the online video game output components to the player.
[0070] In some embodiments, the user / player accesses the remote services provided by the cloud game system 100 via a client device such as the local computing system 120, which includes a processor, a display, and an input / output (I / O) device. In various embodiments, the client device can be a personal computer, a mobile phone, a netbook computer, a tablet computer, a personal digital assistant device, or another type of computing device. In some embodiments, the NICs running on the cloud game servers 103-1 to 103-N recognize the type of client device being used by the client and adjust the data communication method between the cloud game servers 103-1 to 103-N and the client device as needed. In some embodiments, the client device uses a standard communication method such as HTML (Hypertext Markup Language) or TCP / IP (Transmission Control Protocol / Internet Protocol) or WebRTC (Web Real-Time Communication) to access the cloud game servers 103-1 to 103-N over the Internet.
[0071] It should be understood that a given online video game or game application can be developed for a specific platform and a specific associated controller device. However, when such an online video game becomes available via a cloud game system 100 as described herein, the user can access the online video game with a different controller device. For example, a certain video game may have been developed for a game console and its associated controller, but the user can access the cloud-based version of the video game from a personal computer using a keyboard and mouse. In such a scenario, a mapping can be defined from the inputs that can be generated by the controller devices available to the user (in this case, the keyboard and mouse) according to the input parameter configuration to inputs acceptable in the execution of the cloud-based version of the video game.
[0072] In another example, a user may access the cloud gaming system 100 via a tablet computing device, a touch screen smartphone, or other touch screen-driven devices. In this example, the client device and the controller device are integrated together within the same device, and input is provided by the detected touch screen input / gesture. In such a device, specific touch screen inputs corresponding to game inputs of a video game may be defined by an input parameter configuration. For example, buttons, a directional pad, and / or other types of input elements may be displayed or overlaid during the execution of an online video game, indicating positions on the touch screen that the user can touch to generate game inputs. Also, gestures such as swipes in a specific direction or specific touch actions may be detected as game inputs. In one embodiment, a tutorial showing how to input into game play via the touch screen may be provided to the user, for example, before starting the game play of an online video game, to familiarize the user with control operations on the touch screen.
[0073] In some embodiments, the client device functions as a connection point for the controller device. More specifically, the controller device communicates with the client device via a wireless connection or a wired connection and transmits input from the controller device to the client device. The client device then processes these inputs and subsequently transmits the input data to the cloud gaming servers 103-1 to 103-N via a network 123 that can be accessed via a local network device such as a router. However, in another embodiment, the controller itself can be a networked device that has the ability to communicate inputs directly to the cloud game servers 103-1 to 103-N via network 123 without first having to communicate such inputs through a client device. For example, the controller can be connected to a local network device (such as the aforementioned router) and send and receive data to and from the cloud game servers 103-1 to 103-N. Thus, while the client device may still be required to receive video output from the cloud-based video game and render it on a local display, the input latency can be reduced by enabling the controller to send inputs directly over the network to the cloud game servers 103-1 to 103-N to bypass the client device.
[0074] In some embodiments, the networked controller and client device can be configured to send certain types of inputs directly from the controller to the cloud game servers 103-1 to 103-N and other types of inputs to the cloud game servers 103-1 to 103-N via the client device. For example, apart from the controller itself, inputs that do not depend on any additional hardware or processing for detection can be sent directly from the controller to the cloud game servers 103-1 to 103-N via network 123 to bypass the client device. Such inputs can include, among other types of inputs, button inputs, joystick inputs, embedded motion detection inputs (e.g., inputs from an accelerometer, magnetometer, and / or gyroscope). However, inputs that utilize additional hardware or require processing by the client device may be sent from the controller to the client device and then from the client device to the cloud game servers 103-1 to 103-N. These inputs may include video captured from the game environment or captured audio that may need to be processed by the client device before being transmitted to the cloud game servers 103-1 to 103-N. Additionally, inputs from the controller's motion detection hardware may be processed by the client device in conjunction with the captured video so that the position and motion of the controller can be detected, which is then transmitted by the client device to the cloud game servers 103-1 to 103-N. It should be understood that the controller devices according to various embodiments may also receive data (e.g., feedback data) from the client device or directly from the cloud game servers 103-1 to 103-N.
[0075] Embodiments of the present disclosure may be implemented by various computer system configurations including, but not limited to, handheld devices, microprocessor systems, microprocessor-based or programmable consumer electronics, minicomputers, mainframe computers, and the like. Embodiments of the present disclosure may also be implemented in a distributed computing environment where tasks are performed by remote processing devices linked through a wired or wireless network.
[0076] Although the operations of some methods are described in a particular order, other housekeeping operations may be performed during the method operations, and / or the method operations may occur at slightly different times, or be distributed in a system where the processing operations occur at various intervals related to the processing, as long as the processing of the method operations provides a successful implementation of the method.
[0077] Some embodiments disclosed herein can also be made as computer-readable code on a computer-readable medium. A computer-readable medium is any data storage device that can store data, which can later be read by a computer system. Examples of computer-readable media include hard drives, network attached storage (NAS), read-only memory, random access memory, CD-ROMs, CD-Rs, CD-RWs, magnetic tapes, and other optical and non-optical data storage devices. In some embodiments, the computer-readable medium can include a computer-readable tangible medium distributed on a network-coupled computer system so that the computer-readable code is stored and executed in a distributed manner.
[0078] The foregoing description of the embodiments has been provided for purposes of illustration and description and is not intended to be exhaustive or limiting. The individual elements or features of a particular embodiment are generally not limited to that particular embodiment, but, where applicable, are interchangeable and can be used in the selected embodiment even if not specifically shown or described. Thus, one or more features from one or more of the embodiments disclosed herein can be combined with one or more features from one or more of the other embodiments disclosed herein to form other embodiments not expressly disclosed herein but implicitly disclosed herein. Such other embodiments can also be varied in many ways. Variations of such embodiments should not be regarded as a departure from the disclosure herein, and all such variations and modifications are intended to be included within the scope of the disclosure provided herein.
[0079] Although the foregoing embodiments have been described in some detail for purposes of clarity of understanding, it will be apparent that certain changes and modifications can be practiced within the scope of the appended claims. Accordingly, the embodiments disclosed herein should be considered as illustrative and not restrictive, and these embodiments should not be limited to the details described herein, but may be modified within the scope of the appended claims and their equivalents.
Claims
1. A cloud game server configured to execute a video game according to an input received from a user's controller device, the cloud game server being configured to instruct transmission of a video stream that reflects play of the video game by the user to the user's local computing system, having a cloud storage server including a data storage device for storing user data for the user, the user data including data for recording play of the video game by the user, having a management server that communicates with both the cloud game server and the cloud storage server, the management server including a high-speed data storage device that operates at a data speed faster and a latency lower than the data storage device in the cloud storage server, the management server being programmed to receive a control path application program interface (API) call issued by the video game running on the cloud game server, the management server being programmed to obtain data associated with the control path API call from the data storage device in the cloud storage server, so as to respond to the data associated with the control path API call before being required by the video game, the management server being programmed to store the obtained data in the high-speed data storage device, the management server being programmed to receive a subsequent data path API call issued by the video game, and the management server being programmed to respond to the subsequent data path API call using the high-speed data storage device instead of causing the cloud storage server to respond to the subsequent data path API call. A cloud game system.
2. The cloud game system according to claim 1, wherein the control path API call is a request to mount a specific classification of data.
3. The cloud game system according to claim 2, wherein the specific classification of the data is a data object, a data file, or a data block.
4. The specific classification of the data is a save data disk image for the video game, including save data for the play of the user of the video game, in the cloud game system according to claim 2.
5. The subsequent data path API call is either a read API call or a write API call, in the cloud game system according to claim 2.
6. The management server is programmed to respond to the write API call by writing data to the specific classification of the data in the high-speed data storage device, in the cloud game system according to claim 5.
7. The management server is programmed to respond to the write API call by writing data to both the specific classification of the data in the high-speed data storage device and the specific classification of the data in the data storage device in the cloud storage server, in the cloud game system according to claim 5.
8. The management server is programmed to respond to the read API call by reading data from the specific classification of the data in the high-speed data storage device, in the cloud game system according to claim 5.
9. The management server is programmed to respond to a subsequent unmount API call or a subsequent commit API call by ensuring that all current data in the specific classification of the data in the high-speed data storage device also currently exists in the specific classification of the data in the data storage device in the cloud storage server, in the cloud game system according to claim 5.
10. The data storage device in the cloud storage server is a hard disk drive, and the high-speed data storage device is a non-volatile memory express solid state drive, in the cloud game system according to claim 1.
11. The management server is programmed to have bidirectional data communication with the cloud storage server using a first network storage protocol, and the management server is also programmed to have bidirectional data communication with the cloud game server using a second network storage protocol different from the first network storage protocol. The cloud game system according to claim 1.
12. The cloud game system according to claim 11, wherein the second network storage protocol is a Peripheral Component Interconnect Express.
13. Execute a video game on the cloud game server according to the input received from the user's controller device, Operate the cloud game server to instruct the transmission of a video stream that reflects the play of the video game by the user to the user's local computing system, Cause the cloud storage server to store the user data of the user, which includes data for recording the play of the video game by the user, Receive a control path application programming interface (API) at the management server, and the control path API call is issued by the video game running on the cloud game server, The management server operates to respond to the data associated with the control path API call before it is required by the video game by obtaining the data associated with the control path API call from the data storage device in the cloud storage server. The management server operates to store the obtained data in a high-speed data storage device in the management server, and the high-speed data storage device operates at a faster data speed and lower latency than the data storage device in the cloud storage server. A method for operating a cloud game system, which uses the high-speed data storage device in the management server to respond to subsequent data path API calls issued by the video game instead of causing the cloud storage server to respond to subsequent data path API calls.
14. The control path API call according to claim 13, which is a request to mount a specific classification of data.
15. The method according to claim 14, wherein the specific classification of the data is a data object, a data file, or a data block.
16. The method according to claim 14, wherein the specific classification of the data is a save data disk image for the video game, including save data for the play of the user of the video game.
17. Furthermore, receive a subsequent control path API call at the management server, the subsequent control path API call is issued by the video game running on the cloud game server, the subsequent control path API call is directed to the specific classification of the data, The method according to claim 14, wherein instead of causing the cloud storage server to respond to the subsequent control path API call, the high-speed data storage device in the management server is used to respond to the subsequent control path API call.
18. The method according to claim 17, wherein the subsequent control path API call is either a read control path API call or a write control path API call.
19. Furthermore, the method according to claim 18, including operating the management server to write data to the specific classification of the data in the high-speed data storage device to respond to the write API call.
20. Furthermore, the method according to claim 18, including operating the management server to write data to both the specific classification of the data in the high-speed data storage device and the specific classification of the data in the data storage device in the cloud storage server to respond to the write API call.
21. The method according to claim 18, further including operating the management server to read data from the specific classification of the data in the high-speed data storage device to respond to the read API call.
22. Furthermore, by operating the management server to ensure that all current data within a particular classification of the data in the high-speed data storage device also currently exists within the particular classification of the data in the data storage device within the cloud storage server, in response to a subsequent unmount API call or a subsequent API call, the method according to claim 18.
23. The data storage device within the cloud storage server is a hard disk drive, and the high-speed data storage device is a non-volatile memory express solid state drive, the method according to claim 13.
24. Furthermore, a first network storage protocol is used for bidirectional data communication between the management server and the cloud storage server, a second network storage protocol is used for bidirectional data communication between the management server and the cloud game server, and the second network storage protocol is different from the first network storage protocol, the method according to claim 13.
25. The second network storage protocol is a peripheral component interconnect express, the method according to claim 24.
Citation Information
Patent Citations
Disk controller
JP1986054527A
Dynamic network storage for cloud console server
JP2018526735A
Method and system for saving snapshots of gameplay executed on a game cloud system and used to later initiate gameplay execution by any user
JP2019527079A
Networked gaming headset
US20150110311A1
System and method for mobile number verification
US20160014603A1