USPatent applicationPatented

Event-based dynamic resource provisioning

Granted 10 Mar 2015 · 3 office actions

Current assignee: DARPA · originally International Business Machines

Law firm: Law firm · Log in to unlock

Attorney: Attorney · Log in to unlock

Inventors: Ravi Kumar Arimilli, Piyush Chaudhary · Examiner: Minh-Chau Nguyen · AU 2459 · TC 2400

Life of the application

14 dated events
⤢ drag to zoom20102012201420162018202020222024202620282030ProsecutionOwnershipTerm & fees
ProsecutionOwnershipTerm & feeshover for detail · click to open

Abstract

Disclosed are a method, a system and a computer program product for automatically allocating and de-allocating resources for jobs executed or processed by one or more supercomputer systems. In one or more embodiments, a supercomputing system can process multiple jobs with respective supercomputing resources. A global resource manager can automatically allocate additional resources to a first job and de-allocate resources from a second job. In one or more embodiments, the global resource manager can provide the de-allocated resources to the first job as additional supercomputing resources. In one or more embodiments, the first job can use the additional supercomputing resources to perform data analysis at a higher resolution, and the additional resources can compensate for an amount of time the higher resolution analysis would take using originally allocated supercomputing resources.

Description

9 parts
›This invention was made with United State Government…

This invention was made with United State Government support under Agreement No. HR0011-07-9-002, awarded by DARPA. THE GOVERNMENT HAS CERTAIN RIGHTS IN THE INVENTION.

›BACKGROUND

1. Technical Field

The present invention generally relates to supercomputing systems. More specifically, the present invention relates to automatically allocating resources in supercomputing systems.

2. Description of the Related Art

The term high performance computing (HPC) or supercomputing has typically been used to refer to a parallel computing system that includes multiple processors linked together with commercially available interconnects. Usually, computing systems that operate at or above the teraflops (10 9 floating point operations/second) region are considered HPC systems. HPC systems increasingly dominate the world of supercomputing due to their flexibility, power, and relatively low cost per operation. HPC has commonly been associated scientific research and engineering applications. Recently, HPC has been applied to business uses of cluster-based supercomputers, e.g., data warehouses, line-of-business applications, and transaction processing. A computer cluster is a group of loosely coupled computers that closely work together. The components of a computer cluster are frequently connected to each other through fast local area networks (LANs). Computer clusters are usually deployed to improve performance and/or availability over that provided by a single computer, while typically being much more cost-effective than single computers of comparable speed and/or availability.

A number of commercially available software applications are known that perform job scheduling for computer systems. For example, Portable Batch System™ is a software application that performs job scheduling. A primary task of Portable Batch System™ is to allocate batch jobs among available computing resources. Portable Batch System™ is supported as a job scheduler mechanism by several meta schedulers, which are designed to optimize computational workloads by combining multiple distributed resource managers into a single aggregated manager, allowing batch jobs to be directed to a best location for execution. As another example, LoadLeveler™ is a software application that performs job scheduling for batch jobs, while attempting to match job requirements with a best available computer resource for execution. As yet another example, Load Sharing Facility™ is another software application that performs job scheduling.

Typically, there can be a data resolution or fidelity component or attribute associated with processing a data set processed by supercomputing resources. For example, the data set can include a finer resolution than what is being processed by the supercomputing resources. Based on the resolution chosen, the processing load of the data set can be distributed among the supercomputing resources. For instance, the processing load of the data set can be distributed among the supercomputing resources using one or more tools described above. However, existing methods and/or systems do not provide for instances where the supercomputing resources can automatically determine and respond to an event where one or more portions of the data set should be processes with greater fidelity or resolution. Typically, human interaction and/or intervention is used to change the resolution of portions of the data set and re-distribute the workload.

›SUMMARY

