Qube!'s reservation system is important for correct management of host resources. This is accomplished with the relationship between reservations and resources.
Each host has a list of resources including system resources such as memory and number of processors. Resources are integer based (meaning '1' and '99' are valid resource counts; 'a' and '4.5' are not) and automatically decrement/increment upon acceptance of a job. A resource can be "discovered" by the system (eg, number of cores) or defined by admins (eg, number of licenses).
The user must know whether the resource is global or host-based (see System-Wide Resource Tracking). Global resources are tracked through the entire system, for example, license tracking. A host resource is local and specific to each host, for example the number of cores.
Resources are defined and reserved through this syntax:
This is set on the Supervisor (for global resources, see supervisor_global_resources), on the host (for host-based resources, see worker_resources) and/or in the job submission UI in the reservations field.
|Dispatch to a worker with at least 1 open slot, then occupy all currently open slots. |
The general form is host.processors=N+, where N is a positive integer.
|Dispatch to a worker with at least 1 open slot and no used slots (i.e. worker must be idle!), then occupy all currently open slots. |
The general form is host.processors=N*, where N is a positive integer
|Equivalent to |
|Dispatch to a worker with at least N to M open slots. Upon being dispatched to a worker, it occupies as many slots as it can, up to M, as slots become available.|
Dynamic Thread Assignment
When a 1+ or similar job picks up on a Worker, we don't know how many slots were available or assigned to that instance. That number is made available dynamically in the running job's environment as an environment variable,
QB_JOBSLOTS=6, (or whatever the value) and stored in the Qube! database in the job's subjob table as "allocations". One use of this could be that the job references $QB_JOBSLOTS on the command line to specify the number of threads a renderer should use.
|Reserve 200MB of memory on the host|
|Reserve all processors on a host, but at least 1 must be available in order to start|
|Reserve 20 processors on a single host, but at least 1 must be available in order to start|
|Reserve a global resource called maya|