Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
COMPUTING RESOURCE ALLOCATIONS
Document Type and Number:
WIPO Patent Application WO/2023/140855
Kind Code:
A1
Abstract:
In some examples, a system assigns a collection of computing resources for remote access, where the collection of computing resources includes a threshold quantity of computing resources that are maintained in an available state. The system receives, from a client, a request for a computing resource, and in response to the request, allocates, to the client, access to a first computing resource of the collection of computing resources that are in the available state.

Inventors:
LEMOS ROSA LUCAS (BR)
SANTOS DA SILVA JR ALEXANDRE (BR)
MEYBOM POSPICHIL BRUNO (BR)
Application Number:
PCT/US2022/013216
Publication Date:
July 27, 2023
Filing Date:
January 21, 2022
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
HEWLETT PACKARD DEVELOPMENT CO (US)
International Classes:
H04L12/54; G06F9/50
Foreign References:
US20150326500A12015-11-12
US20130326044A12013-12-05
US6366945B12002-04-02
US20130297802A12013-11-07
US20180097810A12018-04-05
Attorney, Agent or Firm:
ANDERSON, Maria C. et al. (US)
Download PDF:
Claims:
What is claimed is:

1 . A non-transitory machine-readable storage medium comprising instructions that upon execution cause a system to: assign a collection of computing resources for remote access, wherein the collection of computing resources comprises a threshold quantity of computing resources that are maintained in an available state; receive, from a client, a request for a computing resource; in response to the request, allocate, to the client, access to a first computing resource of the collection of computing resources that are in the available state; and in response to the allocating, transition a second computing resource in an unprovisioned state to the available state, and add the second computing resource to the collection of computing resources, to maintain the threshold quantity of computing resources that are in the available state in the collection of computing resources.

2. The non-transitory machine-readable storage medium of claim 1 , wherein the transitioning of the second computing resource from the unprovisioned state to the available state comprises provisioning the second computing resource from a pool of unprovisioned computing resources.

3. The non-transitory machine-readable storage medium of claim 2, wherein the provisioning of the second computing resource comprises loading features into the second computing resource.

4. The non-transitory machine-readable storage medium of claim 3, wherein the loading of the features into the second computing resource comprises loading any or a combination of: an operating system, system firmware, application programs, and drivers.

5. The non-transitory machine-readable storage medium of claim 1 , wherein the collection of computing resources comprise different types of computing resources.

6. The non-transitory machine-readable storage medium of claim 5, wherein the different types of computing resources comprise computing resources selected from among a cloud computing resource, a virtual computing resource, and a physical computing resource.

7. The non-transitory machine-readable storage medium of claim 6, wherein the instructions upon execution cause the system to: select, in response to the request, the first computing resource from among the cloud computing resource, the virtual computing resource, and the physical computing resource.

8. The non-transitory machine-readable storage medium of claim 1 , wherein the instructions upon execution cause the system to: receive an input setting a value of the threshold quantity.

9. The non-transitory machine-readable storage medium of claim 1 , wherein the collection of computing resources is a first collection of computing resources that have a first common feature, and the instructions upon execution cause the system to: assign a second collection of computing resources for remote access, the second collection of computing resources having a second common feature; and determine from which of the first collection of computing resources and the second collection of computing resources a computing resource for the request is to be allocated based on a type of workload to be performed for the request.

10. The non-transitory machine-readable storage medium of claim 1 , wherein the instructions upon execution cause the system to: in response to detecting that a quantity of computing resources in the available state exceeds the threshold quantity, deprovision a computing resource of the collection of computing resources.

11. A system comprising: a processor; and a non-transitory storage medium storing instructions executable on the processor to: receive an input setting a threshold that specifies a threshold quantity of computing resources in a collection of computing resources to be maintained in an available state for remote access; allocate computing resources from the threshold quantity of computing resources to clients in response to requests from the clients; as each computing resource is allocated to a client, provision another computing resource to be in the available state to maintain the threshold quantity of computing resources in the available state; and in response to detecting that a quantity of computing resources in the available state exceeds the threshold quantity, deprovision a computing resource of the collection of computing resources.