Disclosed are a method, a system and a computer program product for automatically allocating and de-allocating resources for jobs executed or processed by one or more supercomputer systems. In one or more embodiments, a supercomputing system can process a first supercomputing job with a first amount of resources of the supercomputing system. For example, the first supercomputing job can process data with a first resolution or fidelity. The first supercomputing job can detect and/or determine at least one portion of the data that meets a state or an approximate state and transmit a message to a global resource manager that an event has been triggered. The global resource manager can determine that a first event occurred and can determine that a higher resolution in analyzing the data that triggered the event is to be utilized. In one or more embodiments, performing a higher resolution analysis of the data can increase an amount of time in processing all of the data. For example, the analysis of all the data may be bounded to occur within a first amount of time. The global resource manager may calculate or compute an amount of additional resources needed to complete the analysis of the data within the amount of time while taking into account the additional resolution of a portion of the data that triggered the event. In one or more embodiments, the global resource manager can determine a first amount of additional resources of the supercomputing system based on a first resolution, a second resolution, a size of the data set, and a target completion time for the first supercomputing job. The global resource manager can allocate the first amount of additional resources of the supercomputing system and distribute at least a portion of the data set to the first additional supercomputing resources. The supercomputing system can process the first supercomputing job with the first amount of resources of the supercomputing system and the first amount of additional resources of the supercomputing system. In one or more embodiments, the supercomputing system can process a second supercomputing job with a second amount of resources of the supercomputing system and de-allocate a portion of the second amount of resources of the supercomputing system of the second supercomputing job to provide the first supercomputing job additional resources.

›BRIEF DESCRIPTION OF THE DRAWINGS

The invention itself, as well as advantages thereof, will best be understood by reference to the following detailed description of one or more embodiments when read in conjunction with the accompanying drawings, wherein:

FIG. 1 provides a block diagram representation of a processor system, according to one or more embodiments;

FIGS. 2A-2D provide block diagram representations of a supercomputing system, according to one or more embodiments;

FIGS. 2E-2F provide block diagram representations of supercomputing systems coupled to a network, according to one or more embodiments;

FIG. 3 illustrates a method for allocating resources for multiple jobs executed on a supercomputing system, according to one or more embodiments; and

FIG. 4 illustrates a method for de-allocating resources for multiple jobs executed on a supercomputing system, according to one or more embodiments.

›DETAILED DESCRIPTION · 1 of 5

Disclosed are a method, a system and a computer program product for automatically allocating and de-allocating resources for jobs executed or processed by one or more supercomputer systems. In one or more embodiments, a supercomputing system can process a first supercomputing job with a first amount of resources of the supercomputing system. For example, the first supercomputing job can process data with a first resolution or fidelity. The first supercomputing job can detect and/or determine at least one portion of the data that meets a state or an approximate state and transmit a message to a global resource manager that an event has been triggered. The global resource manager can determine that a first event occurred and can determine that a higher resolution in analyzing the data that triggered the event is to be utilized. In one or more embodiments, performing a higher resolution analysis of the data can increase an amount of time in processing all of the data. For example, the analysis of all the data may be bounded to occur within a first amount of time. The global resource manager may calculate or compute an amount of additional resources needed to complete the analysis of the data within the amount of time while taking into account the additional resolution of a portion of the data that triggered the event. In one or more embodiments, the global resource manager can determine a first amount of additional resources of the supercomputing system based on a first resolution, a second resolution, a size of the data set, and a target completion time for the first supercomputing job. The global resource manager can allocate the first amount of additional resources of the supercomputing system and distribute at least a portion of the data set to the first additional supercomputing resources. The supercomputing system can process the first supercomputing job with the first amount of resources of the supercomputing system and the first amount of additional resources of the supercomputing system. In one or more embodiments, the supercomputing system can process a second supercomputing job with a second amount of resources of the supercomputing system and de-allocate a portion of the second amount of resources of the supercomputing system of the second supercomputing job to provide the first supercomputing job additional resources.

Turning now to FIG. 1 , there is depicted a block diagram representation of a processor system, according to one or more embodiments. As is illustrated, a processor system 100 includes at least one chip-level multiprocessor (CMP) 105 (only one of which is illustrated in FIG. 1 ), each of which includes one or more processors 110 A- 110 H (e.g., cores). In one or more embodiments, CMP 105 can correspond to a node (or a portion of a node) of a supercomputing system or HPC cluster.

Processors 110 A- 110 H can, for example, operate in a multithreading (MT) mode or a single thread (ST) mode. When processors 110 A- 110 H operate in the MT mode, processors 110 A- 11011 can employ multiple separate instruction fetch address registers to store program counters for multiple threads. In one or more embodiments, each of processors 110 A- 110 H include a respective first level (L1) cache memory 112 A- 112 H that is coupled to a shared second level (L2) cache memory 115 , which is coupled to a shared third level (L3) cache memory 140 and a fabric controller 120 . In one or more embodiments, fabric controller 120 can support an interconnect fabric by which processor 105 can communicate with and share data with other processors.

