build.xml | Build file |
plus.jar | Scheduler JAR file (Create after building) |
bin/ | |
plus_scheduler | Startup script for this scheduler |
plus_schedkill | Termination script for this scheduler |
plus_reserve | Script for making reservations |
plus_modify | Script for changing reservations |
plus_cancel | Script for canceling reservations |
plus_destroy | Script for discarding reservations |
plus_availnodes | Script for confirming the number of nodes available for reservations |
plus_commit | Reservation transaction confirmation script |
plus_abort | Reservation transaction discarding script |
plus_status |
Script for show current
reservation status |
plus_account |
Script for report and account
for PluS reservation usage |
sge_plus.in |
Template of sge_plus |
sge_plus |
Script for start/stop PluS,
using at /etc/init.d on Linux system (Created when building) |
build/ | Working directory for package build (Created when building) |
src/jp/aist/gtrc/plus/ | |
command/ | Reservation management command related source (Java) |
scheduler/ | Scheduler related source (Java, partially C language and shell scripts) |
reserve/ | Reservation management mechanism related source (Java) |
doc/ | |
html/manual.html | User Manual (in English), this file. |
db4o.lilcense.txt | GPLv2 license file (for db4objects) |
Apache.license.txt | Apache license file (for log4j) |
condor.license.txt |
Condor license file (for
classad.jar) |
pbs/TorqueProtocol.txt | TORQUE (PBS) protocol description (in Japanese, UTF-8) |
sge/gdi-manual.txt | GDI (Gridengine Database Interface) API description (in
Japanese, UTF-8) |
sge/XMLsample.txt | XML output example of SGE data by sge_operatord |
lib/ | |
db4o-5.?-java5.jar | db4objects ver 5.? library for Java 5.0. See http://www.db4o.com/ |
log4j-1.2.13.jar | Apache Log4j library. See http://logging.apache.org/ |
classad.jar |
ClassAd library from Condor. See
http://www.cs.wisc.edu/condor/classad/ |
conf/ |
|
log4j.properties |
template configuration of log4j |
reservable.ad.sample* |
sample file of reservable.ad,
see here. |
sched_conf.sample |
sample file of sched_conf, see here. |
startTime |
endTime |
days |
viewing duration |
none |
none |
none |
all reservations |
none |
none |
D |
in [now - D days, now] |
none |
E |
none |
all reservations ended
before E |
none |
E |
D |
in [E - D days, E] |
S |
none |
none |
all reservations started
after S |
S |
none |
D |
in [S, S + D days] |
S |
E |
none |
in [S, E] |
S |
E |
D |
Error: endTime and days
cannot specify at same time |
# Scheduler Config
file SAMPLE # NodeSortKey can specify # NodeName, LowestLoadAverage, LongestIdleTime, LargestPhysicalMemory # JobSortKey can specify # JobPriority, # LeastCPURequested, MostCPURequested, # LeastNodeRequested, MostNodeRequested, # LeastTimeRequested, MostTimeRequested, # QueuePriority, QueueRoundRobin, ByQueue, # OwnersName, OwnersGroup, OwnersHost # OwnersXxx needs to specify XxxsOrder. # # SortKey: 1st sort key, 2nd sort key, ... NodeSortKey: LowestLoadAverage, LongestIdleTime JobSortKey: QueuePriority, JobPriority # # OrderType: primary job owner(group/host/domain), 2nd, ... OwnersOrder: studentA,studentB GroupsOrder: professors, doctors, masters HostsOrder: apgrid.org, hpcc.org |
rr |
bq |
sq |
sf |
JobSortKey specification with
PluS |
F |
F |
F |
F |
JobPriority (Queue is not
specified) |
F |
F |
F |
T |
SubmitTime (Queue is not
specified) |
F |
F |
T |
F |
QueuePriority, JobPriority |
F |
F |
T |
T |
QueuePriority, SubmitTime |
F |
T |
F |
F |
ByQueue, JobPriority |
F |
T |
F |
T |
ByQueue, SubmitTime |
F |
T |
T |
F |
QueuePriority, ByQueue,
JobPriority (default) |
F |
T |
T |
T |
QueuePriority, ByQueue,
SubmitTime |
T |
F |
F |
F |
QueueRoundRobin, JobPriority |
T |
F |
F |
T |
QueueRoundRobin, SubmitTime |
T |
F |
T |
F |
QueuePriority, QueueRoundRobin,
JobPriority |
T |
F |
T |
T |
QueuePriority, QueueRoundRobin,
SubmitTime |
T |
T |
F |
F |
rr and bq must not be specified
at the same time |
T |
T |
F |
T |
same as above |
T |
T |
T |
F |
same as above |
T |
T |
T |
T |
same as above |
[ UnusableNodes = { "unusableA", "unusableB" }; PLUS_NODE_RESERVABLE = (PLUS_CANDIDATE_NODE.nRunJobs == 0 && PLUS_CANDIDATE_NODE.isAlive && PLUS_CANDIDATE_NODE.loadavg <= 0.3 && !member(PLUS_CANDIDATE_NODE.name, UnusableNodes)); ] |
[ MaxPeriod = relTime("00:30:00"); MinPeriod = relTime("02:00:00"); LimitPeriod = relTime("7d"); MaxReserveDuration = relTime("2d"); VIPs = { "userA", "userB", "userC" }; Users = { "userX" }; VIPRatio = 100.0; UsersMaxRatio = 90.0; UsersMinRatio = 50.0; OthersMaxRatio = 50.0; OthersMinRatio = 30.0; MaxRatio = member(PLUS_RSV_OWNER, Users) ? UsersMaxRatio : OthersMaxRatio; MinRatio = member(PLUS_RSV_OWNER, Users) ? UsersMinRatio : OthersMinRatio; now = absTime(time()); prev = PLUS_RSV_START - now; duration = PLUS_RSV_END - PLUS_RSV_START; ratioFunc = linear(prev, MaxPeriod, MaxRatio, MinPeriod, MinRatio); rsvRatio = (prev <= relTime("0") || LimitPeriod <= prev || duration >= MaxReserveDuration) ? 0 : member(PLUS_RSV_OWNER, VIPs) ? VIPRatio : (prev <= MaxPeriod) ? MaxRatio : (prev >= MinPeriod) ? MinRatio : ratioFunc; nAllocate = size(PLUS_ALLOCATED_NODES) + 1; nAllocatable = size(PLUS_ALL_NODES) * 0.01 * rsvRatio; PLUS_NODE_RESERVABLE = (nAllocate <= nAllocatable); ] |
[ UtilCheckPeriod = relTime("7d"); MaxReserveCount = 100; MaxReserveDuration = relTime("2d"); MaxReserveHourNode = 1000.0; now = absTime(time()); util = plus_rsvutil(PLUS_RSV_OWNER, now - UtilCheckPeriod, now + UtilCheckPeriod); PLUS_NODE_RESERVABLE = ((util[0] <= MaxReserveCount) && (util[1] <= MaxReserveDuration) && (util[2] <= MaxReserveHourNode)); ] |
[ Proj1Users = { "userA", "userB" }; Proj1Nodes = { "node1", "node2" }; Proj2Users = { "userA", "userC" }; Proj2Nodes = { "node3", "node4" }; avail1 = member(PLUS_RSV_OWNER, Proj1Users) ? member(PLUS_CANDIDATE_NODE.name, Proj1Nodes) : false; avail2 = member(PLUS_RSV_OWNER, Proj2Users) ? member(PLUS_CANDIDATE_NODE.name, Proj2Nodes) : false; PLUS_NODE_RESERVABLE = (avail1 || avail2); ] |