12. The system of claim 11 , wherein responsive to allocation of a respective computing resource to a client, the respective computing resource is in an allocated state and not in the available state, and wherein responsive to a return of the respective computing resource by the client, the respective computing resource is transitioned to the available state.

13. The system of claim 11 , wherein the collection of computing resources comprise different types of computing resources including a cloud computing resource, a virtual computing resource, and a physical computing resource, and wherein the instructions are executable on the processor to: select a computing resource from among the cloud computing resource, the virtual computing resource, and the physical computing resource based on a workload to be performed for a request of a client.

14. A method of a system comprising a hardware processor, comprising: maintaining a collection of computing resources for remote access, wherein the collection of computing resources comprises a threshold quantity of computing resources that are maintained in an available state; receiving, from a client, a request for a computing resource; in response to the request, allocating, to the client, access to a first computing resource of the collection of computing resources that are in the available state, wherein the allocating causes a quantity of computing resources in the available state to drop below the threshold quantity; and in response to the allocating, transitioning a second computing resource in an unprovisioned state to the available state, and adding the second computing resource to the collection of computing resources, to maintain the threshold quantity of computing resources that are in the available state in the collection of computing resources.

15. The method of claim 14, further comprising: in response to detecting that a quantity of computing resources in the available state exceeds the threshold quantity, deprovisioning a computing resource of the collection of computing resources.

Description:
COMPUTING RESOURCE ALLOCATIONS

Background

[0001] Computing resources are used by users to perform various tasks. Examples of computing resources can include user devices (e.g., desktop computers, workstations, tablet computers, notebook computers, smart phones, etc.). Additionally or alternatively, computing resources can include cloud computing resources that are available in a cloud, and virtual computing resources that can execute in physical machines.

Brief Description of the Drawings

[0002] Some implementations of the present disclosure are described with respect to the following figures.

[0003] FIG. 1 is a block diagram of an arrangement that includes a connection broker engine and a provisioning engine to allocate computing resources, in accordance of some examples.

[0004] FIG. 2 is a flow diagram of a process for allocating computing resources, according to some examples.

[0005] FIG. 3 is a block diagram of a storage medium that stores machine- readable instructions according to some examples.

[0006] FIG. 4 is a block diagram of a system according to some examples.

[0007] FIG. 5 is a flow diagram of a process according to some examples.

[0008] Throughout the drawings, identical reference numbers designate similar, but not necessarily identical, elements. The figures are not necessarily to scale, and the size of some parts may be exaggerated to more clearly illustrate the example shown. Moreover, the drawings provide examples and/or implementations consistent with the description; however, the description is not limited to the examples and/or implementations provided in the drawings.

Detailed Description

[0009] In the present disclosure, use of the term "a," "an," or "the" is intended to include the plural forms as well, unless the context clearly indicates otherwise. Also, the term "includes," "including," "comprises," "comprising," "have," or "having" when used in this disclosure specifies the presence of the stated elements, but do not preclude the presence or addition of other elements.

[0010] Users may be allowed remote access of computing resources. For example, a user may be able to remotely access a computing resource using remote desktop techniques or mechanisms. A "remote desktop" refers to a feature that allows computations to be run on a computing resource (that is remotely located from a user) while images for the computations are displayed at a client device associated with the user, where the client device is remote from the computing resource. User inputs are received at the client device and transmitted to the computing resource for processing.

[0011] In an organization that has a relatively large number of users, providing efficient use of remotely accessible computing resources can pose a challenge. For example, allocating a dedicated physical machine (e.g., a user device such as a workstation, etc.) to each user may be inefficient, since not all users may access their dedicated user devices at the same time. As a result, a certain number of unused user devices may be present any given time, which is inefficient in terms of resource usage.

[0012] Additionally, even in scenarios where computing resources are allocated from a centralized data center or a cloud, manual provisioning may be performed in which an administrator is involved in provisioning computing resources for remote access by users. Such manual provisioning can be inefficient since a static quantity of computing resources (allocated to some users) may be maintained in a given pool of computing resources that may not be available to other users. [0013] In accordance with some implementations of the present disclosure, automated provisioning of computing resources is performed to maintain a threshold quantity of computing resources in an available state for allocation to users. The threshold quantity of computing resources maintained in the available state allows for the computing resources in a given pool to be readily available to users upon request, while allowing for unprovisioned computing resources to be dynamically allocated to other pools based on dynamic demand.