As is illustrated, fabric controller 120 is coupled to a memory controller (e.g., included in a Northbridge) 125 , which is coupled to a memory subsystem 110 . For example, memory subsystem 110 can provide storage where data and/or processor instructions/code can be stored and/or retrieved. In one or more embodiments, memory subsystem 110 can include a random access memory and/or computer system memory such as DRAM, SRAM, EDO RAM, Rambus RAM, NVRAM, EPROM, EEPROM, flash memory, etc. Memory subsystem 110 can include other types of memory as well, or combinations thereof. Memory subsystem 110 includes an application appropriate amount of volatile and/or non-volatile memory. For example, memory subsystem 110 can include an amount of volatile and/or non-volatile memory to store utilities or applications 185 A- 185 C such that applications 185 A- 185 C can be executed by processor 105 .

In one or more embodiments, fabric controller 120 can be omitted and, in this case, the L2 cache 115 can be directly connected to memory controller 125 . Fabric controller 120 , when implemented, can facilitate communication between different CMPs and between processors 110 A- 110 H and memory subsystem 110 and can function as in interface in this manner.

It should be appreciated that the various techniques disclosed herein are equally applicable to systems that employ separate L2 caches for each of processors 110 A- 110 H, as well as systems that employ separate L2 and L3 caches for each of processors 110 A- 110 H. Each of the L1, L2, and L3 caches can be combined instruction and data caches or correspond to separate instruction and data caches. As is shown in FIG. 1 , memory controller 125 can also coupled to an I/O channel controller (e.g., included in a Southbridge) 135 .

In one or more embodiments, I/O channel controller 135 can provide connectivity and control for one or more input devices and/or one or more output devices. In one example, I/O channel controller 135 can be coupled to various non-volatile memory such as a magnetic media, e.g., a hard drive, floppy drive, etc., where data/instructions/code can be stored and/or from where data/instructions/code can be retrieved.

In one or more embodiments, software/program instructions/code/logic can be stored in memory 110 and executed by processor 105 to complete and/or implement various features described herein. In one or more embodiments, an operating system (OS) 170 and applications 185 A- 185 C can be stored in memory 110 and executed by processor 105 .

›DETAILED DESCRIPTION · 2 of 5

Turning now to FIG. 2A , a supercomputing system is illustrated, according to one or more embodiments. As shown, a supercomputing system 200 A can include compute nodes (comp nodes) 210 A 1 - 210 AN (for some non-zero natural number N) coupled to high performance computing (HPC) switches 225 A 1 - 225 AM (for some non-zero natural number M) coupled to input/output (I/O) nodes 220 A 1 - 220 AL (for some non-zero natural number L) coupled to Internet protocol (IP) switches 225 A 1 - 225 AK (for some non-zero natural number K). In one or more embodiments, each of compute nodes 210 A 1 - 210 AN can include elements, features, and/or functionality of processor system 100 .

As illustrated, IP switches 225 A 1 and 225 A 2 can be coupled to storage controllers (SCs) 230 A 1 and 230 A 2 via fiber channel connections, IP switches 225 A 3 and 225 A 4 can be coupled to a general purpose (GP) server 245 via gigabit Ethernet, and IP switches 225 A 5 and 225 A 6 can be coupled to a network (NET) 270 via gigabit Ethernet. In one or more embodiments, NET 270 can include and/or be coupled to one or more of a local area network (LAN), a wide area network (WAN), a public switched telephone network (PSTN), and an Internet. As shown, SCs 230 A 1 and 230 A 2 can be coupled to serial attached SCSI (SAS) switches 235 A 1 - 235 AJ (for some non-zero natural number J) which can be coupled to JBODs (just a bunch of disks) 240 A 1 - 240 AI (for some non-zero natural number I). GP server 245 can include services of archival storage 250 (e.g., tape storage), login 255 (e.g., user interface, remote user interface, etc.), code development 260 (e.g., compilers, development framework, debugger(s), profiler(s), simulator(s), etc.), and system administration 265 .

