A developer of an online service may design a data center with the objective of meeting certain performance goals, such as average quality of response, throughput, and energy efficiency. To this end, the developer will attempt to select an appropriate type of server for use in the data center, and a desired number of these servers. But this selection task presents complex challenges. Other environments (besides online services implemented by data centers) face similar challenges.
A scheduling module is described herein which assigns jobs to heterogeneous processing modules provided by a processing system. The scheduling module performs this task based on the service demands associated with the jobs, e.g., by attempting to allocate resource-intensive jobs to high-performing processing modules, and less resource-intensive jobs to lower-performing processing modules. But, in one implementation, the scheduling module performs this task without necessarily having advance knowledge of the resource demands associated with the jobs.
According to one illustrative aspect, the scheduling module enables the processing system to achieve one or more of: a specified throughput objective; a specified quality objective; and a specified energy utilization objective. In one case, a quality measure can reflect a level of completeness of responses provided by the processing modules.
According to another illustrative aspect, the scheduling module includes logic configured to assign a new job to a processing module having a highest performance level that is currently available. In another implementation, the scheduling module first assigns the new job to a lower-performing processing module; if the job cannot finish by a prescribed time period on the lower-performing processing module, the scheduling module can transfer it to a higher-performing processing module.
According to another illustrative aspect, the scheduling module is further configured to determine that a previously-assigned job has ended on a newly-vacated processing module having a vacated-module performance level. The schedule module then reassigns a most-urgent in-progress job to the newly-vacated processing module, providing that the in-progress job is executing on a processing module having a lower performance level compared to the vacated-module performance level.
In one implementation, the heterogeneous processing modules correspond to computing units (e.g., processing cores) having different physical characteristics and/or different operating conditions.
In another implementation, the heterogeneous processing modules correspond to threads that run on computing units. Each thread which runs on a computing unit offers a level of performance that depends on a number of other threads that are simultaneously being executed by the same computing unit. That is, a thread that runs on a computing unit that is simultaneously executing M threads has a higher performance level than a thread that runs on a computing unit that is simultaneously executing N threads, providing that M<N.
The above approach can be manifested in various types of systems, components, methods, computer readable storage media, data structures, articles of manufacture, and so on.
This Summary is provided to introduce a selection of concepts in a simplified form; these concepts are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
The same numbers are used throughout the disclosure and figures to reference like components and features. Series 100 numbers refer to features originally found in
This disclosure is organized as follows. Section A provides an overview of an illustrative processing system that assigns jobs to heterogeneous processing modules. Section B describes various implementations of the processing system of Section A, such as an implementation in which the processing modules correspond to threads that execute on computing units. Section C describes illustrative computing functionality that can be used to implement any aspect of the features described in Sections A and B.
As a preliminary matter, some of the figures describe concepts in the context of one or more structural components, variously referred to as functionality, modules, features, elements, etc. The various components shown in the figures can be implemented in any manner by any physical and tangible mechanisms, for instance, by software, hardware (e.g., chip-implemented logic functionality), firmware, etc., and/or any combination thereof In one case, the illustrated separation of various components in the figures into distinct units may reflect the use of corresponding distinct physical and tangible components in an actual implementation. Alternatively, or in addition, any single component illustrated in the figures may be implemented by plural actual physical components. Alternatively, or in addition, the depiction of any two or more separate components in the figures may reflect different functions performed by a single actual physical component.
Other figures describe the concepts in flowchart form. In this form, certain operations are described as constituting distinct blocks performed in a certain order. Such implementations are illustrative and non-limiting. Certain blocks described herein can be grouped together and performed in a single operation, certain blocks can be broken apart into plural component blocks, and certain blocks can be performed in an order that differs from that which is illustrated herein (including a parallel manner of performing the blocks). The blocks shown in the flowcharts can be implemented in any manner by any physical and tangible mechanisms, for instance, by software, hardware (e.g., chip-implemented logic functionality), firmware, etc., and/or any combination thereof.
As to terminology, the phrase “configured to” encompasses any way that any kind of physical and tangible functionality can be constructed to perform an identified operation. The functionality can be configured to perform an operation using, for instance, software, hardware (e.g., chip-implemented logic functionality), firmware, etc., and/or any combination thereof.
The term “logic” encompasses any physical and tangible functionality for performing a task. For instance, each operation illustrated in the flowcharts corresponds to a logic component for performing that operation. An operation can be performed using, for instance, software, hardware (e.g., chip-implemented logic functionality), firmware, etc., and/or any combination thereof When implemented by a computing system, a logic component represents an electrical component that is a physical part of the computing system, however implemented.
The phrase “means for” in the claims, if used, is intended to invoke the provisions of 35 U.S.C. § 112, sixth paragraph. No other language, other than this specific phrase, is intended to invoke the provisions of that portion of the statute.
The following explanation may identify one or more features as “optional.” This type of statement is not to be interpreted as an exhaustive indication of features that may be considered optional; that is, other features can be considered as optional, although not expressly identified in the text. Finally, the terms “exemplary” or “illustrative” refer to one implementation among potentially many implementations
Each processing module in the collection of processing modules 104 includes logic for performing processing operations. Section B describes different physical implementations of the processing modules 104. As explained there, the processing system 102 can implement the processing modules 104 as processing cores of one or more CPUs. Alternatively, the processing system 102 can implement the processing modules 104 as threads which run on the processing cores. Still other implementations are possible.
The processing modules 104 are heterogeneous because they offer different levels of performance. For example, at least two of the processing modules 104 may operate at different speeds. A processing module that runs at a relatively fast rate can execute more operations compared to a processing module that runs at a slower rate. However, a processing module that runs at the faster rate may also consume more energy than its lower-performing counterpart.
In the example of
The processing system 102 may also include job scheduling functionality 114 that assign jobs to individual respective processing modules in the collection of processing modules 104. The job scheduling functionality 114 can be implemented as a hardware logic component, a software component, or some combination thereof For example, the processing system 102 can implement the scheduling functionality 114 as an application-level or operating system level program module, or some other type of program module. In another implementation, a component which is external to the processing system 102 can implement the job scheduling functionality 114, in whole or in part. In one implementation, the job scheduling functionality 114 can be subject to interrupts generated by any logic component associated with the processing system 102, such as an operating system.
In one implementation, the job scheduling functionality 114 can include a job receiving module 116, a scheduling module 118, a job queue 120, and a result output module 122. In operation, the job receiving module 116 receives jobs from any job source(s) 124. For example, the job receiving module 116 may represent interface functionality provided by a data center which implements one or more online services. In this environment, the job source(s) may correspond to end users. The users operate user devices to submit job requests to the job receiving module 116. Next, the scheduling module 118 assigns the jobs to the processing modules 104 based on the rules described below. The processing modules 104 then perform their work on the jobs to provide output results. The result output module 122 forwards the output results to one or more recipients 126. For example, the recipients 126 may correspond to the users who submitted the requests.
To be more concrete, consider a first non-limiting scenario in which the processing system 102 is part of the functionality used by an online search engine. In that environment, the job receiving module 116 can receive a query from a user. That query represents a job request associated with a new job. The search engine can then use a plurality of search modules to process the query. More specifically, each search module operates by comparing the query against a portion of an inverted index to identify documents (if any) which match the query. An aggregator module compiles partial results received from the search modules to form a final result. The result output module 122 then sends final result to the user, e.g., as a list of documents that match the query.
In this context, the processing system 102 may represent one server among many servers employed by the search engine. The processing modules 104 on the processing system 102 correspond to a subset of the search modules employed by the search engine. In this case, the scheduling module 118 assigns queries to the search modules.
Consider a second non-limiting scenario in which the processing system 102 is part of the functionality used by an online financial analysis service. In that environment, the job receiving module 116 can receive a request from a user to perform a financial calculation. The financial modeling engine can use a plurality of analysis modules to perform the calculation. More specifically, in one merely illustrative case, each analysis module performs a sampling operation, e.g., using Monte Carlo simulation or some other statistical estimation technique, to generate an output result. The result output module 122 returns the output result to the user.
In this context, the processing system 102 may again represent one server among many servers employed by the financial analysis service. The processing modules 104 on the processing system 102 correspond to a subset of the analysis modules used by the financial analysis service. In this case, the scheduling module 118 assigns requests to the analysis modules.
The scenarios described above are cited by way of illustration, not limitation. Still other applications are possible.
In many cases, a job may be said to have a starting time, a deadline, and a service demand. The starting time refers to the time at which the scheduling module 118 receives the job. The deadline may correspond to the time at which the user demands a response to the job. In some cases, the deadline is explicit, and is communicated in the job request. In other cases, the deadline is implicit. For example, a search engine may endeavor to deliver a response within a specified time, e.g., a fraction of a second in one case, or one or more seconds in another case. But that deadline is not explicitly expressed in each query. The service demand refers to the amount of processing resources that will be required to perform the job in the specified period of time.
In some cases, a job request will explicitly convey the service demand associated with a job, or the processing system 102 can otherwise determine the service demand associated with the job. For example, in the search context, it may be possible, in some circumstances, to estimate the processing demand of a particular query if that same query has been processed on one or more prior occasions, and/or based on other factors. Further, the processing system 102 can generate statistics, based on historical information, pertaining to the expected distribution of processing loads associated with queries. In the search context, for instance, the processing system 102 can determine that most jobs are typically “short” in duration.
In other cases, however, the amount of resources that will be required to perform the job will be unknown or at least uncertain. In this scenario, the processing system 102 only discovers the requirements of the job in the course of processing the job. In general, this means that the scheduling module 118 is tasked with the responsibility of allocating jobs to processing modules 104 without sometimes knowing the demands which each job will impose during its execution. If the processing demand is known or capable of being estimated, this information can contribute to the level of urgency that is assigned to the job; but, as a default principle, the demand is considered to be unknown.
In some cases, the processing modules 104 can deliver a response that has high quality. Consider the search context. Each processing module may have sufficient time to match a query against its entire inverted index portion. As a whole, the processing modules 104 can therefore return a result which identifies all the documents which can possibly match the query. In other cases, the processing modules 104 may deliver a response that has less-than-optimal quality. For example, a processing module may have time to match the query against only a part of its inverted index, not the entire index. As a result, the processing modules 104, as a whole, may return a result which is not a complete reflection of the all the documents which can possibly match the query. The result in this case may be satisfactory because the processing modules can be configured to identify documents in the order of most relevant to least relevant. Thus, even if the search is truncated before fully completing, the less-than-optimal results may identify the most relevant documents.
But the results are nonetheless not optimal. In another example, a financial analysis service may use processing modules that perform any type of iterative calculations to arrive at a result. The accuracy of that result increases with the amount of time that the processing modules are given to perform their calculations.
Overall, the processing system 102 may attempt to achieve one or more performance objectives, given one or more specified constraints. In one case, the scheduling module 118 attempts to provide the highest quality results possible (e.g., on average), subject to one or more constraints (e.g., an energy utilization budget, etc.). Different environments can assess quality in different ways. In the search context described above, the quality of a response reflects the time-dependent completeness of the response. In the financial analysis context, the quality of a response reflects the time-dependent accuracy of the response. In other cases, the scheduling module 118 can primarily attempt to increase throughput, subject to one or more constraints. Throughput refers to an amount of jobs that can be processed by the processing system 102 in a prescribed amount of time. In other cases, the job scheduling functionality 114 can primarily attempt to lower energy utilization, subject to one or more other constraints. Energy efficiency refers to the amount of energy consumed by the processing system 102 in performing its operations. In other cases, the scheduling functionality 114 can primarily attempt to reduce the number of processing modules that are used by a data center, subject to various constraints, and so on. These performance goals are not mutually exclusive. That is, in many cases, a designer will have achieved two or more of the performance goals in a principal attempt to achieve one of the goals.
Starting with
At time t4, assume that the scheduling module 118 receives a fourth job J4. All of the processing modules (A, B, and C) are currently processing jobs, so none of them are available to accept a new job. In view of this, the scheduling module 118 adds the new job J4 to the job queue 120.
At time t5, assume that the job J1 that is running on the processing module C ends, e.g., either because its work is done, or because its allotted processing time has expired, or because it has been suspended, or because it terminates for any other reason. At time t6, the scheduling module 118 responds to this event by transferring the most-urgent in-progress job from a “smaller” processing module to the processing module C. In one case, the urgency of a job corresponds, in part, to its age, measured from the time it was received by the scheduling module 118. Thus, the scheduling module 118 will transfer the job J2 to the processing module C, since the job J2 is the oldest in-progress job.
The migration of job J2 to the processing module C leaves the processing module B idle. In view thereof, at time t7, the scheduling module 118 applies the same rule described above, e.g., by transferring the most-urgent in-progress job from a smaller processing module to the processing module B. This rule prompts the scheduling module 118 to move the job J3 to the processing module B.
The migration of job J3 to the processing module B leaves the processing module A idle. There are no more in-progress jobs on smaller processing modules to move to larger processing modules because processing module A is the smallest processing module. But there is a job J4 in the job queue 120. Therefore, at time t8, the scheduling module 118 moves the job J4 to the processing module A.
In general, note that the scheduling module 118 acts to move jobs from smaller processing modules to larger processing modules. In one implementation, the scheduling module 118 will not move jobs between processing modules of the same size. Nor will it move jobs from higher-performing processing modules to lower-performing processing modules. The movement of jobs from lower to higher-performing processing modules increases the likelihood that a resource-intensive job will complete by its deadline, or that this job can at least generate a higher quality result (if it cannot complete by its deadline). This is because the higher-performing processing module can devote more resources to the migrated job, compared to the lower-performing processing module. An “old” job is treated as a likely resource-intensive job because it has already consumed a significant amount of processing resources, and it is expected to consume even more resources. In other words, the scheduling module 118 estimates the service demand of a job by observing how much resources it consumes during its execution; if the job fails to complete quickly, the job is classified as a resource-intensive job.
In block 310, the scheduling module 118 determines whether a job that is running on one of the processing modules has terminated for any reason described above. This termination leaves a newly-vacated processing module. In block 312, the scheduling module 118 determines whether there is an in-progress job on a lower-performing processing module (e.g., a smaller processing module). If so, in block 314, the scheduling module 118 moves the in-progress job to the newly-vacated module.
In block 316, after the above-described migration of in-progress jobs, the scheduling module 118 determines whether there are any jobs in the job queue 120. If so, in block 318, the scheduling module 118 moves the most-urgent (e.g., the oldest) job from the job queue 120 into the freed-up processing module.
In contrast, the curve 402 indicates that the heterogeneous processing system 102 avoids the steep drop-off in quality levels exhibited by curve 404. At the same time, the heterogeneous processing system 102 maintains considerably higher quality levels compared to the curve 406. In other words, the heterogeneous processing system 102 combines the merits of the high-performance and lower-performance homogeneous processing systems. The improvement in quality may also be accompanied by improvement in throughput and energy efficiency, relative to the high-performance homogeneous processing system and the lower-performance homogeneous processing system.
More specifically, at time t1, both the processing modules A and B are idle. The scheduling module 118 moves a new job J1 to the processing module A because that module is smaller (lower-performing) compared to the processing module B. Time t2 represents a predetermined interval following time t1. At time t2, the scheduling module 118 moves the job J1 to the processing module B because it has failed to complete while on processing module B. Time t3 reflects the outcome of the movement at time t2.
The policy illustrated in
The logic shown in
In view of the alternative protocol of
In block 702, the scheduling module 118 determines whether an interrupt has been received. If so, the scheduling module 118 determines whether the affected job is currently being executed by a processing module. If this is true, then, in block 704, the scheduling module 118 can stop the job, mark it to indicate that it is “not ready” for processing, and place the job in the job queue 120. Alternatively, the scheduling module 118 can place the marked job in another queue (not shown) that is dedicated to suspended jobs. Suppose, alternatively, that the interrupt pertains to a job that is already in the job queue 120. The scheduling module 118 can therefore mark this job to indicate that it is not ready for processing. Accordingly, at any given time, the job queue 120 can contain a mix of jobs, some of which are “ready” for scheduling, and others which are “not ready” for scheduling (that is, assuming that a single queue is used to handle all job requests). The scheduling module 118 will not schedule any job that is marked as “not ready.”
In block 706, the scheduling module 118 determines whether a notification has been received that indicates that the interrupt has been serviced. This means that the processing of the affected job can resume. In block 708, the scheduling module 118 determines whether the deadline of the affected job has expired. If this is true, then, in block 710, the scheduling module 710 terminates the job. In another implementation, the scheduling module 118 can also terminate the job if the amount of time that is left to perform the job is below a prescribed threshold. The processing system 102 can optionally send the results of whatever processing it has performed on the terminated job, prior to the interrupt, to the recipient 126.
If the job has not expired, then, in block 712, the scheduling module 118 schedules the jobs on a processing module in accordance with its level of urgency. The level of urgency may reflect the time at which the job was originally received, and/or any other appropriate urgency-related factor(s).
The scheduling module 118 can use different approaches to carry out block 712. In a first approach, the scheduling module 118 can assign the resumed job to the highest-performing processing module that is currently available, with or without the preliminary processing described in
In a second approach, the scheduling module 118 can rank the urgency levels of the jobs that are currently running on the processing modules, together with the urgency level of the resumed job. The scheduling module 118 can then migrate jobs to processing modules that are suited to the respective urgency levels of the jobs. This operation will effectively create a vacancy having an appropriate performance capacity to receive the resumed job. For example, assume that the resumed job is the most urgent of all jobs. The scheduling module 118 can migrate one or more existing jobs to leave a vacancy on the highest-performing processing module that is currently available. The scheduling module 118 can then assign the resumed job to that processing module. Incidentally, the scheduling module 118 can also perform this kind of proactive processing in any circumstance in which it receives a new job that is marked as having a higher level of urgency than one or more existing jobs that are being run on the processing modules (where urgency can be assessed based on any factor or combination of factors, not just based on the time that the job was received).
The above two approaches to scheduling assume that there is at least one available processing module to receive the resumed job. If there are no vacancies, the scheduling module 118 can assign the resumed job to the job queue 120. Alternatively, the scheduling module 118 can optionally suspend a lowest-performing job, and then place that suspended job back on the job queue 120. The scheduling module 118 can then place the resumed job on a vacant processing module, with or without first migrating jobs on the processing modules to free up a processing module having an appropriate performance capacity.
Still other implementations are possible to handle interrupts. Further, the scheduling module 118 can also handle some interrupts by just suspending the affected jobs, and without removing these jobs from their respective processing modules. When the interrupts are serviced, the jobs resume on their respective processing modules.
As a final topic in this section, note that
Different rules can be used to govern an inter-system job assignment. In one case, the scheduling module 118 can determine whether its local processing system has insufficient capacity to satisfactorily process the jobs it has received (and/or the job it expects to receive) within desired performance goals. For example, the scheduling module 118 can reach this conclusion when its job queue 120 accumulates a prescribed number of jobs. In this circumstance, the scheduling module 118 can determine whether one or more other processing modules have spare capacity to accept new jobs. If spare capacity exists, the scheduling module 118 can then transfer a portion of yet-to-be assigned jobs and/or in-progress jobs to the processing modules of one or more other processing systems. The scheduling module 118 may likewise accept jobs forwarded by other processing systems (where each other processing system may perform the same decision process described above).
For the above reason, the collection of heterogeneous processing modules 104 shown in
In yet another implementation, a data center can employ a central scheduling module (not shown) which assigns jobs to the processing modules provided by all of the processing systems in the data center. In this context, the data center itself may be considered as one large processing system having an aggregate collection of heterogeneous processing modules; each individual processing system contributes processing modules to the master collection of processing modules. The central scheduling module can be used instead of the individual scheduling modules provided by individual processing systems, or it can supplement the functions of the individual scheduling modules. For example, the central scheduling module can transfer jobs from one processing system to another, but each individual scheduling module can otherwise perform the scheduling logic described in
Section A described the processing modules principally in the context of their performance. That is, that section described a large processing module as logic that performs computational tasks at a relatively high performance level, such as a high processing speed. Likewise, Section A described a small processing module as logic that performs computational tasks at a lower performance level. This section describes different ways that the processing system 102 may physically implement the collection of heterogeneous processing modules 104.
In one case, the processing modules 104 correspond to computing units of any type that have different physical characteristics. For example, the processing modules 104 may correspond to processing cores of a server that have different physical characteristics or are run under different physical conditions. For example, two computing units may physically differ because they incorporate different hardware components. Alternatively, or in addition, two computing units may physically differ because they incorporate different processing architectures. Alternatively, or in addition, two computing units may differ because they incorporate different software components. Alternatively, or in addition, two computing units may physically differ because they are run at different speeds, or power budgets, etc. Alternatively, or in addition, two computing units may differ because they have access to different sets of supporting resources, and so on. No limitation is placed on the manner in which two computing units can be designed and/or operated to offer different levels of performance.
In another case, a processing module may correspond to a thread that is implemented by a computing unit, such as a hardware thread which is implemented by a processing core that is capable of performing simultaneous multi-threading (SMT), also known as hyperthreading. In one case, for example, each computing unit can perform two-way SMT by incorporating two hardware threads. In another case, each computing unit can perform four-way SMT by incorporating four hardware threads, and so on. Or the collection of processing modules 104 can include computing units that support different numbers of hardware threads.
In this implementation, each thread which runs on a computing unit offers a level of performance that depends on a number of other threads that are simultaneously being executed by the same computing unit. That is, a thread that runs on a computing unit that is simultaneously executing M threads has a higher performance level than a thread that runs on a computing unit that is simultaneously executing N threads, providing that M<N. This relationship is due to the fact that, in some platforms, the complexity of processing is reduced with a decrease in the number of executing threads. Further, the competition for a shared set of resources goes down with a decrease in the number of executing threads.
At time t1, the scheduling module 118 attempts to assign a new job J1 to the highest-performing processing module (e.g., the highest-performing thread in this case). The scheduling module 118 performs this task by assigning the job J1 to an idle computing unit, if one is available. An idle computing unit is a computing unit that is not running any jobs on its threads. Here, at time t1, the scheduling module 118 assigns the job J1 to thread A1 of computing unit CU1, because that computing unit is idle. If both computing units are idle, the scheduling module 118 can select one of them based on any selection criterion, such as by randomly selecting a computing unit.
At time t2, assume that the scheduling module 118 receives a second job J2. The scheduling module 118 will apply the same rule described above, which results in assigning job J2 to thread B1 of the computing unit CU2. This is because the computing unit CU2 is idle, and thus each of its threads represents a highest-performing processing module.
At time t3, next assume that the scheduling module 118 receives a third job J3. The scheduling module 118 will attempt to apply the same rule described above. But there are no more empty computing units at this time. Therefore, the scheduling module 118 will identify the highest performing thread that is running on a computing unit, where that computing unit is simultaneously executing at least one other thread. If there are two or more computing units that offer a thread that meets this criterion, then the scheduling module 118 will choose the computing unit that is handling the least-urgent in-progress job (e.g., the youngest job). In the particular context of
Next assume that, at time t4, the job J1 terminates on thread Al for any reason stated above. The scheduling module 118 handles this event by identifying the most urgent job being handled by a lower-performing thread (compared to the thread A1 that is newly-vacated). In the case of
At time t5, the scheduling module 118 transfers the job J3 from thread B2 to the idle thread A1 of CU1. As a result, both jobs J2 and J3 now run on computing units that execute a single thread. The transfer of job J3 to CU1 therefore causes both jobs J2 and J3 to run faster. The scheduling module 118 could have achieved the same effect by transferring the most-urgent job J2 to CU1, instead of the job J3. But transferring the job J3 leaves the most-urgent job J2 undisturbed, which may allow it to complete slightly faster (e.g., by not incurring a processing delay associated with the transfer).
If block 904 is answered in the negative, then, in block 908, the scheduling module determines whether there is a thread available in a computing unit, where that computing unit is currently executing at least one other job in one of its threads. If this is true, then, in block 910, the scheduling module 118 allocates the new job to a highest-performing thread. A computing unit having the highest-performing thread is a computing unit that is executing the least number of threads.
Assume that there are two or more qualifying computing units that host highest performing threads. For example, in two-way SMT, assume that two computing units are each running one other thread. Or in four-way SMT, assume that two computing units are each running two other threads, etc. In this case, the scheduling module 118 can select one of the computing units using the following illustrative and non-limiting logic: (a) first, the scheduling 118 identifies the most-urgent job currently being handled by each of the qualifying computing units, to provide a set of most-urgent jobs; (b) second, the scheduling module 118 identifies a least-urgent job within the set of most-urgent jobs, providing a “least-urgent-among-most-urgent” job, e.g., a “youngest-oldest” job; (c) third, the scheduling module 118 identifies the computing unit associated with the youngest-oldest job, to provide an identified computing unit; and (d) fourth, the scheduling module 118 assigns the new job to an idle thread of the identified computing unit. Block 910 summarizes this procedure by stating that the scheduling module 118 selects the computing unit that is handling the “youngest-oldest” job. In the two-way SMT example of
In block 914, the scheduling module 118 determines whether a job being executed on a thread has ended for any reason. If so, in block 916, the scheduling module 118 determines whether there is an in-progress job that is being performed on a lower-performing thread (compared to the performance level of the newly-vacated thread). If this is true, then, at block 918, the scheduling module 118 identifies the most-urgent job that is being performed by a lower-performing thread. That most-urgent job will have one or more companion jobs running on the same computing unit. In one approach, the scheduling module 118 identifies the least-urgent of those companion jobs and moves it to the newly-vacated thread. However, in other implementations, the scheduling module 118 can apply other rules to determine which job to transfer to the newly-vacated thread. Any job can be transferred such that the transfer operation results in the desired goal of improving the processing speed at which the most-urgent job is performed.
In block 920, after performing the job migration described above, the scheduling module 118 determines whether there are pending jobs in the job queue 120. If so, in block 922, the scheduling module 118 moves the most-urgent job (e.g., oldest job) in the job queue 120 to the freed-up thread.
The scheduling module 118 can also incorporate the logic of
The scheduling module 118 can perform the procedure 900 of
In a second case, the scheduling module 118 can define a quota that limits the number the jobs that can be processed by the computing units at any given time. For example, assume that the processing system 102 includes six processing cores that each includes two hardware threads. This processing system can accommodate a total of 12 jobs at any one time. But the scheduling module 118 may set the maximum job quota at, for example, 8 jobs. The advantage of this implementation is that the scheduling module 118 will thereby reserve a certain number of computing units which offer higher-performing threads at any given time (which is not true for the first-stated implementation). This, in turn, will ensure that at least some of the resource-intensive jobs can be migrated up to higher-performing threads if need be.
But the scheduling module 118 otherwise places no limitations on which computing unit, at any given time, will offer the higher-performing threads.
In a third case, the scheduling module 118 can designate a maximum number of threads that each computing unit is permitted to use when processing jobs. For example, in the six-core two-way SMT example stated above, the scheduling module 118 can designate four cores as offering two hardware threads, and the remaining two cores as offering one hardware thread (even though these cores can execute two threads). This achieves the same end result as stated above, because the cores can accommodate a maximum of 8 jobs. But, in the third case, the scheduling module 118 can no longer dynamically choose which computing unit operates using two threads. But even in this case, each computing unit that runs two threads can be considered as offering dynamic performance because it can run using one or two threads, offering slower and faster performance levels, respectively.
More generally, all three implementations described above may offer certain advantages over a fixed collection of heterogeneous processing modules. For example, in all cases, the SMT-enabled computing units are reconfigurable to some extent (e.g., by executing different numbers of threads). This enables the scheduling module 118 to dynamically adapt to changes in the nature of job requests that are received over time, and changes in the volume of such requests. This may have certain performance advantages in certain circumstances over a fixed heterogeneous configuration, e.g., as measured in terms of average quality, throughput, and/or energy efficiency; these advantages may be more pronounced when the traffic that is received is highly variable.
Further, the scheduling module 118 can also dynamically alter its configuration settings depending on the nature and volume of job traffic that is received. It can do this by modifying the number of active jobs that are permitted to be processed at any given time, and/or changing the settings which determine how many threads each individual computing unit is allowed to execute. For example, assume that the scheduling module 118 observes that it is receiving a large quantity of quickly-executable job requests. In this case, the scheduling module 118 may wish to increase the job quota, e.g., from a maximum of 8 jobs to a maximum of 10 jobs in the above example. If the flow of computation-intensive jobs increases, however, the scheduling module 118 may wish to throttle back on the number of jobs that are permitted, e.g., from a maximum of 10 jobs to 6 jobs.
The data center 1002 can also include interconnection infrastructure 1010 which connects the processing systems (1004, 1006, 1008) together. That interconnection infrastructure 1010 can include a hierarchical network of switches, for example.
Although not shown, the data center 1002 may also include an optional central scheduling module. As explained in Section A, the central scheduling module can replace or supplement the individual scheduling module 118 provided in each processing system.
A user may access the data center 1002 using any type of computer device, such as a personal computer, a smart phone, etc.
In other cases, a user may interact with one or more local processing systems which implement the principles set forth above. For example, a local computer device may perform any application that utilizes a set of heterogeneous processing modules provided by the local computer device. Still other environments can use the kind of heterogeneous processing system 102 described above.
The computing functionality 1100 can include volatile and non-volatile memory, such as RAM 1102 and ROM 1104, as well as one or more processing devices 1106 (e.g., one or more CPUs, and/or one or more GPUs, etc.). The processing device 1106 may implement two or more computing units, such as two or more processing cores. Each core, in turn, may implement one or more hardware threads and/or one or more software threads using the SMT technique. The computing functionality 1100 also optionally includes various media devices 1108, such as a hard disk module, an optical disk module, and so forth. The computing functionality 1100 can perform various operations identified above when the processing device(s) 1106 execute instructions that are maintained by any memory (e.g., RAM 1102, ROM 1104, or elsewhere).
More generally, instructions and other information can be stored on any computer readable medium 1110, including, but not limited to, static memory storage devices, magnetic storage devices, optical storage devices, and so on. The term computer readable medium also encompasses plural storage devices. In many cases, the computer readable medium 1110 represents some form of physical and tangible entity. The term computer readable medium also encompasses propagated signals, e.g., transmitted or received via physical conduit and/or air or other wireless medium, etc. However, the specific terms “computer readable storage medium” and “computer readable medium device” expressly exclude propagated signals per se, while including all other forms of computer readable media.
The computing functionality 1100 also includes an input/output module 1112 for receiving various inputs (via input devices 1114), and for providing various outputs (via output devices 1116). Illustrative input devices include a keyboard device, a mouse input device, a touchscreen input device, a gesture input device, a voice recognition mechanism, and so on. Illustrative output devices include a display device, a printer, a voice output device, and so on. The computing functionality 1100 can also include one or more interfaces 1118 for exchanging data with other entities inside a data center and/or external to the data center, e.g., via one or more communication conduits 1120. One or more communication buses and/or component interconnection networks 1122 communicatively couple the above-described components together.
The communication conduit(s) 1120 can be implemented in any manner, e.g., by a local area network, a wide area network (e.g., the Internet), etc., a direct component interconnection network, an indirect component interconnection network, and so on. The communication conduit(s) 1120 can include any combination of hardwired links, wireless links, routers, gateway functionality, name servers, etc., governed by any protocol or combination of protocols.
Alternatively, or in addition, any of the functions described in the preceding sections can be performed, at least in part, by one or more hardware logic components. For example, without limitation, the computing functionality can be implemented using one or more of: Field-programmable Gate Arrays (FPGAs); Application-specific Integrated Circuits (ASICs); Application-specific Standard Products (ASSPs); System-on-a-chip systems (SOCs); Complex Programmable Logic Devices (CPLDs), etc.
In closing, the description may have described various concepts in the context of illustrative challenges or problems. This manner of explanation does not constitute an admission that others have appreciated and/or articulated the challenges or problems in the manner specified herein. Further, the claimed subject matter is not limited to implementations that solve any or all of the noted challenges/problems.
Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.
Number | Date | Country | |
---|---|---|---|
Parent | 15092397 | Apr 2016 | US |
Child | 16355217 | US | |
Parent | 13724826 | Dec 2012 | US |
Child | 15092397 | US |