[0014] As used here, a "computing resource" can refer to any or some combination of a physical computing resource (e.g., a computer, a hardware processor, a core of a hardware processor, a communication node, a storage system, etc.), a virtual computing resource (e.g., a virtual machine, a container that provides an isolated computing environment, etc.), or a cloud computing resource (e.g., a computing resource that resides in a cloud, such as a public cloud, a private cloud, etc.).

[0015] A "provisioned computing resource" (or equivalently, a computing resource in an "available state" or "provisioned state") can refer to a computing resource in which designated programs (including machine-readable instructions) such as operating systems (OSs), system firmware, application programs, drivers, and so forth, are loaded and ready to use, and/or in which hardware components (e.g., network interface cards, graphics cards, processors, storage devices, memory devices, input/output (I/O) devices, etc.) have been initialized (powered on, booted, etc.) and configured for use.

[0016] An "unprovisioned computing resource" (or equivalently, a computing resource in an "unprovisioned state") can refer to a computing resource in which a designated program has not been loaded or is not ready for use, and/or in which a hardware component has not been initialized or configured for use.

[0017] A "pool" of computing resources can refer to any collection of computing resources. In some examples, multiple pools of computing resources can be defined, where different pools of computing resources may have different features (e.g., different programs loaded, different hardware components installed, etc.). For example, a first pool of computing resources can have a first type of application program or a first type of operating system loaded, a second pool of computing resources can have a different second type of application program or a different second type of operating system loaded, and so forth. As further examples, a first pool of computing resources can have a first type of hardware component (e.g., a first type of processor, a memory of a first storage capacity, etc.), a second pool of computing resources can have a second type of hardware component, and so forth.

[0018] FIG. 1 is a block diagram of an example arrangement that includes a connection broker engine 102 and a provisioning engine 104. The connection broker engine 102 can receive a request for a computing resource, and in conjunction with the provisioning engine 104, can allocate, from a pool of computing resources, a computing resource in response to the request.

[0019] As used here, an "engine" can refer to a hardware processing circuit, which can include any or some combination of a microprocessor, a core of a multicore microprocessor, a microcontroller, a programmable integrated circuit, a programmable gate array, or another hardware processing circuit. Alternatively, an "engine" can refer to a combination of a hardware processing circuit and machine- readable instructions (software and/or firmware) executable on the hardware processing circuit.

[0020] Although FIG. 1 shows the connection broker engine 102 and the provisioning engine 104 as separate components, in other examples, the connection broker engine 102 and the provisioning engine 104 can be integrated in the same component.

[0021] The connection broker engine 102 is able to communicate with client devices 106, such as over a network (e.g., the Internet, a local area network (LAN), a wide area network (WAN), or another type of network). As used here, a "client device" includes a computer (e.g., a desktop computer, a notebook computer, a tablet computer, a smartphone, etc.) that can be used by a corresponding user (e.g., 108 in FIG. 1 ) to issue a request for a computing resource.

[0022] A user 110 at a client device 106 is able to access a user interface (III) presented by the connection broker engine 102. Through the III, the user 110 can submit a request for a computing resource, such as from any of pools 108-1 to 108- N of computing resources, where N > 1 . Although multiple pools of computing resources are depicted in FIG. 1 , in other examples, there can just be one pool of computing resources from which a computing resource can be selected for allocation in response to a request from a user 110.

[0023] A user 110 at a client device 106 may be remote from where computing resources of the pools 108-1 to 108-N of computing resources are located. The pools of computing resources may be located in an enterprise network, a cloud, or any other arrangement of computing resources, which can be located at one geographic location or multiple disparate geographical locations.

[0024] In some examples, a computing resource that is allocated from the pools 108-1 to 108-N of computing resources to a user 110 may execute a remote desktop program (including software and/or firmware, or more generally, machine-readable instructions) that is accessible remotely, such as from a client device 106. The remote desktop program executable in an allocated computing resource is able to use graphics capabilities of the allocated computing resource to generate images. The generated images are transmitted (over a network) from the allocated computing resource to the client device 106 for display at the client device 106.