In supercomputing system 200 A, each of SCs 230 A 1 and 230 A 2 and I/O nodes 220 A 1 - 220 AL is a computer system. Each of I/O nodes 220 A 1 - 220 AL can include HPC host channel adapters (HCAs) to interface with two or more HPC switches 225 A 1 - 225 AM and can include fiber channel network adapters and/or gigabit Ethernet network adapters to interface with two or more of IP switches 225 A 1 - 225 AK. Each of SCs 230 A 1 and 230 A 2 can include fiber channel network adapters to interface with IP switches 225 A 1 and 225 A 2 and can include SAS controller adapters to interface with SAS switches 235 A 1 - 235 AJ. In one or more implementations of supercomputing system 200 A, there can be around one thousand five hundred (1500) compute nodes, one hundred twelve (112) I/O nodes, and thirty-two (32) storage controllers.

In one or more embodiments, a first job can be executed by a first set of compute nodes and a second job can be executed by a second set of compute nodes. For example, a first job 285 A can be executed on compute nodes 210 A 1 - 210 A 3 , and a second job 285 B can be executed on compute nodes 210 A 5 and 210 A 6 . For instance, job 285 A can execute application 185 A and can use data 290 A stored in JBOD 240 A 4 , and job 285 B can execute application 185 B and can use data 290 B stored in JBOD 240 A 3 . In one or more embodiments, additional supercomputing resources can be allocated for the first job. For example, compute node 210 A 4 can be allocated for job 285 A, as illustrated in FIG. 2B which shows supercomputing system 200 A where compute nodes 210 A 1 - 210 A 4 can be allocated for job 285 A.

In one or more embodiments, computing resources of the second job can be contracted such that additional computing resources can be used for the first job. For example, computing resources for job 285 B can be contracted, and those resources that were taken from job 285 B can be provided to job 285 A. For instance, compute node 210 A 5 can be taken from job 285 B and provided to job 285 A, as illustrated in FIG. 2C which shows supercomputing system 200 A where compute nodes 210 A 1 - 210 A 5 can be allocated for job 285 A, and job 285 B includes compute node 210 A 6 . In one or more embodiments, computing resources of the second job can be contracted such that the second job may not be executed, and the first job can utilize all computing resources of the supercomputing system. As shown in FIG. 2D , for example, job 285 A can use all of the compute nodes, e.g., compute nodes 210 A 1 - 210 AN, of supercomputing system 200 A.

Turning now to FIG. 2E , a block diagram of supercomputing systems coupled to a network is illustrated, according to one or more embodiments. As shown, supercomputing systems 200 A- 200 F can be coupled to NET 270 . In one or more embodiments, each of supercomputing systems 200 B- 200 F can include elements, features and/or functionalities of supercomputing system 200 A.

In one or more embodiments, a job can be executed by multiple supercomputing systems. As shown, job 285 A can be executed on supercomputing systems 200 A and 200 B. For example, job 285 A may have exhausted resources of supercomputing system 200 A to complete in a time period and provide a resolution according to some specification, configuration, and/or metric. Accordingly, job 285 A can be executed on one or more portions of supercomputing system 200 B (such as job 285 A executed on one or more portions of supercomputing system 200 A with respect to FIGS. 2A-2C ) or all resources of supercomputing system 200 B can be allocated to executing job 285 A (such as job 285 A executed on all compute nodes of supercomputing system 200 A with respect to FIG. 2D ).

In one or more embodiments, resources of two or more super computing systems can be allocated to executing a job. As shown in FIG. 2F , job 285 A can be executed on supercomputing systems 200 A, 200 B, and 200 D. For example, job 285 A may be allocated resources on supercomputing system 200 D rather than supercomputing system 200 C because communications may be faster to and/or from supercomputing system 200 D than supercomputing system 200 C.

Turning now to FIG. 3 , a method for allocating resources for multiple jobs executed on one or more supercomputing systems is illustrated, according to one or more embodiments. In one or more embodiments, the method illustrated in FIG. 3 can be a computer-implemented method of a global resource manager that can execute on a compute node. For example, the global resource manager can be included in application 185 C that can be executed on one of compute nodes 210 A 1 - 210 AN.

›DETAILED DESCRIPTION · 3 of 5

The method begins at block 305 where the global resource manager allocates first resources for a first job. For example, the global resource manager can allocate compute nodes 210 A 1 - 210 A 3 for job 285 A. At 310 , the global resource manager can distribute a first application and first data to the first resources. For example, the global resource manager can distribute application 185 A and data from data 290 A to compute nodes 210 A 1 - 210 A 3 . In one or more embodiments, the global resource manager can distribute respective portions of data 290 A to each of compute nodes 210 A 1 - 210 A 3 . At 315 , compute nodes 210 A 1 - 210 A 3 can execute job 285 A.

