---
name: "sge_queue_conf"
section: "5"
platform: "linux"
package: "gridengine-common"
version: "8.1.9+dfsg-13.1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/sge_queue_conf"
---

# sge\_queue\_conf(5)

Grid Engine queue configuration file format

## NAME

queue\_conf - Grid Engine queue configuration file format

## DESCRIPTION

This manual page describes the format of the template file for the cluster queue configuration. Via the **-aq** and **-mq** options of the [*qconf*(1)](/qconf/1.md) command, you can add cluster queues and modify the configuration of any queue in the cluster. Any of these change operations can be rejected as a result of a failed integrity verification.

The queue configuration parameters take as values strings,  integer decimal numbers,  booleans, or time and memory specifiers (see  *time\_specifier* and *memory\_specifier* in [*sge\_types*(5)](/sge_types/5.md)) as well as comma-separated lists.

Note, Grid Engine allows backslashes (\\) be used to escape newline  characters. The backslash and the newline are replaced with a space character before any interpretation.

## FORMAT

The list of parameters below specifies the queue configuration  file content.

For each parameter except **qname** and **hostlist**, it is possible to specify host-dependent values instead of a single value. This "enhanced queue configuration specifier syntax" takes the form

```
parameter parameter_value[,[host_id=parameter_value]]...
```

where *host\_id* is a **host\_identifier**, as defined in  [*sge\_types*(5)](/sge_types/5.md), and *parameter\_value* is of the correct form for each parameter, as described below.  Spaces are allowed around "**,**" but not inside "**\[\]**", except within list-valued *parameter\_value*s.

An entry without brackets is always required as the default setting for all queue instances which don't override it. Tuples with a **hostgroup\_name** (see [*sge\_types*(1)](/sge_types/1.md)) *host\_id* override the default setting. Tuples with a **host\_name** *host\_id* override both the default and the host group setting.  As an example, PEs with different allocation rules may be specified according to the core count of different node types:

```
pe_list NONE,[@dual=all-mpi mpi-4],[@quad=all-mpi mpi-8]
```

The queue configuration is rejected if a default setting is absent.

Ambiguous configurations (those with more than one attribute setting for a particular host) cause the relevant queue instances to go into a "configuration ambiguous" state and not accept jobs.  This is reported as "**c**" by [*qstat*(1)](/qstat/1.md) and [*qhost*(1)](/qhost/1.md), and may be diagnosed with **qstat -explain c**. Configurations containing override values for hosts not in the execution host list are accepted as "detached", as indicated by the **-sds** argument of [*qconf*(1)](/qconf/1.md).

### qname

The name of the cluster queue in the format for *queue\_name* in [*sge\_types*(1)](/sge_types/1.md). As template default "template" is used.

### hostlist

A list of host identifiers in the format for *host\_identifier* in  [*sge\_types*(1)](/sge_types/1.md). For each host Grid Engine maintains a queue instance for running jobs on that particular host. Large numbers of hosts can easily be managed  by using host groups rather than single host names. Both white-space and "," can be used as list separators. (Template default: NONE, i.e. no hosts support the queue.)

### seq\_no

In conjunction with the hosts load situation at some time, this  parameter specifies this queue's position in the scheduling order  within the suitable queues for a job to be dispatched according to the **queue\_sort\_method** (see  *sched\_conf*(5)).

Regardless of the **queue\_sort\_method** setting, [*qstat*(1)](/qstat/1.md) reports queue information in the order defined by the value of the **seq\_no**. Set this parameter to a monotonically increasing sequence. (Type: number; template default: 0.)

### load\_thresholds

**load\_thresholds** is a list of load thresholds. When one of the thresholds is exceeded no further jobs will be scheduled to the queues and the relevant queue instance will be put into the "alarm" state by the overload condition. Arbitrary load values defined in the "host" and "global" complexes (see [*complex*(5)](/complex/5.md) for details) can be used.

The syntax is that of a comma-separated list, with each list element consisting of the *complex\_name* (see  [*sge\_types*(5)](/sge_types/5.md)) of a  load value, an equal sign and the threshold value intended to  trigger the overload situation (e.g. **load\_avg=1.75,users\_logged\_in=5**).