[0025] The client device 106 includes user input devices, such as a keyboard, a mouse (or other type of pointer device), and so forth. Data relating to actuation of the user input devices at the client device 106 is transmitted to the allocated computing resource, which processes the data to perform computations. In some examples, the remote desktop program executed in the allocated computing resource can be a ZCentral Remote Boost program from HP Inc., formerly referred to as the Remote Graphic Software (RGS) from HP Inc. [0026] In other examples, other types of remote desktop programs can be executed at an allocated computing resource to allow for a remote client device to access computing capabilities of the allocated computing resource.

[0027] In accordance with some implementations of the present disclosure, the connection broker engine 102 interacts with the provisioning engine 104 to allocate a computing resource from a given pool of computing resources (e.g., 108-1 to 108-N).

[0028] When a user 110 at a client device 106 issues a request for a computing resource, the request may include information specifying the type of workload that is to be performed by the requested computing resource. For example, the workload can include a graphics rendering workload, in which graphical images are rendered for display. In other examples, the workload can be an animation workload for animating images. In further examples, the workload can be a personal computing workload that employs productivity programs, such as a document creation/editing program, a calendar program, spreadsheet program, and so forth.

[0029] In some examples, the different pools 108-1 to 108-N of computing resources can be loaded with different types of application programs. For example, the pool of computing resources 108-1 may be loaded with graphics rendering programs. The pool 108-N of computing resources may be loaded with animation programs. Another pool of computing resources may be loaded with productivity programs. Depending on the type of workload requested, the connection broker engine 102 can request the provisioning engine 104 to allocate a computing resource from an appropriate one of the pools 108-1 to 108-N of computing resources. For example, if the workload specified by the request is a graphics rendering workload, then the connection broker engine 102 may request the provisioning engine 104 to select a computing resource from the pool of computing resources 108-1 on which graphics rendering programs are loaded.

[0030] More generally, a selection of a pool of computing resources from which a computing resource is requested by the connection broker engine 102 is based on the type of workload requested and the corresponding type of programs loaded in the respective pools of computing resources.

[0031] In other examples, workloads specified by requests can be matched to different pools of computing resources based on other properties specified by the requests, such as processing, storage, and/or communication capabilities of computing resources in the different pools of resources. For example, if a workload specified in a request has a high processing demand, then the connection broker engine 102 may select a pool of computing resources (from among the multiple pools 108-1 to 108-N) that has computing resources with higher processing capabilities.

[0032] As another example, if a workload of a request performs high-bandwidth communications, then the connection broker engine 102 can select a pool of computing resources that has greater communication capabilities (e.g., computing resources with network interface cards that can communicate at higher communication speeds over a network).

[0033] In accordance with some implementations of the present disclosure, each pool of computing resources can include the same type of computing resources or different types of computing resources, including physical computing resources 112, virtual computing resources 114, and cloud computing resources 116, as examples. For example, one pool of computing resources can include just physical computing resources 112, or just virtual computing resources 114, or just cloud computing resources 116. As another example, another pool of computing resources can include a mix of some combination of physical computing resources 112, virtual computing resources 114, and cloud computing resources 116.

[0034] Each pool of computing resources (108-1 to 108-N) includes provisioned computing resources that are ready for allocation to a user 110 in response to a request received from an associated client device 106. In other words, in some examples, each pool of computing resources includes computing resources that are in the available state (or equivalently, the provisioned state). [0035] FIG. 1 also shows a pool of unprovisioned computing resources 118 (computing resources in the unprovisioned state). The unprovisioned computing resources in the pool 118 can be assigned to any of the pools 108-1 to 108-N of computing resources. To assign an unprovisioned computing resource to a pool of computing resources, the provisioning engine 104 transitions the unprovisioned computing resource from the unprovisioned state to the available state.

[0036] Transitioning a computing resource in the unprovisioned state to the available state can include any or some combination of the following tasks: loading designated programs such as OSs, system firmware, application programs, drivers, and so forth, into the computing resources, and/or initializing and configuring hardware components (e.g., network interface cards, graphics cards, processors, storage devices, memory devices, input/output (I/O) devices, etc.).

