You are viewing an old version of this page. View the current version.

    Compare with Current View Page History

    « Previous Version 15 Next »

    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. It also includes user-specified resources. 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 global and host resources). Global resources are tracked through the entire system. For example, the tracking of licenses. A host resource is local and specific to each host, for example the number of cores.

    Resources are defined and reserved through this syntax:

    type.name=quantity[,type.name=quantity…]

    This appears 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.

    Quantity Syntax

    host.processors=1+ 
    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.

    host.processors=1*  
    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.

    host.processors=all
    Equivalent to host.processors=1*

    host.processors=N+M 
    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.

    Icon

    From version 6.5 on Qube! allows for a more "dynamic" evaluation of the "host.processors=1+" or "host.processors=4-8" style of reservations.

    A "1+" reservation used to mean "all the slots", but there was no way to know how many slots it was allocated; there could be a 2-slot job already running on an 8-slot worker, and then the 1+ would just assume that it was getting all 8 slots and the worker would be over-scheduled for as long as both the 2-slot and the 1+ job were running at the same time.

    Now, the reservations as evaluated on each worker at the time the job instance starts on the particular worker. So in the above example, the 2-slot job has already been allocated 2 worker slots, and when the 1+ instance starts, it's allocated the remaining 6 slots.

    Examples

    Reserve 200MB of memory on the host
    % qbsub --reservations "host.memory=200" set

    Reserve at least 1 processor and up to all processors on a host
    % qbsub --reservations "host.processors=1+" set

    Reserve from 1 to 20 processors on a single host
    % qbsub --reservations "host.processors=1-20" set

    Reserve a global resource called maya
    % qbsub --reservations "global.maya=1" "maya -batch -render ...."

    Relevant environment variables

    This will be exposed to the job's running environment as QB_JOBSLOTS=6, (or whatever the value) and stored in the Qube! database in the job's subjob table as "allocations".

    See Also

    CPU-Minutes (Cumulative Time)

     

    • No labels