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:

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

    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.

    Specifying Quantity

    SyntaxMeaning
    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=allEquivalent to host.processors=1*
    host.processors=N-MDispatch 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.


    Examples

    ReservationExplanation
    "host.memory=200"Reserve 200MB of memory on the host
    "host.processors=1+"Reserve all processors on a host, but at least 1 must be available in order to start
    "host.processors=1-20"Reserve 20 processors on a single host, but at least 1 must be available in order to start
    "global.maya=1" Reserve a global resource called maya

    See Also

    supervisor_global_resources
    worker_resources
    System-Wide Resource Tracking

     

    • No labels