Time-Variant Taskers
Time-variant taskers resources can be configured using Tcl. Any
procedure can be defined in the namespace VovResources
and then used to
compute the resource list.
If the first characters in the argument for the option -r is the
sequence VovResources::
, then the taskers
resources are computed by executing the argument as a Tcl command.
For a list of predefined procedures, refer to Predefined VovResources::Procedures.
A special case of a resource is the local disk space on a host, which varies according to the files stored there. There may be jobs that require a minimum amount of space to run successfully. The vovtasker implements vtk_fs_stat (see vtk_fs) to handle such requirements. An example is provided further below.
An alternative is to use load sensor. However, in the case of free disk space, vtk_fs_stat is recommended because it is more efficient.
namespace eval VovResources {
proc Night { args } {
# Return the standard resources during the night and suspend the tasker
# during the day. During the night, the tasker progressively reduces the
# maximum length of the jobs it accept.
set NIGHT_RESOURCES "@STD@ $args"
set EVENING_START 19
set MORNING_END 6
set HH [clock format [clock seconds] -format "%H"]
regsub {^0} $HH "" HH; # Strip leading 0.
if { $HH >= $MORNING_END && $HH < $EVENING_START } {
# -- During the day, suspend the tasker.
vtk_tasker_set_timeleft 0
} else {
# -- During the night, compute the time left.
set hoursLeft [expr $MORNING_END - $HH]
set hoursLeft [expr $hoursLeft >= 0 ? $hoursLeft : $hoursLeft + 24]
set timeleft [expr $hoursLeft * 3600]
vtk_tasker_set_timeleft $timeleft
}
return $NIGHT_RESOURCES
}
}
% vovtasker -r "VovResources::Night hspice"
- Every minute, or at the interval that was selected with the option -U
- After the completion of each job.
The standard procedures are defined in the script $VOVDIR/etc/tasker_scripts/taskerRes.tcl. It is recommended to review these procedures before implementing your own procedures in $VOVDIR/local/taskerRes.tcl.
Free Disk Space
WORK
and
SCRATCH
; the values of these resources will be the amount of
disk space in MB on the corresponding filesystem.
namespace eval VovResources {
proc FsCheck { args } {
# Usage:
# VovResources::FsCheck -fs WORK /work -fs SCRATCH /scratch -r @STD@ -r xx
#
set resources {}
while { $args != {} } {
set arg [shift args]
switch -- $arg {
"-fs" {
set name [shift args]
set dir [shift args]
set space [vtk_fs_stat $dir]
lappend resources "$name#$space"
}
"-r" {
lappend resources [shift args]
}
}
}
return [join $resources]
}
}
% vovtasker -r "VovResources::FsCheck WORK /work"