**Note:** Load values as well as consumable resources may be scaled differently for different hosts if specified in the corresponding execution host definitions (refer to *host\_conf*(5) for more information). Load thresholds are compared against the scaled load and consumable values. Boolean complexes can be used to set an alarm state with the value **false**, typically from a load sensor which checks a host's "health", e.g. **load\_avg=1.75,health=false**.

### suspend\_thresholds

A list of load thresholds with the same semantics as the **load\_thresholds** parameter (see above), except that exceeding one of these thresholds initiates suspension of one of multiple jobs in the queue. See the **nsuspend** parameter below for details on the number of jobs which are suspended. There is an important relationship between the **suspend\_threshold** and the **scheduler\_interval**. If you have for example a suspend threshold on the np\_load\_avg, and the load exceeds the threshold, this does not have immediate effect. Jobs continue running until the next scheduling run, where the scheduler detects the threshold has been exceeded and sends an order to qmaster to suspend the job. The same applies for unsuspending.

### nsuspend

The number of jobs which are suspended/enabled per time interval if at least one of the load thresholds in the **suspend\_thresholds** list is exceeded or if no **suspend\_threshold** is violated anymore, respectively. **Nsuspend** jobs are suspended in each time interval until no **suspend\_thresholds** are exceeded anymore or all jobs in the queue are suspended. Jobs are enabled in the corresponding way if the **suspend\_thresholds** are no longer exceeded. The time interval in which the suspensions of the jobs occur is defined in **suspend\_interval** below.

### suspend\_interval

The time interval in which further **nsuspend** jobs are suspended if one of the **suspend\_thresholds** (see above for both) is exceeded by the current load on the host on which the queue is located. The time interval is also used when enabling the jobs.  The syntax is that of a *time\_specifier* in [*sge\_types*(5)](/sge_types/5.md).

### priority

The **priority** parameter specifies the [*nice*(2)](/nice/2.md) value at which jobs in this queue will be run. It is of type "number" and the default is zero (which means no nice value is set explicitly). Negative  values (up to -20) correspond to a higher scheduling priority; positive  values (up to +20) correspond to a lower scheduling priority.

Note, the value of **priority** has no effect if Grid Engine adjusts priorities dynamically to implement ticket-based entitlement  policy goals. Dynamic priority adjustment is switched  off by default due to  [*sge\_conf*(5)](/sge_conf/5.md) **reprioritize** being set to false.

### min\_cpu\_interval

The time between two automatic checkpoints in case of transparently checkpointing jobs. The maximum of the time requested by the user via [*qsub*(1)](/qsub/1.md) and the time defined by the queue configuration is used as the checkpoint interval. Since checkpoint files may be quite large, and thus writing them to the file system may become expensive, users and administrators are advised to choose sufficiently large time intervals. **min\_cpu\_interval** is of type "time" and the default is 5 minutes (which usually is suitable for test purposes only). The syntax is that of a *time\_specifier* in [*sge\_types*(5)](/sge_types/5.md).

### processors

This parameter is considered obsolete.

A set of processors in case of a multiprocessor execution host can be defined to which the jobs executing in this queue are bound. The value type of this parameter is a range description like that of the **-pe** option of [*qsub*(1)](/qsub/1.md) (e.g. 1-4,8,10) denoting the processor numbers for the processor group to be used. Obviously the interpretation of these values relies on operating system specifics and is thus performed inside [*sge\_execd*(8)](/sge_execd/8.md) running on the queue host. Therefore, the parsing of the parameter has to be provided by the execution daemon and the parameter is only passed through [*sge\_qmaster*(8)](/sge_qmaster/8.md) as a string.

Currently, support is only provided for multiprocessor machines running Solaris, SGI multiprocessor machines running IRIX 6.2 and  Digital UNIX multiprocessor machines.  In the case of Solaris the processor set must already exist when this processors parameter is configured, so the processor set has to be created manually. In the case of Digital UNIX only one job per processor set is allowed to  execute at the same time, i.e. **slots** (see below) should be set to 1 for this queue.

### qtype

The type of queue.  Currently **BATCH**, **INTERACTIVE**, a combination in a comma-separated list of both, or **NONE**.

Jobs submitted with option **-now y** can only be scheduled on *interactive* queues, and **-now n** targets *batch* queues.  **-now y** is the default for *qsh*, *qrsh*, and *qlogin*, while **-now n** is the default for *qsub*. Nevertheless, the option can be applied to all commands, with either argument, to direct jobs to specific queue types.