At block 320 , the global resource manager can allocate second resources to a second job. For example, the global resource manager can allocate compute nodes 210 A 5 and 210 A 6 to job 285 B. At block 325 , the global resource manager can distribute a second application and second data to the second resources. For example, the global resource manager can distribute application 185 B and data from data 290 B to compute nodes 210 A 5 and 210 A 6 . In one or more embodiments, the global resource manager can distribute respective portions of data 290 B to each of compute nodes 210 A 5 and 210 A 6 . At 330 , compute nodes 210 A 5 and 210 A 6 can execute job 285 B.

At block 335 , the global resource manager can determine that an event occurred while processing the first job. In one or more embodiments, the event can be triggered by some configuration, specification, and/or metric used to detect a state or an approximation of a state. For example, job 285 A may be processing atmospheric data, and one or more of compute nodes 210 A 1 - 210 A 3 detect one or more cloud patterns that indicate conditions or approximate conditions for tornadic activity. For instance, this detection can trigger the event, and one or more of compute nodes 210 A 1 - 210 A 3 can transmit information (e.g., one or more messages) to the global resource manager that the event occurred.

In one or more embodiments, further analysis of the data and/or related (e.g., surrounding) data can be analyzed to provide better resolution. For example, compute nodes 210 A 1 - 210 A 3 may have been analyzing the atmospheric data in a first analysis mode, and to provide a better analysis of the atmospheric conditions or approximate atmospheric conditions that triggered the event, the global resource manager can provide instructions to compute nodes 210 A 1 - 210 A 3 to analyze the data in a second analysis mode. In one or more embodiments, the second analysis mode can provide better resolution or fidelity than the first analysis mode.

In one or more embodiments, performing a higher resolution analysis of the data can increase an amount of time in processing all of the first data. For example, the analysis of all the first data may be bounded or need to occur within a first amount of time. The global resource manager may calculate or compute an amount of additional resources needed to complete the analysis of the first data within the amount of time while taking into account the additional resolution of a portion of the data that triggered the event. In one or more embodiments, the global resource manager can calculate or compute an amount of additional resources needed to complete the analysis of the first data within less than the amount of time while taking into account the additional resolution of a portion of the data that triggered the event. For example, performing the higher resolution analysis of the data that indicated the possible tornadic activity can correspond to a greater allocation of resources such that the performing the higher resolution analysis is performed more expediently than the amount of time scheduled for the processing of the entire data set. At block 340 , the global resource manager can determine an amount of additional resources for processing the first job using a higher resolution on at least a portion of the first data.

At block 345 , the global resource manager can determine whether or not the second resources of the second job are to be contracted. In one or more embodiments, jobs executing on a supercomputing system can be ordered in terms of privilege and/or precedence. In one example, the second job may be a job of a graduate student and the first job may be a job of a professor, and jobs of professors may take precedence over jobs of graduate students. In a second example, the second job may be a job of a lesser contributor to the supercomputing system, and the lesser contributor's jobs are given a lower precedence.

If the second resources of the second job not are to be contracted, the global resource manager can allocate additional resources for the first resources of the first job such that the first job can be expanded at block 365 . For example, the global resource manager can allocate compute node 210 A 4 for the first resources, and the first resources include compute nodes 210 A 1 - 210 A 4 that can be used to process job 285 A. In one or more embodiments, the global resource manager can allocate resources from other supercomputing systems. For example, job 285 A may already have all of resources of supercomputing system 200 A allocated to processing data 290 A. For instance, the global resource manager can allocate resources from other supercomputing systems such as supercomputing systems 200 B and/or 200 D which are coupled to supercomputing system 200 A via NET 270 . In one or more embodiments, the global resource manager can choose one supercomputing system coupled to NET 270 over another supercomputing system coupled to NET 270 based on one or more factors and/or attributes. For example, access to one supercomputing system coupled to NET 270 may be faster than another supercomputing system coupled to NET 270 , and the global resource manager can choose the supercomputing system coupled to NET 270 with the faster access. In one or more embodiments, resources of other supercomputing systems 200 B- 200 F can be managed using the elements, features, and/or functionality described in the method illustrated in FIG. 3 . In one or more embodiments, application 185 A of job 285 A can be optimized to function over a network such as NET 270 in addition to being optimized for a HPC network.

