Preemption Methods

A preemption method is a set of actions that are applied to the preemptable job to revoke its resources. Some methods are provided with the Accelerator software. Additional methods can be implemented by writing procedures in Tcl using the Accelerator API calls.

VovPreemptMethod can be used in the configuration file to associate a method with a resource to be revoked.

The supplied preemption methods are:
AUTOMATIC
This is the default method and means that the actual preemption method is computed on the basis of the licenses (not the grabbed resources) actually held by the preempted job.
SIGTSTP
The job's process group is signalled with the operating system TSTP signal. Many software tools will first give up their licenses, then self-suspend after receiving this signal. Verify that your tool responds as desired when using this method.

This method sends TSTP to all processes in the process tree of the job. If the job requires TSTP to be sent to only a few processes, as in the case of ModelSim, the EXT method needs to be used.

SIGTSTP+LMREMOVE
The same as above but also calls lmremove to remove all license checkouts detected for the job being preempted. This is useful for tools that use 3rd-party licenses, such as a piece of IP provided by a 3rd-party vendor, that is used in a simulation.
SUSPEND
The job's process group is signalled with the operating system STOP signal. This causes it to be inactive until it is resumed by the operating system CONT signal.
SUSPEND+LMREMOVE
Like SIGTSTP+LMREMOVE, but uses the STOP signal instead of TSTP.
STOP
The job is dequeued or stopped, and rescheduled. Mainly used with jobs that have only been running a short time.
EXT
This method uses an EXTernal script to send a specified list of signals to one or more of the processes in the job. This method is used, for example, to preempt ModelSim jobs.
EVENTS-ONLY
The EVENTS-ONLY method does not actually preform any preemption but only issues preemption events. This method can be useful for those users that wish to perform specific preemptions themselves using custom scripts.
Custom preemption methods can be created as well (see the next section on preemption plans). To list all preemption methods, along with their respective plans, use the following command:
% nc cmd vovshow -preemptmethods
 1 SIGTSTP+LMREMOVE     *:RETRACING:SIGTSTP 5:WAIT:SUSPEND 10:SUSPENDED:LMREMOVE 20:LMREMOVED:DONE
 2 SUSPEND              *:*:SUSPEND
 3 SIGTSTP+SUSPEND      *:RETRACING:SIGTSTP 5:WAIT:SUSPEND
 4 SIGTSTP              *:*:TSTP
 5 KILL+RESUBMIT        0:*:KILL 10:WITHDRAWN:RESUBMIT
 6 LMREMOVE             *:*:SUSPEND 10:SUSPENDED:LMREMOVE 20:LMREMOVED:DONE
 7 AUTOMATIC            *:*:*
 8 JOBHANDLER           0:*:EXT,SIGTSTP,tclsh* 5:SUSPENDED:NOLMREMOVE

Select the Preemption Method

There are a few methods to specify the preemption method:
  • If the job uses SmartSuspend, then the property SSR_STATUS_PATH exists on the job and the method SMARTSUSPEND will be used.
  • Set the property VOVPREEMPT_METHOD on the job. For example:
    % nc run -P VOVPREEMPT_METHOD=LMREMOVE -r License:abc -- myscript mychip.x
  • Set the property VOVPREEMPT_METHOD on the jobclass. This can be set using the procedure vtk_jobclass_set_preemption_method, as in this example:
    # This could be in vovpreemptd/config.tcl
    vtk_jobclass_set_preemption_method hsim_lo STOP
  • Assign a preemption method to each resource map, using the procedure VovPreemptMethod in the file vnc.swd/vovpreemptd/config.tcl.

The procedure VovPreemptMethod is used to specify which method to use for each resource this is used by the preempted job.

LMREMOVE

While the method LMREMOVE works well with a majority of licenses, some licenses are harder to get and this procedure allows specifying how this should be done.

For example, some tools react to the SIGTSTP signal, but it can only be sent to a specific process in the process tree. ModelSim is one such tool, which wants the SIGTSTP signal to be delivered only to the vish process.
VovPreemptMethod License:msimhdlsim  EXT -signal TSTP -include vish
The following statement is useful for the Cadence tokens. In this example, to recover the resource License:simtoken, presumably derived from the FlexNet Publisher feature Virtuoso_MultiMode_Simulator, the EXT method (external) and sending the signal SIGTSTP are required, but only for the processes either spectre or ultrasim:
VovPreemptMethod License:simtoken EXT -signal TSTP -include "spectre ultrasim"
The following example is for Incisive_Enterprise_Simulator:
VovPreemptMethod License:Incisive_Enterprise_Simulator EXT -signal TSTP -include "ncsim ncvlog_main"

vovpreemptmethod

Specify which method to use for each resource this is used by the preempted job.

Usage: VovPreemptMethod resourcemap methods [OPTIONS]

WHERE: methods -- A list of one or more of 
                  EXT SUSPEND MODELSIM LMREMOVE SIGTSTP JOBHANDLER
        
OPTIONS:
    -signal <SIGNAME>     -- TSTP, USR1, USR2, ...
    -include patternList  -- Only send signal to processes that match one of
                             the pattern in the list
    -exclude patternList  -- Do not send signal to processes that match one of
                             the pattern in the list
    -process patternList  -- Synonym for -include. 
        
EXAMPLES:
        VovPreemptMethod License:msimhdlsim      EXT      
            -signal TSTP -include vish
        VovPreemptMethod License:Virtuoso_Multi_mode_Simulation   EXT  
             -signal TSTP -include "spectre ultrasim"
        VovPreemptMethod License:Virtuoso_Multi_mode_Simulation   EXT  
             -signal TSTP -include "spectre* *ultra*"
        VovPreemptMethod License:DesignCompiler  LMREMOVE