The formerly supported types **parallel** and **checkpointing** are not allowed anymore. A queue instance is implicitly of type parallel/checkpointing  if there is a parallel environment or a checkpointing interface specified for this queue instance in **pe\_list**/**ckpt\_list**, and is implicitly BATCH if it has a parallel environment attached. Formerly possible settings e.g.

```
qtype   PARALLEL
```

could be changed to

```
qtype   NONE
pe_list pe_name
```

(Type string; default: batch interactive.)

### pe\_list

The list of administrator-defined parallel environment (see  [*sge\_pe*(5)](/sge_pe/5.md)) names  to be associated with the queue. The default is *NONE*.

### ckpt\_list

The list of administrator-defined checkpointing interface names (see *ckpt\_name* in [*sge\_types*(1)](/sge_types/1.md)) to be associated  with the queue. The default is *NONE*.

### rerun

Defines a default behavior for jobs which are aborted by system crashes or manual "violent" (via [*kill*(1)](/kill/1.md)) shutdown of the complete Grid Engine system (including the [*sge\_shepherd*(8)](/sge_shepherd/8.md) of the jobs and their process hierarchy) on the queue host. As soon as [*sge\_execd*(8)](/sge_execd/8.md) is restarted and detects that a job has been aborted for such reasons it can be restarted if the jobs are restartable. A job may not be restartable, for example, if it updates databases (first reads then writes to the same record of a database/file), because aborting the job may have left the database in an inconsistent state. If the owner of a job wants to overrule the default behavior for the jobs in the queue the **-r** option of [*qsub*(1)](/qsub/1.md) can be used.

The type of this parameter is boolean, thus either TRUE or FALSE can be specified. The default is FALSE, i.e. do not restart jobs automatically.

### slots

The maximum number of slots that may be scheduled concurrently in instances of the queue. Type is number, valid values are 0 to 9999999.

If there are multiple queues defined on a host and they are not mutually suspendable, the host **slots** value should be set to the processor count on the host if you want to avoid potential over-subscription due to scheduling to more than one queue at a time.

### tmpdir

The **tmpdir** parameter specifies the absolute path to the base of the temporary directory filesystem. When  [*sge\_execd*(8)](/sge_execd/8.md) launches a job, it creates a uniquely-named directory in this filesystem for the purpose of holding scratch files during job execution. At job completion, this directory and its contents are removed automatically. The environment variables TMPDIR and TMP are set to the path of each job's scratch directory. (Type string; default: /tmp.)

### shell

If either *posix\_compliant* or *script\_from\_stdin* is specified as the **shell\_start\_mode** parameter in [*sge\_conf*(5)](/sge_conf/5.md) the **shell** parameter specifies the executable path of the command interpreter (e.g. [*sh*(1)](/sh/1.md) or [*csh*(1)](/csh/1.md)) to be used to process the job scripts executed in the queue. The definition of **shell** can be overruled by the job owner via the [*qsub*(1)](/qsub/1.md) **-S** option.

The type of the parameter is string. The default is **/bin/sh**.

### shell\_start\_mode

This parameter defines the mechanisms which are used to actually invoke the job scripts on the execution hosts. The following values are recognized:

- *unix\_behavior*

  If a user starts a job shell script under UNIX interactively by invoking it just with the script name, the operating system's executable loader uses the information provided in a comment such as \`#!/bin/csh' in the first line of the script to detect which command interpreter to start to interpret the script. This mechanism is used by Grid Engine when starting jobs if *unix\_behavior* is defined as **shell\_start\_mode**.

