Preemption Timing

The preemption subsystem has a complex behavior, controlled by many delays that are described in this section.

Preemption Cycle

A preempt cycle is set within the policy.tcl server configuration file. The unit is in seconds. The default value 3 seconds,

No Preemption After Resumption

Job resumption is supported by the property PREEMPTRESUME. In VovPreemptRule, this function is supported by -skipresumedjob TIMESPEC. The default value is 2 minutes.

Job Too Young to Preempt

This delay depends on the resource. This function is represented by the variable PREEMPT($resmap,delay). The option is -delay in VovPreemptPolicy. The default value is 5 seconds.

Minimum Bucket Age to Trigger Preemption

Each preempting job is waiting in the queue and therefore belongs to a bucket. The age of the bucket depends on the time of the last dispatch of a job from that bucket, or the bucket creation, whichever is younger.
Note: If the age of the bucket is less than this minimum age, the preemption is not triggered. This is represented by PRULES($rule,bucketage), controlled by the option -bucketage in VovPreemptRule. The default value is zero; there is no minimum age for firing the rule.

Resource Reservation Time

When the resource is reserved for the preempting job, the preempting method used is RESERVE. With preemption rules, this reservation time is represented by PRULES($rule,reservetime), which is controlled by the option -reservetime in VovPreemptRule. The default value is 30 seconds.

Too Early to try lmremove

If the age of a checkout assigned to a job is less than 2 minutes. This is hard coded.

Do not Preempt a Resumed Job

If a job has just been resumed, it is recommended to not allow the job to immediately be preempted. Instead, allow the job time to settle and give Accelerator time to figure out which licenses the job is using. This preempt method is represented by PRULES($rule,skipresumedjob), which can be set with option -skipresumedjob TIMESPEC in VovPreemptRule

The default value is 2 minutes.

Kill Instead of Suspend a Job

If a job is younger than a certain age, we prefer killing and resubmitting it rather than suspending and resuming it. This is represented by PRULES($rule,killage) and is controlled by the -killage option in VovPreemptRule.

The default value is 2 minutes. A value of zero disables the killing.

Do not Disturb a Top Job

If a job successfully triggered a preemption, you do not want that job to be bothered for some time. This is represented by PRULES($rule,donotdisturb), which is controlled by the option -donotdisturb in VovPreemptRule.

The default value is 10 minutes.

Safe Job Control Timeout

This is the time preemption waits for the signals to have effect. Typically the signals have immediate effects. However it has been noticed that SIGTSTP may take many seconds to take effect. This is represented by the variable vovpreempt(timeout,safejobcontrol). The default value is 30s. The valid range is between 1s and 2m, and it is silently enforced.

Failed Preemption, Job-to-Watch Timeout

If a job cannot be preempted, it is put into a "jobs-to-watch" list for the time specified by vovpreempt(timeout,jobstowatch). The default value is 30m.