[0037] In some examples, the provisioning engine 104 is configured with a computing resource threshold 120. The computing resource threshold 120 can be stored in a memory. The memory may be part of the provisioning engine 104, or the memory may be external of but is accessible by the provisioning engine 104. The memory can include a dynamic random access memory (DRAM), a static random access memory (SRAM), a nonvolatile memory such as a flash memory, and so forth.

[0038] In some examples, the provisioning engine 104 can receive an input setting a value of the computing resource threshold 120. The input may be received from a user (e.g., an administrator), a program, or a machine.

[0039] The computing resource threshold 120 specifies a quantity of (i.e. , how many) computing resources in the available state to be maintained in each pool 108- 1 to 108-N. In some examples, the same computing resource threshold 120 can be used for each of the different pools 108-1 to 108-N. In other examples, different computing resource thresholds 120 can be associated with the different pools 108-1 to 108-N. [0040] As an example, if the computing resource threshold 120 is set to the value 2, then 2 computing resources in the available state are to be maintained in a respective pool of computing resources. In other examples, the computing resource threshold 120 can be set to other values (e.g., 0, 1 , 3, 4, 5, etc.).

[0041] The provisioning engine 104 also includes computing resource state transition management logic 122, which can be implemented using a portion of the hardware processing circuit of the provisioning engine 104, or alternatively, can be implemented using machine-readable instructions executable by the provisioning engine 104.

[0042] The computing resource state transition management logic 122 manages the transition of a computing resource between the unprovisioned state and the available state. The computing resource state transition management logic 122 can transition an unprovisioned given computing resource from the unprovisioned state to the available state, to assign the given computing resource to a corresponding pool of computing resources. Alternatively, the computing resource state transition management logic 122 can transition a computing resource in the available state to the unprovisioned state, to assign the computing resource from a pool of computing resources back to the pool of unprovisioned computing resources 118.

[0043] FIG. 2 is a flow diagram of a process for allocating a computing resource in response to a request. A client device 106 sends (at 202), to the connection broker engine 102, a request for a computing resource. The request can include information describing a type of workload that is to be performed by the requested computing resource and/or other properties such as processing, storage, and/or communication capabilities of a computing resource.

[0044] In response to the request, the connection broker engine 102 selects (at 204), based on the information of the request, a pool from among multiple pools of computing resources (e.g., 108-1 to 108-N). The pool selected can be based on the type of workload that is to be performed on the requested computing resource, and/or on properties relating to a computing resource sought by the request. [0045] After selecting the pool from the multiple pools of computing resources, the connection broker engine 102 sends (at 206) a request to the provisioning engine 104 to request a computing resource from the selected pool. The request sent by the connection broker engine 102 can include information identifying the selected pool of computing resources (e.g., one of 108-1 to 108-N). Communication between the connection broker engine 102 and the provisioning engine 104 can be through an interface, such as an application programming interface (API), a library, and so forth.

[0046] In response to the request from the connection broker engine 102, the provisioning engine 104 allocates (at 208) a computing resource from the selected pool. As part of this allocation, the provisioning engine 104 can determine whether the selected pool has any computing resources in the available state.

[0047] If the selected pool has any computing resource(s) in the available state, the provisioning engine 104 can select a computing resource from the computing resource(s) in the available state, and allocate the selected computing resource for the request received from the connection broker engine 102.

[0048] If the selected pool does not have any computing resources in the available state, the provisioning engine 104 can transition an unprovisioned computing resource (from the pool 118) to the available state to assign the transitioned computing resource to the selected pool of computing resources, so that the provisioning engine 104 can allocate a computing resource from the selected pool in response to the request from the connection broker engine 102.

[0049] The provisioning engine 104 sends (at 210) information of the allocated computing resource to the connection broker engine 102, which in turn sends (at 212) the information of the allocated computing resource to the client device 106. Examples of the information of allocated computing resource that can be sent back to the client device 106 can include a network address (e.g., an Internet Protocol address) of the allocated computing resource, a port number of a port of the allocated computing resource, a version of a program (e.g., a remote desktop program) in the allocated computing resource, and so forth. The client device 106 can use the information of the allocated computing resource to access the capabilities of the allocated computing resource, such as in a remote desktop session.