›DETAILED DESCRIPTION · 4 of 5

At block 375 , the global resource manager can distribute the first application and the first data to the first resources which have been expanded. For example, the global resource manager can distribute application 185 A to compute node 210 A 4 , as well. In one instance, the global resource manager can distribute different portions of data 290 A to the first resources to allow for the analysis of data 290 A and the higher resolution analysis of one or more portions of data 290 A that triggered the event such that the analysis is scheduled to occur within the first amount of time. At block 380 , the first resources which have been expanded can execute job 285 A.

With reference to block 350 , if the second resources of the second job are to be contracted, the global resource manager can contract the second resource at block 355 . For example, the global resource manager can remove compute node 210 A 5 from the second resources. For instance, the global resource manager can allocate compute node 210 A 5 to the first resource after compute node 210 A 5 is removed from the second resource. At block 350 , the global resource manager can determine whether or not the second resources exist. For example, the global resource manager may have contracted the second resource such that there are no resources available for the second resources. For instance, job 285 B can be held in as inactive or held in abeyance until resources for the second resources are available. If the second resources do not exist, the global resource manager can proceed to block 365 . If the second resources do exist, the global resource manager can proceed to block 355 , where the global resource manager can distribute the second data to the second resources which have been contracted. For example, the global resource manager may distribute portions of data that were being processed on a resource that is no longer available to the second resources. For instance, the global resource manager can distribute one or more portions of data 290 B that were being process by compute node 210 A 5 to compute node 210 A 6 . At block 360 , job 285 B can be executed on the second resources which have been contracted, and the global resource manager can proceed to block 365 .

In one or more embodiments, other events can be triggered. For example, other cloud formations can be detected that can cause another event to be triggered. For instance, the first resources can detect one or more cloud patterns that indicate conditions or approximate conditions for tornadic activity in another portion of data 290 A. This detection can trigger another event, and the first resources can transmit information (e.g., one or more messages) to the global resource manager that the event occurred. As other events are detected, the global resource manager can proceed to block 335 of FIG. 3 and perform various portions of the illustrated method for each additional event.

Turning now to FIG. 4 , a method for de-allocating resources for multiple jobs executed on a supercomputing system is illustrated, according to one or more embodiments. In one or more embodiments, the method illustrated in FIG. 4 can be a computer-implemented method of a global resource manager that can execute on a compute node. For example, the global resource manager can be included in application 185 C that can be executed on one of compute nodes 210 A 1 - 210 AN.

The method begins at block 405 where the global resource manager can determine that first resources are in excess. For example, the first resources may have been expanded to increase resolution on a portion of a data set, and the global resource manager or one or more compute nodes can determine that the portion of the data set is anomalous data. For instance, the portion of the data set may have indicated possible tornadic activity, as discussed above. However, the global resource manager or one or more compute nodes can determine that the portion of the data set does not indicate tornadic activity upon analysis under a greater resolution. At 410 , the global resource manager can contract the first resources. For example, the global resource manager can contract job 285 A to use the resources of compute nodes 210 A 1 - 210 A 3 when job 285 A was previously using compute nodes 210 A 1 - 210 A 5 .

At block 415 , the global resource manager can determine that other resources were contracted. For example, second resources may have been contracted so that the first resources could be expanded. At block 420 , the global resource manager can expand the other resources. In one example, job 285 B may have been contracted to use compute node 210 A 6 , and the global resource manager can expand job 285 B to include resources of compute nodes 210 A 5 and 210 A 6 . In a second example, job 285 B may have been held in as inactive or in abeyance until resources for the second resources become available, and the global resource manager can expand job 285 B to include resources of compute node 210 A 6 .

In one or more embodiments, expanding and contracting of supercomputing jobs can occur on logical boundaries of jobs being performed. For example, application 185 A of job 285 A can include logical boundaries where a number of computations are performed followed by an exchange of data between or among the resources allocated to job 285 A. At these logical boundaries, job 285 A can be expanded or contracted.