- *posix\_compliant*

  POSIX does not consider first script line comments such as \`#!/bin/csh' significant. The POSIX standard for batch queuing systems (P1003.2d) therefore requires a compliant queuing system to ignore such lines and to use user specified or configured default command interpreters instead. Thus, if **shell\_start\_mode** is set to *posix\_compliant* Grid Engine will either use the command interpreter indicated by the **-S** option of the [*qsub*(1)](/qsub/1.md) command or the **shell** parameter of the queue to be used (see above).

- *script\_from\_stdin*

  Setting the **shell\_start\_mode** parameter either to *posix\_compliant* or *unix\_behavior* requires you to set the umask in use for [*sge\_execd*(8)](/sge_execd/8.md) such that every user has read access to the active\_jobs directory in the spool directory of the corresponding execution daemon. In case you have **prolog** and **epilog** scripts configured, they also need to be readable by any user who may execute jobs.\
   If this violates your site's security policies you may want to set **shell\_start\_mode** to *script\_from\_stdin*. This will force Grid Engine to open the job script, as well as the epilogue and prologue scripts, for reading into STDIN as root (if [*sge\_execd*(8)](/sge_execd/8.md) was started as root) before changing to the job owner's user account. The script is then fed into the STDIN stream of the command interpreter indicated by the **-S** option of the [*qsub*(1)](/qsub/1.md) command or the **shell** parameter of the queue to be used (see above).\
   Thus setting **shell\_start\_mode** to *script\_from\_stdin* also implies *posix\_compliant* behavior. **Note**, however, that feeding scripts into the STDIN stream of a command interpreter may cause trouble if commands like [*rsh*(1)](/rsh/1.md) are invoked inside a job script as they also process the STDIN stream of the command interpreter. These problems can usually be resolved by redirecting the STDIN channel of those commands to come from /dev/null (e.g. rsh host date \< /dev/null). **Note also**, that any command-line options associated with the job are passed to the executing shell. The shell will only forward them to the job if they are not recognized as valid shell options.

The default for **shell\_start\_mode** is *posix\_compliant*. Note, though, that the **shell\_start\_mode** can only be used for batch jobs submitted by  [*qsub*(1)](/qsub/1.md) and can't be used for interactive jobs submitted by [*qrsh*(1)](/qrsh/1.md), [*qsh*(1)](/qsh/1.md), [*qlogin*(1)](/qlogin/1.md).

### prolog

This queue configuration entry overwrites cluster global or execution host-specific **prolog** definitions (see [*sge\_conf*(5)](/sge_conf/5.md)).

### epilog

This queue configuration entry overwrites cluster global or execution host-specific **epilog** definitions (see [*sge\_conf*(5)](/sge_conf/5.md)).

### starter\_method

The specified executable path will be used as a job starter facility responsible for starting batch jobs instead of the built-in starter (which typically passes the job to a shell).  The starter method is passed as arguments the command to run.  This is typically the name of a copy of the batch script file, followed by any arguments supplied at job submission.  However, depending on how the job was submitted, it might be a binary (with arguments), or a more general shell command line, e.g. supplied to *qrsh*. The following environment variables are used to pass information to the job starter concerning the shell environment which was configured or requested to start the job.

- *SGE\_STARTER\_SHELL\_PATH*

  The name of the requested shell to start the job

- *SGE\_STARTER\_SHELL\_START\_MODE*

  The configured **shell\_start\_mode**

- *SGE\_STARTER\_USE\_LOGIN\_SHELL*

  Set to "true" if the shell is supposed to be used as a login shell (see **login\_shells** in [*sge\_conf*(5)](/sge_conf/5.md)).

Ignoring those, a trivial starter method could be

```
    #!/bin/sh
    # set the environment somehow
    exec "$@"