[0050] On a periodic or other intermittent basis or in response to a different event, the provisioning engine 104 can compare (at 214) a quantity of computing resources in each pool of computing resources to a respective computing resource threshold (e.g., 120 in FIG. 1 ). The computing resource threshold specifies a quantity of computing resources in the available state that are to be maintained in a pool of computing resources.

[0051] If the quantity of computing resources in the available state in a given pool drops below the computing resource threshold, the provisioning engine 104 can transition unprovisioned computing resource(s) from the pool 118 to the available state, and assign the transitioned computing resource(s) to the given pool. The quantity of computing resources in the available state can drop as computing resources are allocated to client devices. When a computing resource is allocated from the given pool of computing resources to a client device, the computing resource is marked as no longer in the available state (e.g., the computing resource may be marked as being in an allocated state).

[0052] When a user 110 is done with a computing resource that was allocated to the client device 106, the provisioning engine 104 can transition the computing resource from the allocated state back to the available state. In some examples, a workload can have a specified duration, after which the provisioning engine 104 can return the computing resource allocated for the workload back to the given pool. In other examples, the computing resource can be returned back to the given pool (by transitioning the computing resource from the allocated state to the available state) in response to the provisioning engine 104 detecting that the user 110 has logged out of a remote desktop session. As another example, the workload may be terminated by another entity, which can cause the provisioning engine 104 to return the computing resource back to the given pool. [0053] When a computing resource is transitioned from the allocated state to the available state, the quantity of computing resources of the given pool in the available state can increase. If the quantity of computing resources of the given pool in the available state exceeds the computing resource threshold, then the provisioning engine 104 can transition computing resource(s) in the available state to the unprovisioned state so that the quantity of computing resources of the given pool in the available state is equal to the computing resource threshold.

[0054] As depicted in FIG. 2, generally, the provisioning engine 104 transitions (at 216) computing resources to different states (the available state or the unprovisioned state) based on the comparison (at 214) of the quantity of computing resources in a respective pool of computing resources to the respective computing resource threshold.

[0055] By being able to transition computing resources between different states based on the respective computing resource threshold, the provisioning engine 104 can increase computing resource utilization. For example, if there are too many computing resources in the available state within a given pool of computing resources, provisioning engine 104 can transition the extra computing resource(s) from the available state to the unprovisioned state to assign the computing resource(s) in the unprovisioned state back to the pool of unprovisioned computing resources 118. In this way, the extra computing resource(s) can be made available for use in other pools for assignment to other users.

[0056] Also, by keeping the quantity of computing resources in the available state within the respective pool at the respective computing resource threshold, a computing resource can be allocated from the respective pool to a user in a timely manner (e.g., the user does not have to wait for a computing resource to be provisioned). In some cases, provisioning a computing resource (to transition the computing resource from the unprovisioned state to the available state) may take a relatively long time (e.g., minutes), which can delay the allocation of computing resources in response to requests from users. [0057] FIG. 3 is a block diagram of a non-transitory machine-readable or computer-readable storage medium 300 according to some examples. The storage medium 300 stores machine-readable instructions that upon execution cause a system (e.g., a computer or a collection of computers) to perform specified tasks.

[0058] The machine-readable instructions include computing resource collection assignment instructions 302 to assign a collection of computing resources (e.g., one of pools 108-1 to 108-N in FIG. 1 ) for remote access, where the collection of computing resources includes a threshold quantity of computing resources that are maintained in the available state.

[0059] The machine-readable instructions include request reception instructions 304 to receive, from a client (e.g., a client device 106 or a user 110), a request for a computing resource.

[0060] The machine-readable instructions include computing resource allocation instructions 306 to, in response to the request, allocate, to the client, access to a first computing resource of the collection of computing resources that are in the available state.

[0061] The machine-readable instructions include computing resource state transition instructions 308 to, in response to the allocation, transition a second computing resource in an unprovisioned state to the available state, and add the second computing resource to the collection of computing resources, to maintain the threshold quantity of computing resources that are in the available state in the collection of computing resources.

[0062] In some examples, transitioning the second computing resource from the unprovisioned state to the available state includes provisioning the second computing resource from a pool of unprovisioned computing resources (e.g., 118 in FIG. 1 ).

