...
Restrictions are used to allow or restrict where jobs run, and are applied to both jobs and Workers. Restrictions are based on cluster names, but differ from the clusters themselves in an important way:
Note |
---|
Jobs and workers can belong to 1 and only 1 cluster, but can be restricted to none, 1, or several clusters |
This seems a bit hard to understand, until you remember that a . A job has preferential priority on a Worker whose cluster matches the job's cluster, but the job is free to run on any Worker in other clusters. The job's restriction value can be used to limit what other clusters the job could possibly run onany other cluster, subject to the restrictions defined here.
Restrictions defined for jobs
...
When a Worker has a restriction defined via its worker_restrictions value, it means only run jobs whose cluster value matches one of the clusters in that worker's restriction expression. The worker won't accept jobs whose cluster doesn't match one of the clusters in the worker's restriction expression.
Restrictions Syntax
A restriction is really defined as a "filter" for hosts based upon information in the queuing algorithm; the values are one or more cluster names. In the priority/cluster queuing system, a user specifies their the restrictions by with a directory structure format:
...
Tip |
---|
The restriction value is actually evaluated as an expression, and multiple clusters are specified in a "this cluster OR that cluster OR the other cluster" type of string, with the " || " symbol to mean OR. |
Examples
...
Job Restrictions
Definition | Syntax | Define a host that will only run jobs in /private/very/deep | Meaning |
---|---|---|---|
qbsub -cl /private -restr /private <cmd> | Submit a job that will have highest priority in /private and run only in /private | ||
qbsub -cl /private/very -restr '/private || /private/*' <cmd> | Submit a job that will have highest priority in /private/very, but could run in any host in | ||
qbsub -cl /private/very/deep -restr '/private || /private/+' <cmd> | Submit a job that will have highest priority in /private/very/deep, but could run in any |
Worker Restrictions
Syntax | Meaning | ||
---|---|---|---|
worker_cluster = "/private/very/deep" | Define a host that | will runwill only run jobs in | any cluster at /private or 1 level below - done with the */private/very/deep |
worker_cluster = "/private" | Define a host that will only run jobs in any cluster at /private /very or any 1 level below - done with the + * | ||
worker_cluster = "/private/very" |
Job Restrictions
Definition | Syntax |
---|---|
Submit a job that will have highest priority in /private and run only in /private | qbsub -cl /private -restr /private <cmd> |
Submit a job that will have highest priority in /private/very, but could run in any host in /private or in the first level below /private | qbsub -cl /private/very -restr '/private or /private/*' <cmd> |
Submit a job that will have highest priority in /private/very/deep, but could run in any host at any level at /private or below | qbsub -cl /private/very/deep -restr '/private or /private/+' hostname Define a host that will only run jobs in /private/very or any level below - done with the + |