```

It is, at best, tricky to write a proper substitute for the builtin method as a shell script, taking account of the variables above.  It is probably best to do so in a non-macro expanded scripting language (or a compiled language, as appropriate).

The starter\_method will not be invoked for qsh, qlogin, or qrsh acting as rlogin.

The same pseudo-variables can be expanded to compose the command as for the following methods.

### suspend\_method

### resume\_method

### terminate\_method

These parameters can be used for overwriting the default method used by Grid Engine for suspension, release of a suspension and for termination of a job. Per default, the signals SIGSTOP, SIGCONT and SIGKILL are delivered to the job to perform these actions. However, for some applications this is not appropriate.

If no executable path is given, Grid Engine takes the specified parameter entries as the signal to be delivered instead of the default signal. A signal must be either a positive number or a signal name with the **SIG** prefix, as printed by *kill -l* (e.g. **SIGTERM**).

If an executable path is given (it must be an *absolute path* starting with a "**/**"); then this command, together with its arguments, is started by Grid Engine to perform the appropriate action. The following special variables are expanded at runtime, and can be used (besides any other strings which have to be interpreted by the procedures) to compose a command line:

- *$host*

  The name of the host on which the procedure is started.

- *$ja\_task\_id*

  The array job task index (0 if not an array job).

- *$job\_owner*

  The user name of the job owner.

- *$job\_id*

  Grid Engine's unique job identification number.

- *$job\_name*

  The name of the job.

- *$queue*

  The name of the queue.

- *$job\_pid*

  The pid of the job.

- *$sge\_cell*

  The SGE\_CELL environment variable (useful for locating files).

- *$sge\_root*

  The SGE\_ROOT environment variable (useful for locating files).

Note that a method is only executed on the master node of a parallel job, so it may be necessary to propagate the necessary action to slave nodes explicitly.  (However, MPI implementations may, for instance, respond to SIGTSTP sent to the master process by stopping all the distributed processes.)  If an executable is used for a method, it is started in the same environment as for the job concerned (see [*qsub*(1)](/qsub/1.md)).

### notify

The time to wait between delivery of SIGUSR1/SIGUSR2  notification signals and suspend/kill signals if the job was submitted with the [*qsub*(1)](/qsub/1.md) *-notify* option.

### owner\_list

The **owner\_list** comprises comma-separated [*login*(1)](/login/1.md) user names (see *user\_name* in [*sge\_types*(1)](/sge_types/1.md)) of those users who are authorized to disable and suspend this queue through  [*qmod*(1)](/qmod/1.md). (Grid Engine operators and managers can do this by default.) It is customary  to set this field for queues on interactive workstations where the computing resources are shared between interactive sessions and Grid Engine jobs, allowing the workstation owner to have priority access.  Owners can be managers, operators, or users.  Owner privileges are necessary to use **qidle** (see [*sge\_execd*(8)](/sge_execd/8.md)). (Default: NONE.)

### user\_lists

The **user\_lists** parameter contains a comma-separated list of Grid Engine user access list names as described in *access\_list*(5). Each user contained in at least one of the given access lists has access to the queue. If the **user\_lists** parameter is set to NONE (the default) any user has access if not explicitly excluded via the **xuser\_lists** parameter described below. If a user is contained both in an access list in **xuser\_lists** and **user\_lists**, the user is denied access to the queue.

### xuser\_lists

The **xuser\_lists** parameter contains a comma-separated list of Grid Engine user  access list names as described in *access\_list*(5). Each user contained in at least one of the given access lists is not allowed to access the queue. If the **xuser\_lists** parameter is set to NONE (the default) any user has access. If a user is contained both in an access list in **xuser\_lists** and **user\_lists**, the user is denied access to the queue.

### projects

The **projects** parameter contains a comma-separated list of  Grid Engine projects (see  *project*(5)) that have access to the queue. Any project not in this list is denied access to the queue. If set to NONE (the default), any project has access that is not specifically excluded via the **xprojects** parameter described below. If a project is in both the **projects** and **xprojects** parameters, the project is denied access to the queue.

### xprojects

The **xprojects** parameter contains a comma-separated list of  Grid Engine projects (see *project*(5)) that are denied access to the queue. If set to NONE (the default), no projects are denied access other than those denied access based on the **projects** parameter described above.  If a project is in both the  **projects** and **xprojects** parameters, the project is denied access to the queue.

### subordinate\_list

There are two different types of subordination:

**1. Queuewise subordination**

A list of Grid Engine queue names in the format for *queue\_name* in [*sge\_types*(1)](/sge_types/1.md). Subordinate relationships are in effect only between queue instances residing at the same host.  The relationship does not apply and is ignored when jobs are  running in queue instances on other hosts.  Queue instances residing on the same host will be suspended when a specified  count of jobs is running in this queue instance. The list specification is the same as that of the **load\_thresholds** parameter above, e.g. low\_pri\_q=5,small\_q. The numbers denote the job slots of the queue that have to be filled in the superordinated queue  to trigger the suspension of the subordinated queue. If no value is assigned, a suspension is triggered if all slots of the queue are filled.

On nodes which host more than one queue, you might wish to accord better service to certain classes of jobs (e.g., queues that are dedicated to parallel processing might need priority over low priority production queues). The default is NONE.

**2. Slotwise preemption**

Slotwise preemption provides a means to ensure that high priority jobs get the resources they need, while at the same time low priority jobs on the same host are not unnecessarily preempted, maximizing the host utilization. Slotwise preemption is designed to provide different preemption actions, but with the current implementation only suspension is provided. This means there is a subordination relationship defined between queues similar to the queue-wise subordination, but if the suspend threshold is exceeded, the whole subordinated queue is not suspended, only single tasks running in single slots.

As with queue-wise subordination, the subordination relationships are in effect only between queue instances residing at the same host. The relationship does not apply and is ignored when jobs and tasks are running in queue instances on other hosts.

The syntax is:

slots=*threshold*(*queue\_list*)

where

*threshold* =a positive integer number

*queue\_list*=*queue\_def*\[,*queue\_list*\]

*queue\_def* =*queue*\[:*seq\_no*\]\[:*action*\]

*queue*     =a Grid Engine queue name in the format for *queue\_name* in [*sge\_types*(1)](/sge_types/1.md).

"*seq\_no*"    =sequence number among all subordinated queues of the same depth in the tree.\
 The higher the sequence number, the lower is the priority of the queue. Default is 0, which is the highest priority.

*action*    =the action to be taken if the threshold is exceeded.\
 Supported are:\
 "sr": Suspend the task with the shortest run time.\
 "lr": Suspend the task with the longest run time.\
 Default is "sr".

Some examples of possible configurations and their functionalities:

a) The simplest configuration

subordinate\_list   slots=2(B.q)

which means the queue "B.q" is subordinated to the current queue (let's call it "A.q"), the suspend threshold for all tasks running in "A.q" and "B.q" on the current host is two, the sequence number of "B.q" is "0" and the action is "suspend task with shortest run time first". This subordination relationship looks like this:

```
      A.q
       |
      B.q