[0063] In some examples, provisioning of the second computing resource includes loading features (e.g., programs) into the second computing resource. [0064] In some examples, the collection of computing resources is a first collection of computing resources that have a first common feature (e.g., same OS, same application program, etc.). The machine-readable instructions can assign a second collection of computing resources for remote access, where the second collection of computing resources has a second common feature. The machine- readable instructions can determine from which of the first collection of computing resources and the second collection of computing resources a computing resource for the request is to be allocated based on a type of workload to be performed for the request.

[0065] In some examples, the machine-readable instructions can, in response to detecting that a quantity of computing resources in the available state exceeds the threshold quantity, deprovision a computing resource of the collection of computing resources (transition the computing resource from the available state to the unprovisioned state).

[0066] FIG. 4 is a block diagram of a system 400 that includes a hardware processor 402 (or multiple hardware processors). A hardware processor can include a microprocessor, a core of a multi-core microprocessor, a microcontroller, a programmable integrated circuit, a programmable gate array, or another hardware processing circuit.

[0067] The system 400 includes a non-transitory storage medium 404 storing machine-readable instructions executable on the hardware processor to perform various tasks. Machine-readable instructions executable on a hardware processor can refer to the instructions executable on a single hardware processor or the instructions executable on multiple hardware processors.

[0068] The machine-readable instructions in the storage medium 404 include threshold setting instructions 406 to receive an input setting a threshold that specifies a threshold quantity of computing resources in a collection of computing resources to be maintained in an available state for remote access. [0069] The machine-readable instructions in the storage medium 404 include computing resource allocation instructions 408 to allocate computing resources from the threshold quantity of computing resources to clients in response to requests from the clients.

[0070] The machine-readable instructions in the storage medium 404 include computing resource provisioning instructions 410 to, as each computing resource is allocated to a client, provision another computing resource to be in the available state to maintain the threshold quantity of computing resources in the available state.

[0071] The machine-readable instructions in the storage medium 404 include computing resource deprovisioning instructions 412 to, in response to detecting that a quantity of computing resources in the available state exceeds the threshold quantity, deprovision a computing resource of the collection of computing resources.

[0072] FIG. 5 is a flow diagram of a process 500 according to some examples.

[0073] The process 500 includes maintaining (at 502) a collection of computing resources for remote access, where the collection of computing resources includes a threshold quantity of computing resources that are maintained in an available state.

[0074] The process 500 includes receiving (at 504), from a client, a request for a computing resource.

[0075] The process 500 includes in response to the request, allocating (at 506), to the client, access to a first computing resource of the collection of computing resources that are in the available state, where the allocating causes a quantity of computing resources in the available state to drop below the threshold quantity.

[0076] The process 500 includes, in response to the allocating, transitioning (at 508) a second computing resource in an unprovisioned state to the available state, and adding the second computing resource to the collection of computing resources, to maintain the threshold quantity of computing resources that are in the available state in the collection of computing resources. [0077] A storage medium (e.g. 300 in FIG. 3 or 404 in FIG. 4) can include any or some combination of the following: a semiconductor memory device such as a dynamic or static random access memory (a DRAM or SRAM), an erasable and programmable read-only memory (EPROM), an electrically erasable and programmable read-only memory (EEPROM) and flash memory or other type of nonvolatile memory device; a magnetic disk such as a fixed, floppy and removable disk; another magnetic medium including tape; an optical medium such as a compact disk (CD) or a digital video disk (DVD); or another type of storage device. Note that the instructions discussed above can be provided on one computer-readable or machine-readable storage medium, or alternatively, can be provided on multiple computer-readable or machine-readable storage media distributed in a large system having possibly plural nodes. Such computer-readable or machine-readable storage medium or media is (are) considered to be part of an article (or article of manufacture). An article or article of manufacture can refer to any manufactured single component or multiple components. The storage medium or media can be located either in the machine running the machine-readable instructions, or located at a remote site from which machine-readable instructions can be downloaded over a network for execution.

[0078] In the foregoing description, numerous details are set forth to provide an understanding of the subject disclosed herein. However, implementations may be practiced without some of these details. Other implementations may include modifications and variations from the details discussed above. It is intended that the appended claims cover such modifications and variations.