build.xml | Build file for Java 1.6.x (JAXB is internal library of Java). |
build-for-Java15.xml | Build file for Java 1.5.x (JAXB is external library). |
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 |
plus_simplefifo | Startup script for simple fifo scheduler (only supports job scheduling, not reservation). |
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.license.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. |
% tar zxf ge-V61u3_TAG-src.tar.gz % cd gridengine % patch -p1 < .../sge-V61u3-plus.patch |
% cd source % ./aimk -only-depend % scripts/zerodepend % ./aimk depend % ./aimk -only-core -no-secure |
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); ] |
status_type_name |
description |
almost same command |
server |
admin hosts |
qconf -sh |
submithost |
submit hosts |
qconf -ss |
node |
exec node names |
qhost |
queue |
queues |
qconf -sql |
job |
jobs |
qstat |
complex |
resource definitions |
qconf -sc |
pe |
Parallel environments |
qconf -spl |
sched_conf |
SGE scheduler configuraion |
qconf -ssconf |
user |
user list |
qconf -suserl |
userset |
userset list |
qconf -sul |
project |
project list |
qconf -sprjl |
sharetree |
sharetree information |
qconf -sstree |
calendar |
calendar information |
qconf -scall |
hgroup |
host group list |
qconf -shgrpl |
% sge_operatord 16000 & % telnet localhost 16000 GetStatus queue <?xml version='1.0'?> <queue_list xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <CQUEUE:> <CQ_name>all.q</CQ_name> <CQ_hostlist> <element> <HR_name>@allhosts</HR_name> </element> </CQ_hostlist> <CQ_qinstances> <QINSTANCE:all.q/> <QU_qhostname>host00.example.com</QU_qhostname> <QU_qname>all.q</QU_qname> <QU_full_name>all.q@host00.example.com</QU_full_name> .... <QU_version>3</QU_version> </QINSTANCE:all.q/> .... |