```

This could be a typical configuration for a host with a dual core CPU. This subordination configuration ensures that tasks that are scheduled to "A.q" always get a CPU core for themselves, while jobs in "B.q" are not preempted as long as there are no jobs running in "A.q".

If there is no task running in "A.q", two tasks are running in "B.q" and a new task is scheduled to "A.q", the sum of tasks running in "A.q" and "B.q" is three. Three is greater than two, so this triggers the defined action. This causes the task with the shortest run time in the subordinated queue "B.q" to be suspended. After suspension, there is one task running in "A.q", one task running in "B.q", and one task suspended in "B.q".

b) A simple tree

subordinate\_list   slots=2(B.q:1, C.q:2)

This defines a small tree that looks like this:

```
      A.q
     /   \
   B.q   C.q
```

A use case for this configuration could be a host with a dual core CPU and queue "B.q" and "C.q" for jobs with different requirements, e.g. "B.q" for interactive jobs, "C.q" for batch jobs. Again, the tasks in "A.q" always get a CPU core, while tasks in "B.q" and "C.q" are suspended only if the threshold of running tasks is exceeded. Here the sequence number among the queues of the same depth comes into play. Tasks scheduled to "B.q" can't directly trigger the suspension of tasks in "C.q", but if there is a task to be suspended, first "C.q" will be searched for a suitable task.

If there is one task running in "A.q", one in "C.q" and a new task is scheduled to "B.q", the threshold of "2" in "A.q", "B.q" and "C.q" is exceeded. This triggers the suspension of one task in either "B.q" or "C.q". The sequence number gives "B.q" a higher priority than "C.q", therefore the task in "C.q" is suspended. After suspension, there is one task running in "A.q", one task running in "B.q" and one task suspended in "C.q".

c) More than two levels

Configuration of A.q: subordinate\_list   slots=2(B.q)\
 Configuration of B.q: subordinate\_list   slots=2(C.q)

looks like this:

```
      A.q
       |
      B.q
       |
      C.q
```

These are three queues with high, medium and low priority.  If a task is scheduled to "C.q", first the subtree consisting of "B.q" and "C.q" is checked, the number of tasks running there is counted. If the threshold which is defined in "B.q" is exceeded, the job in "C.q" is suspended. Then the whole tree is checked, if the number of tasks running in "A.q", "B.q" and "C.q" exceeds the threshold defined in "A.q" the task in "C.q" is suspended. This means, the effective threshold of any subtree is not higher than the threshold of the root node of the tree. If in this example a task is scheduled to "A.q", immediately the number of tasks running in "A.q", "B.q" and "C.q" is checked against the threshold defined in "A.q".

d) Any tree

```
       A.q
      /   \
    B.q   C.q
   /     /   \
 D.q    E.q  F.q
                \
                 G.q