In the flow charts above, one or more of the methods and/or processes are embodied in a computer readable medium including computer readable code such that a series of steps are performed when the computer readable code is executed (by a processing unit). In one or more embodiments, some processes of the methods and/or processes can be combined, performed simultaneously, concurrently (e.g., scheduled quickly enough in time to appear simultaneous to a person), or in a different order, or perhaps omitted, without deviating from the spirit and scope of the invention. Thus, while the method(s) and/or process(es) are described and illustrated in a particular sequence, use of a specific sequence of processes is not meant to imply any limitations on the invention. Changes may be made with regards to the sequence of processes without departing from the spirit or scope of the present invention. Use of a particular sequence is therefore, not to be taken in a limiting sense, and the scope of the present invention extends to the appended claims and equivalents thereof.

›DETAILED DESCRIPTION · 5 of 5

As will be appreciated by one skilled in the art, the present invention may be embodied as a method, process, system, and/or computer program product. Accordingly, the present invention may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, micro-code, etc.) or an embodiment combining software and hardware aspects that may all generally be referred to herein as a “circuit,” “module,” “logic”, and/or “system.” Furthermore, the present invention may take the form of an article of manufacture having a computer program product with a computer-usable storage medium having computer-executable program instructions/code embodied in or on the medium.

As will be further appreciated, the method(s) and/or process(es) in embodiments of the present invention may be implemented using any combination of software, firmware, microcode, and/or hardware. As a preparatory step to practicing the invention in software, the programming code (whether software or firmware) will typically be stored in one or more machine readable storage or memory mediums such as fixed (hard) drives, diskettes, magnetic disks, optical disks, magnetic tape, semiconductor memories such as RAMs, ROMs, PROMs, EPROMs, EEPROMs, etc., thereby making an article of manufacture, in one or more embodiments. The medium may be electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system (or apparatus or device) or a propagation medium. Further, the medium may be any apparatus that may include, store, communicate, propagate, or transport the program for use by or in connection with the execution system, apparatus, or device. The method(s) and/or process(es) disclosed herein may be practiced by combining one or more machine-readable storage devices including the code/logic according to the described embodiment(s) with appropriate processing hardware to execute and/or implement the code/logic included therein. In general, the term computer, computer system, or data processing system can be broadly defined to encompass any device having a processor (or processing unit) which executes instructions/code from a memory medium.

While the invention has been described with reference to exemplary embodiments, it will be understood by those skilled in the art that various changes may be made and equivalents may be substituted for elements thereof without departing from the scope of the invention. In addition, modifications may be made to adapt a particular system, device or component thereof to the teachings of the invention without departing from the essential scope thereof. Therefore, it is intended that the invention not be limited to the particular embodiments disclosed for carrying out this invention, but that the invention will include all embodiments falling within the scope of the appended claims. Moreover, use of the terms first, second, etc. can denote an order if specified, or the terms first, second, etc. can be used to distinguish one element from another without an ordered imposed.

1 of 9 part labels are ours — the grant heads the rest

Claims as granted

18 claims

Log in to read the claims of this application.

Log in to unlock

Classifications

6 codes
IPC · International Patent Classification
Section G — Physics
  • G06F15/16
  • G06F15/173
  • G06F9/50
USPC · US Patent Classification
709/226709/203709/201

Claim changes

Soon
Coming soonHow the claims changed between publication and grant

See which claims were amended, added or cancelled during examination, with every added and removed word marked.

AmendedAddedCancelledUnchanged

The published claims of this application are not paired with the granted ones in what we hold.

File wrapper

⤢ drag to zoom2009201020112012201320142015USPTOApplicantNon-final rejectionFinal rejectionNon-final rejectionExaminer-initiated interview
USPTOApplicanthover for detail · click to open
Pendency
5.9 y
2,154 days filing → grant
Office actions
3
non-final + final
Responses
2
1 RCE
Interviews
1
examiner interview summaries
Examiner
Minh-Chau Nguyen
art unit 2459 · TC 2400
Citations: 15 back · 1 forward

See the full prosecution history — every USPTO and applicant action on this file, in order.

Log in to unlock

Documents

Log in to open the documents of this file: the application as filed, every office action and response, the notice of allowance.

Log in to unlock

Chain of title

⤢ drag to zoom20102012201420162018202020222024202620282030Owner 2
Titlehover for detail · click to open

See the full assignment history — every owner this patent has passed through, with recordation dates and reel/frame numbers.

Log in to unlock