```

The computation of the tasks that are to be (un)suspended always starts at the queue instance that is modified, i.e. a task is scheduled to, a task ends at, the configuration is modified, a manual or other automatic (un)suspend is  issued, except when it is a leaf node, like "D.q", "E.q" and "G.q" in this example. Then the computation starts at its parent queue instance (like "B.q", "C.q" or "F.q" in this example). From there first all running tasks in the whole subtree of this queue instance are counted. If the sum exceeds the threshold configured in the subordinate\_list, in this subtree a task is sought to be suspended. Then the algorithm proceeds to the parent of this queue instance, counts all running tasks in the whole subtree below the parent, and checks if the number exceeds the threshold configured in the parent's subordinate\_list. If so, it searches for a task to suspend in the whole subtree below the parent. And so on, until it did this computation for the root node of the tree.

### complex\_values

**complex\_values** defines quotas for resource attributes managed via this  queue. The syntax is the same as for **load\_thresholds** (see above). The quotas are related to the resource consumption of all jobs in a queue in the case of consumable resources (see [*complex*(5)](/complex/5.md) for details on consumable resources) or they are interpreted on a per queue slot (see **slots** above)  basis in the case of non-consumable resources. Consumable resource  attributes are commonly used to manage free memory, free disk space or  available floating software licenses, while non-consumable attributes  usually define distinctive characteristics, like the type of hardware installed.

For consumable resource attributes an available resource amount is  determined by subtracting the current resource consumption of all  running jobs in the queue from the quota in the **complex\_values** list. Jobs  can only be dispatched to a queue if no resource requests exceed any corresponding resource  availability obtained by this scheme. The quota definition in the  **complex\_values** list is automatically replaced by the current load value  reported for this attribute if load is monitored for this resource and if the  reported load value is more stringent than the quota. This effectively  avoids oversubscription of resources.

**Note:** Load values replacing the quota specifications may have become  more stringent because they have been scaled (see *host\_conf*(5)) and/or load adjusted (see *sched\_conf*(5)). The *-F* option of [*qstat*(1)](/qstat/1.md) and the load display in the [*qmon*(1)](/qmon/1.md) queue control dialog (activated by  clicking on a queue icon while the "Shift" key is pressed) provide  detailed information on the actual availability of consumable  resources and on the origin of the values taken into account currently.

**Note also:** The resource consumption of running jobs (used for the availability  calculation) as well as the resource requests of the jobs waiting to be  dispatched either may be derived from explicit user requests during  job submission (see the *-l* option to [*qsub*(1)](/qsub/1.md)) or from a "default" value  configured for an attribute by the administrator (see [*complex*(5)](/complex/5.md)). The *-r* option to [*qstat*(1)](/qstat/1.md) can be used for retrieving full detail on the actual  resource requests of all jobs in the system.

For non-consumable resources Grid Engine simply compares the  job's attribute requests with the corresponding specification in  **complex\_values**, taking the relation operator of the complex attribute  definition into account (see [*complex*(5)](/complex/5.md)). If the result of the comparison is  "true", the queue is suitable for the job with respect to the particular  attribute. For parallel jobs each queue slot to be occupied by a parallel task  is meant to provide the same resource attribute value.

**Note:** Only numeric complex attributes can be defined as consumable  resources, hence non-numeric attributes are always handled on a  per queue slot basis.

The default value for this parameter is NONE, i.e. no administrator  defined resource attribute quotas are associated with the queue.

### calendar

specifies the **calendar** to be valid for this queue or contains NONE (the  default). A calendar defines the availability of a queue depending on time  of day, week and year. Please refer to *calendar\_conf*(5) for details on the Grid Engine calendar facility.

**Note:** Jobs can request queues with a certain calendar model via a  "-l c=*cal\_name*" option to [*qsub*(1)](/qsub/1.md).

### initial\_state

defines an initial state for the queue, either when adding the queue to the  system for the first time or on start-up of the [*sge\_execd*(8)](/sge_execd/8.md) on the host on  which the queue resides. Possible values are:

- default

  The queue is enabled when adding the queue, or is reset to the previous  status when [*sge\_execd*(8)](/sge_execd/8.md) comes up (this corresponds to the behavior in  earlier Grid Engine releases not supporting initial\_state).

- enabled

  The queue is enabled in either case. This is equivalent to a manual and  explicit '*qmod -e*' command (see [*qmod*(1)](/qmod/1.md)).

- disabled

  The queue is disabled in either case. This is equivalent to a manual and  explicit '*qmod -d*' command (see [*qmod*(1)](/qmod/1.md)).

## RESOURCE LIMITS

The first two resource limit parameters, **s\_rt** and **h\_rt**, are implemented by  Grid Engine. They define the "real time" (also called "elapsed" or  "wall clock" time) passed since the start of the job. If **h\_rt** is exceeded by a job running in the queue, it is aborted via the SIGKILL signal (see [*kill*(1)](/kill/1.md)). If **s\_rt** is exceeded, the job is first "warned" via the SIGUSR1 signal (which can be caught by the job) and finally aborted after the notification time  defined in the queue configuration parameter **notify** (see above) has passed. In cases when **s\_rt** is used in combination with job  notification it might be necessary to configure a signal other than SIGUSR1  using the NOTIFY\_KILL and NOTIFY\_SUSP execd\_params (see  [*sge\_conf*(5)](/sge_conf/5.md)) so that the jobs' signal-catching mechanism can differ in each case and react accordingly.

The resource limit parameters **s\_cpu** and **h\_cpu** are implemented by Grid Engine as a job limit. They  impose a limit on the amount of combined CPU time consumed by all the processes in the job.  If **h\_cpu** is exceeded by a job running in the queue, it is aborted via a SIGKILL signal (see  [*kill*(1)](/kill/1.md)). If **s\_cpu** is exceeded, the job is sent a SIGXCPU signal which can be caught by the job.   If you wish to allow a job to be "warned" so it can exit gracefully before it is killed, then you  should set the **s\_cpu** limit to a lower value than **h\_cpu**. For parallel processes, the limit is  applied per slot, which means that the limit is multiplied by the number of slots being used by  the job before being applied.

The resource limit parameters **s\_vmem** and **h\_vmem** are implemented by Grid Engine as a job limit.  They impose a limit on the amount of combined virtual memory consumed by all the processes  in the job. If **h\_vmem** is exceeded by a job running in the queue, it is aborted via a  SIGKILL signal (see [kill(1)](/kill/1.md)).  If **s\_vmem** is exceeded, the job is sent a SIGXCPU signal which  can be caught by the job.  If you wish to allow a job to be "warned" so it can exit gracefully  before it is killed, then you should set the **s\_vmem** limit to a lower value than **h\_vmem**. For parallel processes, the limit is  applied per slot which means that the limit is multiplied by the number of slots being used by  the job before being applied.

The remaining parameters in the queue configuration template specify per-job soft and hard resource limits as implemented by the [*setrlimit*(2)](/setrlimit/2.md) system call. See this manual page on your system for more information. By default, each limit field is set to infinity (which means RLIM\_INFINITY as described in the [*setrlimit*(2)](/setrlimit/2.md) manual page). The value type for the CPU-time limits **s\_cpu** and **h\_cpu** is time. The value type for the other limits is memory. **Note:** Not all systems support [*setrlimit*(2)](/setrlimit/2.md).

**Note also:** s\_vmem and h\_vmem (virtual memory) are only available on systems supporting RLIMIT\_VMEM (see [*setrlimit*(2)](/setrlimit/2.md) on your operating system).

## SECURITY

See *sge\_conf*(1) for security considerations when specifying **prolog** and **epilog** with a *user***@** prefix.

## SEE ALSO

[*sge\_intro*(1)](/sge_intro/1.md), *sge\_intro\_types*(1), [*csh*(1)](/csh/1.md), [*qconf*(1)](/qconf/1.md), [*qmon*(1)](/qmon/1.md), *qrestart*(1), [*qstat*(1)](/qstat/1.md), [*qsub*(1)](/qsub/1.md), [*sh*(1)](/sh/1.md), [*nice*(2)](/nice/2.md), [*setrlimit*(2)](/setrlimit/2.md), *access\_list*(5), *calendar\_conf*(5), [*sge\_conf*(5)](/sge_conf/5.md), [*complex*(5)](/complex/5.md), *host\_conf*(5), *sched\_conf*(5), [*sge\_execd*(8)](/sge_execd/8.md), [*sge\_qmaster*(8)](/sge_qmaster/8.md), [*sge\_shepherd*(8)](/sge_shepherd/8.md).

## COPYRIGHT

See [*sge\_intro*(1)](/sge_intro/1.md) for a full statement of rights and permissions.
