package mdb; # Machine database use strict; sub check (); # TODO: # add entry for email address # use "nice -19" for local submissions # add default values? e.g. "--procs=1". dangerous if accidentally # omitted. # add "unset" values? e.g. for wall time if it is not needed. (it # needs to be checked whether it is really not needed.) # call qstat with a custom format or with -f to extract information # more reliably # add "queues" entry containing a list of all queues. add additional # information about possibly different node count and wall time # limits. # Similar entries: # Bluedawg (LaTech): Ducky (Tulane), LaCumba (Southern), Neptune # (UNO), Zeke (ULL); Pelican (LSU) # Eric (LSU): Louie (Tulane), Oliver (ULL), Painter (LA Tech), # Poseidon (UNO); Queen Bee (LONI), Tezpur (LSU) # Intrepid: Surveyor # numrel workstations my $regexp_identifier = '^[[:alnum:]+-_]+$'; my $regexp_url = '.+'; my $regexp_email = '.+'; my $regexp_hostname = '.+'; my $regexp_dir = '[^/]$'; # must not end in slash my $regexp_file = '[^/]$'; # must not end in slash my $regexp_thorns = '.+'; my $regexp_time = '^[[:digit:]]+:[[:digit:]]+:[[:digit:]]+$'; my $regexp_regexp = '.+'; # Entry description description our @description_description_entries = ( 'necessity', 'type', 'pattern', 'default', 'example', 'description', 'section', ); our $description_description = { 'necessity' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => '^(required|optional)$', 'example' => 'required', 'description' => 'Whether entry needs to be present', 'section' => 'machine'}, 'type' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => '^(string|double|int|any)$', 'example' => 'string', 'description' => 'Entry type', 'section' => 'machine'}, 'pattern' => { # A pattern may only be present if the type is 'string'. 'necessity' => 'optional', 'type' => 'string', 'pattern' => $regexp_regexp, 'example' => 'required', 'description' => 'Regular expression that needs to match string entries', 'section' => 'machine'}, 'default' => { # The default may only be present if necessity is 'optional'. # The default must have the type 'type', and must match the # pattern 'pattern' if present. 'necessity' => 'optional', 'type' => 'any', 'example' => 42, 'description' => 'Default value', 'section' => 'machine'}, 'example' => { # The example must have the type 'type', and must match the # pattern 'pattern' if present. 'necessity' => 'required', 'type' => 'any', 'example' => 42, 'description' => 'Example value', 'section' => 'human'}, 'description' => { 'necessity' => 'required', 'type' => 'string', 'example' => 'Comment', 'description' => 'Description', 'section' => 'human'}, 'section' => { 'necessity' => 'required', 'type' => 'string', 'example' => '', 'description' => 'Section to which this entry belongs', 'section' => 'human'}, }; # Entry description # An entry has really four separate sections: a general machine # description, access, source management, and simulation control. # These four sections can be present or absent independently; e.g. an # I/O machine would not support simulation control, or a local machine # (user's laptop) would not need to describe access. This is not yet # possible in our database format, hence one should use fake entries # (e.g. /bin/false) for unsupported required entries. # Sorted array of all mdb description entries our @mdb_description_entries = ( # Machine description 'nickname', 'name', 'location', 'description', 'webpage', 'status', # Access to this machine 'user', 'email', 'hostname', 'iomachine', 'trampoline', 'rsynccmd', 'rsyncopts', 'sshcmd', 'sshopts', 'localsshsetup', 'sshsetup', 'aliaspattern', # Source tree management 'sourcebasedir', 'optionlist', 'scriptfile', 'thornlist', 'disabled-thorns', 'make', # Simulation management 'basedir', 'quota', 'cpu', 'cpufreq', 'flop/cycle', 'ppn', 'spn', 'mpn', 'max-num-threads', 'num-threads', 'memory', 'nodes', 'min-ppn', 'allocation', 'queue', 'maxwalltime', 'maxqueueslots', 'submit', 'run', 'run2', 'getstatus', 'stop', 'submitpattern', 'statuspattern', 'queuedpattern', 'runningpattern', 'scratchdir', 'exechost', 'exechostpattern', 'stdout', 'stderr', 'stdout-follow', ); our $mdb_description = { # Machine description 'nickname' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_identifier, 'example' => 'queenbee', 'description' => 'Short nickname of the machine, should be a single identifier', 'section' => 'machine'}, 'name' => { 'necessity' => 'required', 'type' => 'string', 'example' => 'Queen Bee', 'description' => 'Full name of the machine', 'section' => 'machine'}, 'location' => { 'necessity' => 'required', 'type' => 'string', 'example' => 'LONI', 'description' => 'Geographical location of the machine', 'section' => 'machine'}, 'description' => { 'necessity' => 'required', 'type' => 'string', 'example' => 'The large LONI Linux cluster', 'description' => 'Description of the machine', 'section' => 'machine'}, 'webpage' => { 'necessity' => 'optional', 'type' => 'string', 'example' => 'http://www.loni.org/systems/system.php?system=QueenBee', 'description' => 'Url of a web page with more detailed information about this machine', 'section' => 'machine'}, 'status' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => '^(personal|experimental|production|storage|outdated|trampoline)$', 'example' => 'production', 'description' => 'Should be one of: personal: belongs to someone, use only with permission experimental: may not work properly production: should work out of the box storage: used only for storing data outdated: do not use it any more trampoline: only used for tunneling', 'section' => 'machine'}, # Access to this machine 'user' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_identifier, 'example' => 'somebody', 'description' => 'User name (login id)', 'section' => 'access'}, 'email' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_email, 'example' => 'somebody@nowhere', 'description' => 'User\'s email address', 'section' => 'access'}, 'hostname' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_hostname, 'example' => 'somehost.nowhere', 'description' => 'Machine\'s host name under which it can be accessed from the outside', 'section' => 'access'}, 'iomachine' => { 'necessity' => 'optional', 'type' => 'string', 'pattern' => $regexp_hostname, 'example' => 'io.nowhere', 'description' => 'Host name of a machine which can access the machine\'s file system faster', 'section' => 'access'}, 'trampoline' => { 'necessity' => 'optional', 'type' => 'string', 'pattern' => $regexp_hostname, 'example' => 'trampoline.nowhere', 'description' => 'Host name of an intermediate machine which needs to be used to access this machine (if it is not directly accessible from the outside)', 'section' => 'access'}, 'rsynccmd' => { 'necessity' => 'optional', 'type' => 'string', 'default' => 'rsync', 'example' => '/home/somebody/rsync', 'description' => 'Location of rsync executable on this machine (e.g. "/opt/local/bin/rsync")', 'section' => 'access'}, 'rsyncopts' => { 'necessity' => 'optional', 'type' => 'string', 'default' => '', 'example' => '-c', 'description' => 'rsync options necessary for transferring to this machine', 'section' => 'access'}, 'sshcmd' => { 'necessity' => 'optional', 'type' => 'string', 'default' => 'ssh', 'example' => 'gsissh', 'description' => 'Method for accessing this machine (e.g. ssh, gsissh)', 'section' => 'access'}, 'sshopts' => { 'necessity' => 'optional', 'type' => 'string', 'default' => '', 'example' => '-p 2222', 'description' => 'ssh options necessary for accessing this machine', 'section' => 'access'}, 'localsshsetup' => { 'necessity' => 'optional', 'type' => 'string', 'default' => ':', 'example' => 'test $(grid-proxy-info -timeleft 2> /dev/null) -gt 0 2> /dev/null || grid-proxy-init', 'description' => 'Local commands that need to be executed before calling ssh to access this machine', 'section' => 'access'}, 'sshsetup' => { 'necessity' => 'optional', 'type' => 'string', 'default' => ':', 'example' => 'source /etc/profile', 'description' => 'Commands that need to be executed after logging in to this machine', 'section' => 'access'}, 'aliaspattern' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_regexp, 'example' => '^qb[0-9](\.loni\.org)?$', 'description' => 'Regular expression that matches the host name as seen on this machine', 'section' => 'access'}, # Source tree management 'sourcebasedir' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_dir, 'example' => '/home/@USER@', 'description' => 'Base path where source trees should be stored (should be persistent file system, does not need to be visible to compute nodes)', 'section' => 'source'}, 'optionlist' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_file, 'example' => 'queenbee-mvapich2.cfg', 'description' => 'Option list file name', 'section' => 'source'}, 'scriptfile' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_file, 'example' => 'queenbee-mvapich2.sh', 'description' => 'Script file name', 'section' => 'source'}, 'thornlist' => { 'necessity' => 'optional', 'type' => 'string', 'pattern' => $regexp_file, 'example' => 'queenbee-mvapich2.th', 'description' => 'Thorn list file name', 'section' => 'source'}, 'disabled-thorns' => { 'necessity' => 'optional', 'type' => 'string', 'pattern' => $regexp_thorns, 'example' => 'CactusTest/TestAllTypes', 'description' => 'Space separated list of thorn names', 'section' => 'source'}, 'make' => { 'necessity' => 'optional', 'type' => 'string', 'pattern' => $regexp_file, 'default' => 'make', 'example' => 'gmake', 'description' => 'GNU compatible make command', 'section' => 'source'}, # Simulation management 'basedir' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_dir, 'example' => '/scratch/@USER@/simulations', 'description' => 'Base path where simulation results should be stored (should be large, efficient file system visible to both front end and compute nodes)', 'section' => 'simulation'}, 'quota' => { 'necessity' => 'optional', 'type' => 'double', 'example' => 10.0, 'description' => 'available disk space in GB', 'section' => 'simulation'}, 'cpu' => { 'necessity' => 'optional', 'type' => 'string', 'example' => 'Intel(R) Xeon(R) CPU (Nehalem)', 'description' => 'CPU type as string', 'section' => 'simulation'}, 'cpufreq' => { 'necessity' => 'optional', 'type' => 'double', 'example' => 2.33, 'description' => 'CPU frequency in GHz', 'section' => 'simulation'}, 'flop/cycle' => { 'necessity' => 'optional', 'type' => 'double', 'example' => 4.0, 'description' => 'flop per cycle of each core', 'section' => 'simulation'}, 'ppn' => { 'necessity' => 'required', 'type' => 'int', 'example' => 8, 'description' => 'processors per node', 'section' => 'simulation'}, 'spn' => { 'necessity' => 'optional', 'type' => 'int', 'example' => 2, 'description' => 'sockets per node', 'section' => 'simulation'}, 'mpn' => { 'necessity' => 'optional', 'type' => 'int', 'example' => 1, 'description' => 'memory banks per node', 'section' => 'simulation'}, 'max-num-threads' => { 'necessity' => 'optional', 'type' => 'int', 'example' => 8, 'description' => 'maximum number of threads per process', 'section' => 'simulation'}, 'num-threads' => { 'necessity' => 'optional', 'type' => 'int', 'example' => 8, 'description' => 'suggested threads per process', 'section' => 'simulation'}, 'memory' => { 'necessity' => 'optional', 'type' => 'double', 'example' => 8192.0, 'description' => 'memory per node in MB', 'section' => 'simulation'}, 'nodes' => { 'necessity' => 'required', 'type' => 'int', 'example' => 256, 'description' => 'number of nodes', 'section' => 'simulation'}, 'min-ppn' => { 'necessity' => 'optional', 'type' => 'int', 'example' => 8, 'description' => 'minimum allowed ppn', 'section' => 'simulation'}, 'allocation' => { 'necessity' => 'optional', 'type' => 'string', 'example' => 'NoSuchAllocation', 'description' => 'Allocation id', 'section' => 'simulation'}, 'queue' => { 'necessity' => 'optional', 'type' => 'string', 'example' => 'NoSuchQueue', 'description' => 'Queue name', 'section' => 'simulation'}, 'maxwalltime' => { 'necessity' => 'optional', 'type' => 'string', 'pattern' => $regexp_time, 'example' => '48:00:00', 'description' => 'Run time limit (HH:MM:SS)', 'section' => 'simulation'}, 'maxqueueslots' => { 'necessity' => 'optional', 'type' => 'int', 'example' => 50, 'description' => 'Maximum allowed number of slots in queue per user', 'section' => 'simulation'}, 'submit' => { 'necessity' => 'required', 'type' => 'string', 'example' => 'qsub @SCRIPTFILE@', 'description' => 'Job submission command', 'section' => 'simulation'}, 'run' => { 'necessity' => 'optional', # TODO: should become required 'type' => 'string', 'example' => '/bin/env OMP_NUM_THREADS=@NUM_THREADS@ openmpirun -np @NUM_PROCS@', 'description' => 'Run the executable', 'section' => 'simulation'}, 'run2' => { 'necessity' => 'optional', 'type' => 'string', 'example' => 'nice -19 @RUNDIR@/@EXECUTABLE@ $*', 'description' => 'A second command to run the executable, if necessary', 'section' => 'simulation'}, 'getstatus' => { 'necessity' => 'required', 'type' => 'string', 'example' => 'qstat @JOB_ID@', 'description' => 'Inquire job status', 'section' => 'simulation'}, 'stop' => { 'necessity' => 'required', 'type' => 'string', 'example' => 'qdel @JOB_ID@', 'description' => 'Delete job from queue', 'section' => 'simulation'}, 'submitpattern' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_regexp, 'example' => '([[:digit:]]+)', 'description' => 'Obtain job id after submission (shoud match as $1)', 'section' => 'simulation'}, 'statuspattern' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_regexp, 'example' => '^@JOB_ID@[^[:digit:]]', 'description' => 'Test whether the job is in the queue ("active")', 'section' => 'simulation'}, 'queuedpattern' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_regexp, 'example' => ' Q ', 'description' => 'Test whether an active job is queued', 'section' => 'simulation'}, 'runningpattern' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_regexp, 'example' => ' R ', 'description' => 'Test whether an active job is running', 'section' => 'simulation'}, 'scratchdir' => { 'necessity' => 'required', 'type' => 'string', 'pattern' => $regexp_dir, 'example' => '/tmp/@USER@/@JOB_ID@', 'description' => 'Scratch directory for temporary files during execution (expected to disappear after the simulation, and needs to be visible on the head node)', 'section' => 'simulation'}, 'exechost' => { 'necessity' => 'optional', 'type' => 'string', 'pattern' => $regexp_hostname, 'example' => 'qstat -f @JOB_ID@', 'description' => 'Command to find root compute node host name', 'section' => 'simulation'}, 'exechostpattern' => { 'necessity' => 'optional', 'type' => 'string', 'pattern' => $regexp_regexp, 'example' => 'exec_host = (\w+)/', 'description' => 'Obtain compute node host name (should match as $1)', 'section' => 'simulation'}, 'stdout' => { 'necessity' => 'optional', 'type' => 'string', 'example' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.qb2.OU', 'description' => 'Command to list stdout of a running job', 'section' => 'simulation'}, 'stderr' => { 'necessity' => 'optional', 'type' => 'string', 'example' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.qb2.ER', 'description' => 'Command to list stderr of a running job', 'section' => 'simulation'}, 'stdout-follow' => { 'necessity' => 'optional', 'type' => 'string', 'example' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.qb2.OU /var/spool/torque/spool/@JOB_ID@.qb2.ER', 'description' => 'Command to list and follow stdout of a running job (similar to "tail -f")', 'section' => 'simulation'}, }; # Entries for all machines, alphabetically ordered my $mdb_abe = { 'nickname' => 'abe', 'name' => 'Abe', 'location' => 'NCSA', 'description' => 'The new large Linux cluster at NCSA', 'webpage' => 'http://www.ncsa.uiuc.edu/UserInfo/Resources/Hardware/Intel64Cluster/', 'status' => 'production', # Use a particular node instead of the generic host name to try to # avoid frequent rebuilds of unchanged source code #'hostname' => 'abe.ncsa.uiuc.edu', 'hostname' => 'honest3.ncsa.uiuc.edu', 'rsynccmd' => '/u/ac/eschnett/rsync-3.0.5/bin/rsync', 'sshsetup' => 'export LM_LICENSE_FILE=1702@barbossa:1702@nani:1702@lilo:1702@stitch:1708@barbossa:1704@barbossa.ncsa.uiuc.edu', 'aliaspattern' => '^honest[34](\.ncsa\.uiuc\.edu)?$', 'sourcebasedir' => '/u/ac/@USER@', 'optionlist' => 'abe-mvapich2.cfg', 'scriptfile' => 'abe-mvapich2.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz', 'make' => 'make -j4', 'basedir' => '/u/ac/@USER@/scratch-global/simulations', 'cpu' => 'Intel 64 (Clovertown)', 'cpufreq' => 2.33, 'flop/cycle' => 4, 'ppn' => 8, 'spn' => 2, 'mpn' => 1, 'max-num-threads' => 8, 'num-threads' => 8, 'memory' => 8192, # but 600 nodes have 16 GB 'nodes' => 1200, 'min-ppn' => 8, 'allocation' => 'out', 'queue' => 'normal', 'maxwalltime' => '48:00:00', 'submit' => '/usr/local/bin/qsub @SCRIPTFILE@', 'getstatus' => '/usr/local/torque/bin/qstat @JOB_ID@', #'showstart' => '/usr/local/moab/bin/showstart @JOB_ID@', 'stop' => '/usr/local/torque/bin/qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', #'startpattern' => 'Estimated Rsv based start in\s+([0-9:]+) on ', 'scratchdir' => '/cfs/scratch/users/${USER}/${PBS_JOBID}', 'exechost' => '/usr/local/torque/bin/qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'cat /u/ac/@USER@/.pbs_spool/@JOB_ID@.abem5.OU', 'stderr' => 'cat /u/ac/@USER@/.pbs_spool/@JOB_ID@.abem5.ER', 'stdout-follow' => 'tail -n 100 -f /u/ac/@USER@/.pbs_spool/@JOB_ID@.abem5.OU /u/ac/@USER@/.pbs_spool/@JOB_ID@.abem5.ER', }; my $mdb_ac = { 'nickname' => 'ac', 'name' => 'AC', 'location' => 'NCSA', 'description' => 'NCSA\'s Accelerator Cluster', 'webpage' => 'http://www.ncsa.uiuc.edu/Projects/GPUcluster/', 'status' => 'experimental', 'hostname' => 'ac.ncsa.uiuc.edu', 'aliaspattern' => '^ac(\.ncsa\.uiuc\.edu)?$', 'sourcebasedir' => '/home/ac/@USER@', 'optionlist' => 'ac-mvapich2.cfg', 'scriptfile' => 'ac-mvapich2.sh', 'make' => 'make -j2', 'basedir' => '/home/ac/@USER@/simulations', 'cpu' => 'Dual-Core AMD Opteron(tm) Processor 2216', 'cpufreq' => 2.4, # each second CPU has only 1.0 GHz 'flop/cycle' => 4, 'ppn' => 4, 'spn' => 1, 'mpn' => 1, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 8192, 'nodes' => 32, 'min-ppn' => 4, 'queue' => 'batch', 'submit' => '/usr/local/bin/qsub @SCRIPTFILE@', 'getstatus' => '/usr/local/bin/qstat @JOB_ID@', 'stop' => '/usr/local/bin/qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/home/ac/@USER@/scratch', 'exechost' => '/usr/local/bin/qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'cat /var/torque/spool/@JOB_ID@.acm.OU', 'stderr' => 'cat /var/torque/spool/@JOB_ID@.acm.ER', 'stdout-follow' => 'tail -n 100 -f /var/torque/spool/@JOB_ID@.acm.OU /var/torque/spool/@JOB_ID@.acm.ER', }; my $mdb_athena = { 'nickname' => 'athena', 'name' => 'Athena', 'location' => 'NICS', 'description' => 'A Cray XT4 at NICS', 'webpage' => 'http://www.nics.tennessee.edu/computing-resources/athena', 'status' => 'experimental', # Only OTP access is available 'hostname' => 'athena.nics.utk.edu', 'rsynccmd' => '/nics/b/home/eschnett/rsync-3.0.3/bin/rsync', 'aliaspattern' => '^athena-pwd[12](\.nics\.utk\.edu)?$', 'sourcebasedir' => '/nics/a/proj/cactus/@USER@/xt4', 'optionlist' => 'athena.cfg', 'scriptfile' => 'athena.sh', 'make' => 'make -j2', 'basedir' => '/lustre/scratch/@USER@/simulations', 'cpu' => 'quad-core AMD Opteron ', 'cpufreq' => 2.3, 'flop/cycle' => undef, 'ppn' => 4, 'spn' => 1, 'mpn' => 1, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 4096, 'nodes' => 4510, 'min-ppn' => 4, 'queue' => 'batch', 'maxwalltime' => '48:00:00', # but: only 12h for small jobs 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)[.]nid[0-9]*', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', #'startpattern' => 'Estimated Rsv based start in\s+([0-9:]+) on ', 'scratchdir' => '/lustre/scratch/@USER@/scratch/@JOB_ID@', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'cat /var/spool/torque/mom_priv/jobs/@JOB_ID@.nid0.OU', 'stderr' => 'cat /var/spool/torque/mom_priv/jobs/@JOB_ID@.nid0.ER', 'stdout-follow' => 'tail -n 100 -f /var/spool/torque/mom_priv/jobs/@JOB_ID@.nid0.OU /var/spool/torque/mom_priv/jobs/@JOB_ID@.nid0.ER', }; my $mdb_bassi = { 'nickname' => 'bassi', 'name' => 'Bassi', 'location' => 'NERSC', 'description' => 'A P5 at NERSC', 'webpage' => 'http://www.nersc.gov/nusers/systems/bassi/', 'status' => 'outdated', 'hostname' => 'bassi.nersc.gov', 'aliaspattern' => '^b0[23]01(\.nersc\.gov)?$', #'sourcebasedir' => '/u0/s/@USER@', 'sourcebasedir' => '/project/projectdirs/m152/@USER@/bassi', 'optionlist' => 'bassi.cfg', 'scriptfile' => 'bassi.sh', 'make' => 'gmake -j8', 'basedir' => '/scratch/scratchdirs/@USER@/simulations', 'cpu' => 'Power5+', 'cpufreq' => 1.9, 'flop/cycle' => 4, 'ppn' => 8, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 8, 'num-threads' => 8, 'memory' => 32768, 'nodes' => 48, # there are 111 nodes, but not all can # be used 'min-ppn' => 8, 'allocation' => 'm152', 'queue' => 'regular', 'maxwalltime' => '36:00:00', 'submit' => 'llsubmit @SCRIPTFILE@', 'getstatus' => 'llq @JOB_ID@', 'stop' => 'llcancel @JOB_ID@', 'submitpattern' => '"(.*)"', 'statuspattern' => '^ *@JOB_ID@', 'queuedpattern' => ' I ', 'runningpattern' => ' R ', 'scratchdir' => '/scratch/scratchdirs/${USER}/${PBS_JOBID}', 'exechost' => 'false', 'exechostpattern' => '$^', 'stdout' => 'false', 'stderr' => 'false', 'stdout-follow' => 'false', }; my $mdb_bd = { 'nickname' => 'bd', 'name' => 'BlueDrop', 'location' => 'NCSA', 'description' => 'Blue Waters Power7 test system', 'webpage' => 'https://wiki.ncsa.illinois.edu/display/BWpublic/NCSA+BlueDrop', 'status' => 'experimental', 'hostname' => 'bd-login.ncsa.illinois.edu', 'aliaspattern' => '^bd-login(\.local)?$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'bd.cfg', 'scriptfile' => 'bd.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz ExternalLibraries/OpenSSL', 'make' => 'make -j16', 'basedir' => '/home/@USER@/simulations', 'cpu' => 'Power7', 'cpufreq' => 3.8, 'flop/cycle' => 8, 'ppn' => 32, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 128, 'num-threads' => 32, # unknown 'memory' => 131072, 'nodes' => 1, 'min-ppn' => 32, # ??? 'allocation' => 'NoAllocation', 'queue' => 'NoQueue', 'maxwalltime' => '30:00:00', 'submit' => 'llsubmit @SCRIPTFILE@', 'getstatus' => 'llq @JOB_ID@.0', 'stop' => 'llcancel @JOB_ID@.0', 'submitpattern' => '"bd-login\..*\.(\d*)"', 'statuspattern' => '^bd-login\..*\.@JOB_ID@\.0', 'queuedpattern' => ' I ', 'runningpattern' => ' (R|ST|H) ', 'scratchdir' => 'scratchdir', 'exechost' => 'llq -f \'%h\' @JOB_ID@.0 | tail +3 | head -1', # ??? 'exechostpattern' => '(.*)', # ??? 'stdout' => 'cat @SIMULATION_NAME@.out', # ??? 'stderr' => 'cat @SIMULATION_NAME@.err', # ??? 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', # ??? }; my $mdb_beast = { 'nickname' => 'beast', 'name' => 'Beast', 'location' => 'LITE', 'description' => 'The large SGI Altix of LITE', 'webpage' => 'http://www.lite3d.com/', 'status' => 'experimental', 'hostname' => 'beast', 'iomachine' => 'prism', 'trampoline' => 'prism', 'aliaspattern' => '^beast(\.LITE|\.louisiana\.edu)?$', 'sourcebasedir' => '/store/home/@USER@', 'optionlist' => 'beast.cfg', 'scriptfile' => 'beast.sh', 'make' => 'gmake -j8', 'basedir' => '/store/home/@USER@/simulations', 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 160, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 160, 'num-threads' => 1, # unknown 'memory' => 4194304, # 4 TB 'nodes' => 1, 'min-ppn' => 1, 'submit' => 'sh @SCRIPTFILE@ < /dev/null > /dev/null 2> /dev/null & echo $!', 'getstatus' => 'ps @JOB_ID@', 'stop' => 'kill @JOB_ID@', 'submitpattern' => '(.*)', 'statuspattern' => '^ *@JOB_ID@ ', 'queuedpattern' => '$^', # never queued 'runningpattern' => '^', # always running 'scratchdir' => 'scratchdir', 'exechost' => 'echo localhost', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_belladonna = { 'nickname' => 'belladonna', 'name' => 'Belladonna', 'location' => 'AEI', 'description' => 'The old new AEI numrel cluster', 'webpage' => 'http://supercomputers.aei.mpg.de/belladonna', 'status' => 'outdated', 'hostname' => 'belladonna.aei.mpg.de', 'aliaspattern' => '^belladonna(\.aei\.mpg\.de|\.belladonna\.admin)?$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'belladonna.cfg', 'scriptfile' => 'belladonna.sh', 'make' => 'make -j2', 'basedir' => '/data20/@USER@/simulations', 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 4, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 8192, 'nodes' => 52, 'min-ppn' => 4, 'queue' => 'default', 'maxwalltime' => '168:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/scratch/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/PBS/spool/@JOB_ID@.maste.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/PBS/spool/@JOB_ID@.maste.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/PBS/spool/@JOB_ID@.maste.OU /var/spool/PBS/spool/@JOB_ID@.maste.ER', }; my $mdb_bethe = { 'nickname' => 'bethe', 'name' => 'Bethe', 'location' => 'Caltech, Christian Ott\'s office', 'description' => 'Christian Ott\'s workstation at Caltech', 'status' => 'personal', 'hostname' => 'bethe.tapir.caltech.edu', 'aliaspattern' => '^bethe\.tapir\.caltech\.edu$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'bethe.cfg', 'scriptfile' => 'bethe.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz', 'make' => 'make -j8', 'basedir' => '/home/@USER@/simulations', 'quota' => 50, # don't use all disk space 'cpu' => 'Intel(R) Xeon(R) CPU (Nehalem)', 'cpufreq' => 2.67, 'flop/cycle' => undef, # 4 flop/cycle when running on 8 procs 'ppn' => 16, 'spn' => 2, 'mpn' => undef, 'max-num-threads' => 16, 'num-threads' => 16, 'memory' => 16384, 'nodes' => 1, 'min-ppn' => 1, 'queue' => 'n/a', 'submit' => 'sh @SCRIPTFILE@ < /dev/null > /dev/null 2> /dev/null & echo $!', 'getstatus' => 'ps @JOB_ID@', 'stop' => 'kill @JOB_ID@', 'submitpattern' => '(.*)', 'statuspattern' => '^ *@JOB_ID@ ', 'queuedpattern' => '$^', # never queued 'runningpattern' => '^', # always running 'scratchdir' => 'scratchdir', 'exechost' => 'echo localhost', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_bluedawg = { 'nickname' => 'bluedawg', 'name' => 'Bluedawg', 'location' => 'LONI, LA Tech', 'description' => 'The LONI IBM P5 at LA Tech', 'webpage' => 'http://www.loni.org/systems/system.php?system=Bluedawg', 'status' => 'production', 'hostname' => 'bluedawg.loni.org', 'rsynccmd' => '/work/default/eschnett/rsync-3.0.4/bin/rsync', 'rsyncopts' => '-c', # don't trust file time stamps 'aliaspattern' => '^(bluedawg(\.loni\.org)?|l1f1n\d\d(\.sys\.loni\.org)?)$', 'sourcebasedir' => '/work/default/@USER@', 'optionlist' => 'pelican.cfg', 'scriptfile' => 'pelican.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz ExternalLibraries/CGNS ExternalLibraries/curl LSUThorns/Twitter ExternalLibraries/flickcurl LSUThorns/Flickr ExternalLibraries/HYPRE ExternalLibraries/libjpeg CactusIO/IOJpeg ExternalLibraries/libxml2 ExternalLibraries/OpenSSL', 'make' => 'mkdir -p /work/default/@USER@/tmp && env TMPDIR=/work/default/@USER@/tmp gmake -j4', 'basedir' => '/mnt/lpfs.nfs102/@USER@/simulations', 'quota' => 20, 'cpu' => 'Power5+', 'cpufreq' => 1.9, 'flop/cycle' => 4, 'ppn' => 8, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 8, 'num-threads' => 8, # unknown 'memory' => 16384, 'nodes' => 13, 'min-ppn' => 8, 'allocation' => 'loni_numrel05', 'queue' => 'checkpt', 'maxwalltime' => '120:00:00', 'submit' => 'llsubmit @SCRIPTFILE@', 'getstatus' => 'llq @JOB_ID@', 'stop' => 'llcancel @JOB_ID@', 'submitpattern' => '"(.*)"', 'statuspattern' => '^ *@JOB_ID@', 'queuedpattern' => ' I ', 'runningpattern' => ' R ', 'scratchdir' => 'scratchdir', # unknown 'exechost' => 'llq -f \'%h\' @JOB_ID@b | tail +3 | head -1', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => '/opt/freeware/bin/tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_bp = { 'nickname' => 'bp', 'name' => 'BluePrint', 'location' => 'NCSA', 'description' => 'Blue Waters Power5+ test system', 'webpage' => 'https://bw-wiki.ncsa.uiuc.edu/display/HWandSW/Preliminary+Test+Systems', 'status' => 'experimental', 'hostname' => 'bp-login1.ncsa.uiuc.edu', 'trampoline' => 'abe', 'rsynccmd' => '/u/home/ac/eschnett/bin/rsync', # broken? 'sshsetup' => 'export PATH=/usr/apps/patch-2.6.1/bin:$PATH', 'aliaspattern' => '^bp-login[12]\.ncsa\.uiuc\.edu$|^f10n12(\.local)?$', 'sourcebasedir' => '/u/home/ac/@USER@', 'optionlist' => 'bp.cfg', 'scriptfile' => 'bp.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz ExternalLibraries/CGNS ExternalLibraries/curl LSUThorns/Twitter ExternalLibraries/flickcurl LSUThorns/Flickr ExternalLibraries/libjpeg CactusIO/IOJpeg ExternalLibraries/libxml2 ExternalLibraries/OpenSSL', 'make' => 'mkdir -p /u/home/ac/@USER@/tmp && env TMPDIR=/u/home/ac/@USER@/tmp gmake -j4', #'basedir' => '/u/home/ac/@USER@/simulations', 'basedir' => '/scr/@USER@/simulations', 'cpu' => 'Power5+', 'cpufreq' => 1.9, 'flop/cycle' => 4, 'ppn' => 16, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 16, 'num-threads' => 16, # unknown 'memory' => 65536, 'nodes' => 114, 'min-ppn' => 8, 'allocation' => 'NoAllocation', 'queue' => 'No_Class', 'maxwalltime' => '72:00:00', 'submit' => 'llsubmit @SCRIPTFILE@', 'getstatus' => 'llq @JOB_ID@.0', 'stop' => 'llcancel @JOB_ID@.0', 'submitpattern' => '"bp-login1\.local\.(.*)"', 'statuspattern' => '^bp-login1\.@JOB_ID@\.0', 'queuedpattern' => ' I ', 'runningpattern' => ' (R|ST|H) ', 'scratchdir' => 'scratchdir', # unknown 'exechost' => 'llq -f \'%h\' @JOB_ID@.0 | tail +3 | head -1', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => '/opt/freeware/bin/tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_carver = { 'nickname' => 'carver', 'name' => 'Carver', 'location' => 'NERSC', 'description' => 'IBM iDataPlex at NERSC', 'webpage' => 'http://www.nersc.gov/nusers/systems/carver/', 'status' => 'experimental', 'hostname' => 'carver.nersc.gov', 'sshsetup' => 'export LM_LICENSE_FILE=/usr/common/usg/pgi/10.0-0/../license.dat', 'aliaspattern' => '^cvrsvc\d\d(\.nersc\.gov)?$', #'sourcebasedir' => '/global/homes/s/@USER@/carver', 'sourcebasedir' => '/project/projectdirs/m152/@USER@/carver', 'optionlist' => 'carver.cfg', 'scriptfile' => 'carver.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz EinsteinAnalysis/AHFinder ExternalLibraries/CGNS ExternalLibraries/OpenSSL LSUThorns/Flickr', 'make' => 'make -j4', 'basedir' => '/global/scratch/sd/@USER@/simulations', 'cpu' => 'Intel Nehalem', 'cpufreq' => 2.67, 'flop/cycle' => 4, 'ppn' => 8, 'spn' => 2, 'mpn' => 1, # ? 'max-num-threads' => 8, 'num-threads' => 4, # ? 'memory' => 20480, 'nodes' => 64, # only 64 out of 1120 nodes can be used at a time 'min-ppn' => 8, 'allocation' => 'm152', # 'regular' is for Carver (400 nodes); there is also 'magellan' # for Magellan (720 nodes), which are not available all times 'queue' => 'regular', 'maxwalltime' => '24:00:00', 'submit' => '/usr/syscom/opt/torque/default/bin/qsub @SCRIPTFILE@', #? 'getstatus' => '/usr/syscom/opt/torque/default/bin/qstat -u @USER@ | awk \'$1 == @ #?JOB_ID@ {print $1,$5}\'', #? 'stop' => '/usr/syscom/opt/torque/default/bin/qdel @JOB_ID@', #? 'submitpattern' => '([[:digit:]]+)', #? 'statuspattern' => '^@JOB_ID@[ \t]', #? 'queuedpattern' => '^@JOB_ID@[ \t]+(qw|hqw)', #? 'runningpattern' => '^@JOB_ID@[ \t]+r', #? 'scratchdir' => '/global/scratch/sd/@USER@/scratch/${PBS_JOBID}', 'exechost' => '/usr/syscom/opt/torque/default/bin/qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'cat @RUNDIR@/@SIMULATION_NAME@.out', 'stderr' => 'cat @RUNDIR@/@SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @RUNDIR@/@SIMULATION_NAME@.out @RUNDIR@/@SIMULATION_NAME@.err', }; my $mdb_catbert = { 'nickname' => 'catbert', 'name' => 'Catbert', 'location' => 'LSU, CCT', 'description' => 'One of the numrel workstations', 'status' => 'outdated', 'hostname' => 'catbert.phys.lsu.edu', 'aliaspattern' => '^catbert(\.phys\.lsu\.edu|\.cct\.lsu\.edu)?$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'catbert-intel.cfg', 'scriptfile' => 'catbert-intel.sh', 'make' => 'make -j2', 'basedir' => '/home/@USER@/simulations', 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 2, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 2, 'num-threads' => 2, 'memory' => 8192, 'nodes' => 1, 'submit' => 'sh @SCRIPTFILE@ < /dev/null > /dev/null 2> /dev/null & echo $!', 'getstatus' => 'ps @JOB_ID@', 'stop' => 'kill @JOB_ID@', 'submitpattern' => '(.*)', 'statuspattern' => '^ *@JOB_ID@ ', 'queuedpattern' => '$^', # never queued 'runningpattern' => '^', # always running 'scratchdir' => 'scratchdir', 'exechost' => 'echo localhost', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_celeritas = { 'nickname' => 'celeritas', 'name' => 'Celeritas', 'location' => 'LSU, CCT', 'description' => 'Thomas Sterling\'s research cluster', 'status' => 'experimental', 'hostname' => 'celeritas.cct.lsu.edu', 'aliaspattern' => '^celeritas(\.cct\.lsu\.edu)?$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'celeritas.cfg', 'scriptfile' => 'celeritas.sh', 'make' => 'make -j2', 'basedir' => '/home/@USER@/simulations', 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 2, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 2, 'num-threads' => 2, 'memory' => 8192, 'nodes' => 1, 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/scratch/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh $(echo @EXECHOST@ | sed -e "s/ic/kali/") cat /var/spool/pbs/spool/@JOB_ID@.peyot.OU', 'stderr' => 'ssh $(echo @EXECHOST@ | sed -e "s/ic/kali/") cat /var/spool/pbs/spool/@JOB_ID@.peyot.ER', 'stdout-follow' => 'ssh $(echo @EXECHOST@ | sed -e "s/ic/kali/") tail -n 100 -f /var/spool/pbs/spool/@JOB_ID@.peyot.OU /var/spool/pbs/spool/@JOB_ID@.peyot.ER', }; my $mdb_cobalt = { 'nickname' => 'cobalt', 'name' => 'Cobalt', 'location' => 'NCSA', 'description' => 'A large SGI Altix at NCSA', 'webpage' => 'http://www.ncsa.uiuc.edu/UserInfo/Resources/Hardware/SGIAltix/', 'status' => 'experimental', 'hostname' => 'cobalt.ncsa.uiuc.edu', 'aliaspattern' => '^co-login1(\.ncsa\.uiuc\.edu)?$', 'sourcebasedir' => '/u/ac/@USER@', 'optionlist' => 'cobalt.cfg', 'scriptfile' => 'cobalt.sh', 'make' => 'make -j4', # front end has 12 processors 'basedir' => '/u/ac/@USER@/scratch-global/simulations', 'cpu' => 'Itanium 2', 'cpufreq' => 1.6, 'flop/cycle' => undef, 'ppn' => 512, 'spn' => 256, 'mpn' => undef, 'max-num-threads' => 512, 'num-threads' => 1, # unknown 'memory' => 4194304, # 4 TB? 'nodes' => 1, 'min-ppn' => 1, 'allocation' => 'out', 'maxwalltime' => '18:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/scratch/batch/${PBS_JOBID}', 'exechost' => 'false', 'exechostpattern' => '$^', 'stdout' => 'false', 'stderr' => 'false', 'stdout-follow' => 'false', }; my $mdb_damiana = { 'nickname' => 'damiana', 'name' => 'Damiana', 'location' => 'AEI', 'description' => 'The new AEI numrel cluster', 'webpage' => 'http://supercomputers.aei.mpg.de/damiana', 'status' => 'production', 'hostname' => 'login-damiana.aei.mpg.de', 'rsynccmd' => undef, 'aliaspattern' => '^(((login-)?damiana)|(sl-\d\d))(\.aei\.mpg\.de|\.damiana\.admin)?$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'damiana.cfg', 'scriptfile' => 'damiana.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz', 'make' => 'INTEL_LICENSE_FILE=/cluster/intel/licenses make -j4', 'basedir' => '/lustre3/AEI/@USER@/simulations', 'cpu' => 'Intel Xeon 5160 Woodcrest 4MB shared L2-Cache', 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 4, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 8192, 'nodes' => 170, 'min-ppn' => 4, 'queue' => 'intel.q', 'maxwalltime' => '24:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat -u @USER@ | awk \'$1 == @JOB_ID@ {print $1,$5}\'', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[ \t]', 'queuedpattern' => '^@JOB_ID@[ \t]+(qw|hqw)', 'runningpattern' => '^@JOB_ID@[ \t]+r', 'scratchdir' => '/tmp/${USER}/${JOB_ID}', 'exechost' => 'head -n 1 SIMFACTORY/NODES', 'exechostpattern' => '^(\S+)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_datura = { 'nickname' => 'datura', 'name' => 'Datura', 'location' => 'AEI', 'description' => 'The AEI cluster Datura', 'webpage' => 'http://supercomputers.aei.mpg.de', 'status' => 'production', 'hostname' => 'daturamon.aei.mpg.de', 'trampoline' => 'damiana', 'rsynccmd' => undef, 'aliaspattern' => '^datura\.datura\.admin$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'datura.cfg', 'scriptfile' => 'datura.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz', 'make' => 'INTEL_LICENSE_FILE=/cluster/intel/licenses make -j4', 'basedir' => '/lustre3/AEI/@USER@/simulations', 'cpu' => 'Intel Nehalem Westmere', 'cpufreq' => 2666, 'flop/cycle' => undef, 'ppn' => 12, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 12, 'num-threads' => 6, 'memory' => 24576, 'nodes' => 200, 'min-ppn' => 12, 'queue' => 'daturamon.q', 'maxwalltime' => '24:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat -u @USER@ | awk \'$1 == @JOB_ID@ {print $1,$5}\'', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[ \t]', 'queuedpattern' => '^@JOB_ID@[ \t]+(qw|hqw)', 'runningpattern' => '^@JOB_ID@[ \t]+r', 'scratchdir' => '/tmp/${USER}/${JOB_ID}', 'exechost' => 'head -n 1 SIMFACTORY/NODES', 'exechostpattern' => '^(\S+)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_damiana2 = { 'nickname' => 'damiana2', 'name' => 'Damiana', 'location' => 'AEI', 'description' => 'The new AEI numrel cluster', 'webpage' => 'http://supercomputers.aei.mpg.de/damiana', 'status' => 'trampoline', 'hostname' => 'damiana2.aei.mpg.de', 'rsynccmd' => '/home/eschnett/rsync-3.0.4/bin/rsync', 'aliaspattern' => '^damiana2(\.aei\.mpg\.de|\.damiana\.admin)?$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'damiana.cfg', 'scriptfile' => 'damiana.sh', 'make' => 'make -j4', 'basedir' => '/lustre/AEI/@USER@/simulations', 'cpu' => 'Intel Xeon 5160 Woodcrest 4MB shared L2-Cache', 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 4, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 8192, 'nodes' => 170, 'queue' => 'intel.q', 'maxwalltime' => '48:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat -u @USER@ | awk \'$1 == @JOB_ID@ {print $1,$5}\'', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[ \t]', 'queuedpattern' => '^@JOB_ID@[ \t]+(qw|hqw)', 'runningpattern' => '^@JOB_ID@[ \t]+r', 'scratchdir' => '/scratch/${USER}/${JOB_ID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/pbs/spool/@JOB_ID@.damia.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/pbs/spool/@JOB_ID@.damia.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/pbs/spool/@JOB_ID@.damia.OU /var/spool/pbs/spool/@JOB_ID@.damia.ER', }; my $mdb_della = { 'nickname' => 'della', 'name' => 'Della', 'location' => 'Princeton', 'description' => 'Astrophysics, the Lewis-Siger Genomics Institute, PicSciE and OIT', 'webpage' => 'https://tigress.princeton.edu/index.php?option=com_content&view=article&id=67&Itemid=68', 'status' => 'production', 'hostname' => 'della3.princeton.edu', 'trampoline' => 'is', 'rsynccmd' => undef, 'aliaspattern' => '^della3(\.princeton\.edu)?$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'della.cfg', 'scriptfile' => 'della.sh', 'make' => 'make -j 12', 'basedir' => '/tigress-hsm/@USER@/simulations', 'cpu' => 'Intel Westmere 12 core nodes', 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 12, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 12, 'num-threads' => 12, 'memory' => 49152, 'nodes' => 34, 'min-ppn' => 1, 'queue' => 'small', 'maxwalltime' => '24:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat -u @USER@ | awk \'$1 == @JOB_ID@ {print $1,$5}\'', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[ \t]', 'queuedpattern' => '^@JOB_ID@[ \t]+(qw|hqw)', 'runningpattern' => '^@JOB_ID@[ \t]+r', 'scratchdir' => '/tmp/${USER}/${JOB_ID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/pbs/spool/@JOB_ID@.della.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/pbs/spool/@JOB_ID@.della.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/pbs/spool/@JOB_ID@.della.OU /var/spool/pbs/spool/@JOB_ID@.della.ER', }; my $mdb_ducky = { 'nickname' => 'ducky', 'name' => 'Ducky', 'location' => 'LONI, Tulane, New Orleans', 'description' => 'The LONI IBM P5 machine at Tulane, New Orleans', 'webpage' => 'http://www.loni.org/systems/system.php?system=Ducky', 'status' => 'production', 'hostname' => 'ducky.loni.org', 'rsynccmd' => '/work/default/eschnett/rsync-3.0.4/bin/rsync', 'rsyncopts' => '-c', # don't trust file time stamps 'aliaspattern' => '^(ducky(\.loni\.org)?|l2f1n\d\d(\.sys\.loni\.org)?)$', 'sourcebasedir' => '/work/default/@USER@', 'optionlist' => 'pelican.cfg', 'scriptfile' => 'pelican.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz ExternalLibraries/CGNS ExternalLibraries/curl LSUThorns/Twitter ExternalLibraries/flickcurl LSUThorns/Flickr ExternalLibraries/HYPRE ExternalLibraries/libjpeg CactusIO/IOJpeg ExternalLibraries/libxml2 ExternalLibraries/OpenSSL', 'make' => 'mkdir -p /work/default/@USER@/tmp && env TMPDIR=/work/default/@USER@/tmp gmake -j4', 'basedir' => '/work/nfs203/@USER@/simulations', 'quota' => 20, 'cpu' => 'Power5+', 'cpufreq' => 1.9, 'flop/cycle' => 4, 'ppn' => 8, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 8, 'num-threads' => 8, # unknown 'memory' => 16384, 'nodes' => 13, 'min-ppn' => 8, 'allocation' => 'loni_numrel05', 'queue' => 'checkpt', 'maxwalltime' => '120:00:00', 'submit' => 'llsubmit @SCRIPTFILE@', 'getstatus' => 'llq @JOB_ID@', 'stop' => 'llcancel @JOB_ID@', 'submitpattern' => '"(.*)"', 'statuspattern' => '^ *@JOB_ID@', 'queuedpattern' => ' I ', 'runningpattern' => ' R ', 'scratchdir' => 'scratchdir', # unknown 'exechost' => 'llq -f \'%h\' @JOB_ID@b | tail +3 | head -1', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => '/opt/freeware/bin/tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_gauss = { 'nickname' => 'gauss', 'name' => 'Gauss', 'location' => 'Texas A&M University, SURAgrid', 'description' => 'Linux', 'webpage' => 'https://gridportal.sura.org/gridsphere/dist/resources/calclab.html', 'status' => 'experimental', 'hostname' => 'gauss.math.tamu.edu', 'sshcmd' => 'gsissh', 'localsshsetup' => 'test $(grid-proxy-info -timeleft 2> /dev/null) -gt 0 2> /dev/null || grid-proxy-init', 'aliaspattern' => '^gauss\.math\.tamu\.edu$', 'sourcebasedir' => '/u/sura/@USER@', 'optionlist' => 'gauss.cfg', 'scriptfile' => 'gauss.sh', 'make' => 'make -j2', 'basedir' => '/u/sura/@USER@/simulations', 'cpu' => 'AMD Opteron(tm) Processor 246', 'cpufreq' => 1.99, 'flop/cycle' => undef, 'ppn' => 2, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => undef, 'num-threads' => undef, 'memory' => undef, 'nodes' => 390, 'maxwalltime' => '12:00:00', # in the "night" queue 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => 'scratchdir', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => undef, 'stderr' => undef, 'stdout-follow' => undef, }; # Bluedawg (LaTech), Ducky (Tulane), Zeke (ULL), Neptune (UNO), # LaCumba (Southern) my $mdb_ducky_globus = { 'nickname' => 'ducky-globus', 'name' => 'Ducky', 'location' => 'LONI', 'description' => 'The LONI network', 'webpage' => 'http://www.loni.org/systems/', 'status' => 'experimental', 'hostname' => 'ducky.loni.org', 'aliaspattern' => '$^', 'sourcebasedir' => '/work/default/@USER@', 'optionlist' => 'ducky-globus.cfg', 'scriptfile' => 'ducky-globus.sh', 'make' => 'mkdir -p /work/default/@USER@/tmp && env TMPDIR=/work/default/@USER@/tmp gmake -j4', 'basedir' => '/work/default/@USER@/simulations', 'cpu' => 'Power5+', 'cpufreq' => 1.9, 'flop/cycle' => 4, 'ppn' => 8, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 8, 'num-threads' => 8, # unknown 'memory' => 16384, 'nodes' => 13, 'min-ppn' => 8, 'allocation' => 'loni_numrel05', 'queue' => 'checkpt', 'maxwalltime' => '120:00:00', 'submit' => 'globusrun -f @SCRIPTFILE@ < /dev/null > globusrun.$$.out 2> globusrun.$$.err & echo $!', 'getstatus' => 'false', 'stop' => 'false', 'submitpattern' => '$^', 'statuspattern' => '$^', 'queuedpattern' => '$^', 'runningpattern' => '$^', 'scratchdir' => 'scratchdir', # unknown }; my $mdb_eric = { 'nickname' => 'eric', 'name' => 'Eric', 'location' => 'LONI, LSU', 'description' => 'The LONI Linux cluster at LSU', 'webpage' => 'http://www.loni.org/systems/system.php?system=Eric', 'status' => 'production', 'hostname' => 'eric.loni.org', 'rsynccmd' => '/home/eschnett/rsync-3.0.6/bin/rsync', 'aliaspattern' => '^eric2(\.loni\.org)?$', 'sourcebasedir' => '/work/@USER@', 'optionlist' => 'queenbee-mvapich2.cfg', 'scriptfile' => 'queenbee-mvapich2.sh', # 'disabled-thorns' => ' # ExternalLibraries/PETSc # CactusElliptic/EllPETSc # TAT/TATPETSc # LSUDevelopment/WaveToyNoGhostsPETSc # CarpetThorns/LSUPETSc # CarpetThorns/LSUPoisson # CarpetThorns/Lichnerowicz', 'make' => 'make -j4', 'basedir' => '/work/@USER@/simulations', 'cpu' => 'Dual Core Xeon 64-bit Processors', 'cpufreq' => 2.33, 'flop/cycle' => 4, 'ppn' => 4, 'spn' => 2, 'mpn' => 1, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 4096, 'nodes' => 48, # while there are 128 nodes, only 48 may be used 'min-ppn' => 4, 'allocation' => 'loni_numrel05', 'queue' => 'checkpt', 'maxwalltime' => '72:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)[.]eric2', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/var/scratch/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.eric.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.eric.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.eric.OU /var/spool/torque/spool/@JOB_ID@.eric.ER', }; my $mdb_franklin = { 'nickname' => 'franklin', 'name' => 'Franklin', 'location' => 'NERSC', 'description' => 'A Cray XT4 at NERSC', 'webpage' => 'http://www.nersc.gov/nusers/systems/franklin/', 'status' => 'production', 'hostname' => 'franklin.nersc.gov', 'rsynccmd' => '/global/homes/s/schnette/rsync-3.0.6/bin/rsync', 'aliaspattern' => '^nid[0-9][0-9][0-9][0-9][0-9](\.nersc\.gov)?$', #'sourcebasedir' => '/global/homes/s/@USER@/franklin', 'sourcebasedir' => '/project/projectdirs/m152/@USER@/franklin', 'optionlist' => 'franklin.cfg', 'scriptfile' => 'franklin.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz EinsteinAnalysis/AHFinder ExternalLibraries/OpenSSL', 'make' => 'make -j2', 'basedir' => '/scratch/scratchdirs/@USER@/simulations', 'cpu' => 'quad-core AMD Opteron processor (Budapest)', 'cpufreq' => 2.3, 'flop/cycle' => 4, 'ppn' => 4, 'spn' => 1, 'mpn' => 1, 'max-num-threads' => 4, 'num-threads' => 2, 'memory' => 7566, # Franklin has 8192 GByte per node 'nodes' => 8502, # Although Franklin has 9660 nodes, # only 8502 are available 'min-ppn' => 4, 'allocation' => 'm152', 'queue' => 'regular', 'maxwalltime' => '24:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)[.]nid[0-9]*', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', #'startpattern' => 'Estimated Rsv based start in\s+([0-9:]+) on ', 'scratchdir' => '/scratch/scratchdirs/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'cat /var/spool/torque/mom_priv/jobs/@JOB_ID@.nid0.OU', 'stderr' => 'cat /var/spool/torque/mom_priv/jobs/@JOB_ID@.nid0.ER', 'stdout-follow' => 'tail -n 100 -f /var/spool/torque/mom_priv/jobs/@JOB_ID@.nid0.OU /var/spool/torque/mom_priv/jobs/@JOB_ID@.nid0.ER', }; my $mdb_genius = { 'nickname' => 'genius', 'name' => 'Genius', 'location' => 'RZG', 'description' => 'Blue Gene/P', 'webpage' => 'https://www.rzg.mpg.de/computing/hardware/BGP/', 'status' => 'experimental', 'hostname' => 'genius.rzg.mpg.de', 'trampoline' => 'vip', 'aliaspattern' => '^genius\d*$', 'sourcebasedir' => '/u/@USER@/BlueGene', 'optionlist' => 'genius.cfg', 'scriptfile' => 'genius.sh', 'make' => 'make -j4', ### CONTINUE HERE ### 'basedir' => '/ptmp/@USER@/BlueGene/simulations', 'quota' => undef, 'cpu' => 'PowerPC 450', 'cpufreq' => 0.85, 'flop/cycle' => 2, 'ppn' => 4, # one partition has 64 nodes 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 2048, 'nodes' => 1024, # Surveyor has 1024 nodes 'min-ppn' => 4, 'allocation' => 'petascaling', 'queue' => 'default', 'maxwalltime' => '1:00:00', 'maxqueueslots' => 20, # TODO: Use a script file; see email with "ALCF" in subject 'submit' => 'chmod a+x @SCRIPTFILE@ && qsub ' . ' -A @ALLOCATION@' . ' -q @QUEUE@' . ' -t @WALLTIME@' . ' --mode @(@NUM_THREADS@==4 ? "smp" : @NUM_THREADS@==2 ? "dual" : "vn")@' . ' -n @NODES@' . ' -M @USER@@alcf.anl.gov' . ' -O @SIMULATION_NAME@' . ' -o @RUNDIR@/@SIMULATION_NAME@.out' . ' -e @RUNDIR@/@SIMULATION_NAME@.err' . ' --cwd @RUNDIR@-active' . ' --env=OMP_NUM_THREADS=@NUM_THREADS@' . ' --env=BG_MAPPING=TXYZ' . ' @RUNDIR@-active/@EXECUTABLE@ -L 3 @PARFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' queued ', 'runningpattern' => ' running ', 'scratchdir' => 'scratchdir', 'exechost' => 'qstat -f @JOB_ID@', # ??? 'exechostpattern' => 'exec_host = (\w+)/', # ??? 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.qb2.OU', # ??? 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.qb2.ER', # ??? 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.qb2.OU /var/spool/torque/spool/@JOB_ID@.qb2.ERR', # ??? }; my $mdb_hlrb2 = { 'nickname' => 'hlrb2', 'name' => 'HLRB II', 'location' => 'LRZ', 'description' => 'An SGI Altix at the LRZ', 'webpage' => 'http://www.lrz-muenchen.de/services/compute/hlrb/', 'status' => 'production', 'hostname' => 'hlrb2.lrz-muenchen.de', #'trampoline' => 'numrel02', 'trampoline' => 'damiana', 'aliaspattern' => '^a01\.hlrb2\.lrz-muenchen\.de$', #'sourcebasedir' => '/home/hlrb2/h0152/@USER@', 'sourcebasedir' => '/home/hlrb2/pr32pi/@USER@', 'optionlist' => 'hlrb2.cfg', 'scriptfile' => 'hlrb2.sh', 'disabled-thorns' => ' ExternalLibraries/CGNS ExternalLibraries/F5 CarpetDev/CarpetIOF5 CarpetExtra/Nirvana CarpetDev/CarpetIONirvana', 'make' => 'make -j16', # 30 cores are available on the login cpuset #'basedir' => '/ptmp2/h0152/@USER@/simulations', 'basedir' => '/ptmp2/pr32pi/@USER@/simulations', 'quota' => undef, 'cpu' => 'Intel Itanium2 Montecito Dual Core', 'cpufreq' => 1.6, 'flop/cycle' => 4, 'ppn' => 9728, 'spn' => 4864, # 2 cores per blade 'mpn' => 4864, # 2 cores per blade 'max-num-threads' => 2, 'num-threads' => 2, # 2 cores per blade 'memory' => 39845888, 'nodes' => 1, # there are 18 partitions 'min-ppn' => 1, 'allocation' => 'h0152', 'maxwalltime' => '48:00:00', # large jobs can run for at most 12h 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/ptmp1/h0152/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.santak.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.santak.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.santak.OU /var/spool/torque/spool/@JOB_ID@.santak.ER', }; my $mdb_hopper = { 'nickname' => 'hopper', 'name' => 'Hopper', 'location' => 'NERSC', 'description' => 'A Cray XE6 at NERSC', 'webpage' => 'https://newweb.nersc.gov/for-users/computational-systems/hopper', 'status' => 'production', 'hostname' => 'hopper.nersc.gov', 'rsynccmd' => '/global/homes/s/schnette/rsync-3.0.6/bin/rsync', 'aliaspattern' => '^hopper\d+(\.nersc\.gov)?$', 'sourcebasedir' => '/project/projectdirs/m152/@USER@/hopper', 'optionlist' => 'hopper.cfg', 'scriptfile' => 'hopper.sh', 'disabled-thorns' => ' EinsteinAnalysis/AHFinder ExternalLibraries/git ExternalLibraries/OpenSSL LSUThorns/Flickr ExternalLibraries/PETSc CactusElliptic/EllPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz LSUDevelopment/WaveToyNoGhostsPETSc TAT/TATPETSc', 'make' => 'make -j8', 'basedir' => '/scratch/scratchdirs/@USER@/simulations', 'cpu' => '2 twelve-core AMD "MagnyCours" 2.1 GHz processors per node', 'cpufreq' => 2.41, 'flop/cycle' => 4, 'ppn' => 24, 'spn' => 4, 'mpn' => undef, 'max-num-threads' => 24, 'num-threads' => 6, # strongly recommended by NERSC 'memory' => 32768, 'nodes' => 6392, 'min-ppn' => 24, 'allocation' => 'm152', 'queue' => 'regular', 'maxwalltime' => '12:00:00', 'submit' => '/usr/common/nsg/bin/qsub @SCRIPTFILE@', 'getstatus' => '/usr/common/nsg/bin/qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => '/usr/common/nsg/bin/qdel @JOB_ID@', 'submitpattern' => '(\d+)[.]sdb', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', #'startpattern' => 'Estimated Rsv based start in\s+([0-9:]+) on ', 'scratchdir' => '/scratch/scratchdirs/${USER}/scratch/${PBS_JOBID}', 'exechost' => '/usr/common/nsg/bin/qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_hyperion = { 'nickname' => 'hyperion', 'name' => 'Hyperion', 'location' => 'LLNL', 'description' => 'A large Linux cluster at LLNL', 'webpage' => 'http://computing.llnl.gov/', 'status' => 'experimental', 'hostname' => 'hyperion0-pub.llnl.gov', 'trampoline' => 'is', 'aliaspattern' => '^hyperion0$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'hyperion.cfg', 'scriptfile' => 'hyperion.sh', 'make' => 'make -j4', # CONTINUE HERE 'basedir' => '/work/@USER@/simulations', 'cpu' => 'Dual Core Xeon 64-bit Processors', 'cpufreq' => 2.33, 'flop/cycle' => 4, 'ppn' => 4, 'spn' => 2, 'mpn' => 1, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 4096, 'nodes' => 48, # while there are 128 nodes, only 48 may be used 'min-ppn' => 4, 'allocation' => 'loni_numrel05', 'queue' => 'checkpt', 'maxwalltime' => '72:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)[.]eric2', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/var/scratch/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.eric.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.eric.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.eric.OU /var/spool/torque/spool/@JOB_ID@.eric.ER', }; my $mdb_intrepid = { 'nickname' => 'intrepid', 'name' => 'Intrepid', 'location' => 'ALCF', 'description' => 'Blue Gene/P', 'webpage' => 'http://www.alcf.anl.gov/resources/storage.php', 'status' => 'experimental', 'hostname' => 'intrepid.alcf.anl.gov', # TODO: check version, check accessibility, maybe use Erik's # version again 'rsynccmd' => '/home/knarf/utils/rsync-3.0.6/bin/rsync', 'aliaspattern' => '^login[0-9]\.intrepid', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'intrepid-xlc.cfg', 'scriptfile' => 'intrepid-xlc.sh', 'make' => 'make -j2', 'basedir' => '/gpfs1/@USER@/simulations', 'cpu' => 'PowerPC 450', 'cpufreq' => 0.85, 'flop/cycle' => 4, 'ppn' => 4, # one partition has 64 nodes 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 2048, 'nodes' => 40960, 'min-ppn' => 4, 'allocation' => 'McLachlanGB2009', 'queue' => 'prod', # could use "prod-devel" for >512 nodes 'maxwalltime' => '6:00:00', 'maxqueueslots' => 20, # TODO: Use a script file; see email with "ALCF" in subject 'submit' => 'chmod a+x @SCRIPTFILE@ && qsub ' . ' --mode vn' . ' --cwd @RUNDIR@-active' . ' -A \'@ALLOCATION@\'' . ' -q \'@QUEUE@\'' . ' -t \'@WALLTIME@\'' . ' -n \'@NODES@\'' . ' -M \'@USER@@alcf.anl.gov\'' . ' -O \'@SIMULATION_NAME@\'' . ' -o \'@RUNDIR@/@SIMULATION_NAME@.out\'' . ' -e \'@RUNDIR@/@SIMULATION_NAME@.err\'' . ' @RUNDIR@-active/@EXECUTABLE@ -L 3 @PARFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' queued ', 'runningpattern' => ' running ', 'scratchdir' => 'scratchdir', 'exechost' => 'qstat -f @JOB_ID@', # ??? 'exechostpattern' => 'exec_host = (\w+)/', # ??? 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.qb2.OU', # ??? 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.qb2.ER', # ??? 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.qb2.OU /var/spool/torque/spool/@JOB_ID@.qb2.ER', # ??? }; my $mdb_is = { 'nickname' => 'is', 'name' => 'IS', 'location' => 'LSU, CCT', 'description' => 'The main file server at the CCT', 'status' => 'personal', 'hostname' => 'is.cct.lsu.edu', 'aliaspattern' => '^is(\.cct\.lsu\.edu)?$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'numrel-intel.cfg', 'scriptfile' => 'numrel-intel.sh', 'make' => 'make -j4', 'basedir' => '/home/@USER@/simulations', 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 2, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 2, 'num-threads' => 2, 'memory' => 4096, 'nodes' => 1, 'submit' => 'sh @SCRIPTFILE@ < /dev/null > /dev/null 2> /dev/null & echo $!', 'getstatus' => 'ps @JOB_ID@', 'stop' => 'kill @JOB_ID@', 'submitpattern' => '(.*)', 'statuspattern' => '^ *@JOB_ID@ ', 'queuedpattern' => '$^', # never queued 'runningpattern' => '^', # always running 'scratchdir' => 'scratchdir', 'exechost' => 'echo localhost', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_kraken = { 'nickname' => 'kraken', 'name' => 'Kraken', 'location' => 'NICS', 'description' => 'A Cray XT5 at NICS', 'webpage' => 'http://www.nics.tennessee.edu/computing-resources/kraken', 'status' => 'production', # This is for gsissh access; OTP access is at kraken.nics.utk.edu 'hostname' => 'kraken-gsi2.nics.teragrid.org', 'rsynccmd' => '/nics/b/home/eschnett/rsync-3.0.3/bin/rsync', 'sshcmd' => 'gsissh', # X509_USER_CERT and X509_USER_KEY # X509_USER_PROXY # X509_CERT_DIR 'localsshsetup' => ' mkdir -p @SOURCEDIR@/.globus && : >> @SOURCEDIR@/.globus/proxy-teragrid && chmod go-rwx @SOURCEDIR@/.globus/proxy-teragrid && export X509_USER_PROXY=@SOURCEDIR@/.globus/proxy-teragrid && : mkdir -p @SOURCEDIR@/.globus/certificates-teragrid && : export X509_CERT_DIR=@SOURCEDIR@/.globus/certificates-teragrid && { { grid-proxy-info -issuer -file @SOURCEDIR@/.globus/proxy-teragrid 2>/dev/null | grep "^/C=US/O=National Center for Supercomputing Applications/" >/dev/null 2>/dev/null && test $(grid-proxy-info -timeleft -file @SOURCEDIR@/.globus/proxy-teragrid 2>/dev/null) -gt 0 2>/dev/null } || { { grid-proxy-destroy 2>/dev/null || true; } && myproxy-logon -p 7514 -s myproxy.teragrid.org -T -l @USER@ -o @SOURCEDIR@/.globus/proxy-teragrid } } && { globus-update-certificate-dir > /dev/null 2>&1 || true; }', 'sshsetup' => 'source /etc/profile', 'aliaspattern' => '^kraken(-pwd)?[1234](\.nics\.utk\.edu)?$', 'sourcebasedir' => '/nics/b/home/@USER@', #'sourcebasedir' => '/nics/a/proj/cactus/@USER@/xt5', #'sourcebasedir' => '/lustre/scratch/proj/cactus/@USER@'; 'optionlist' => 'kraken.cfg', 'scriptfile' => 'kraken.sh', 'disabled-thorns' => ' EinsteinAnalysis/AHFinder ExternalLibraries/curl LSUThorns/Twitter ExternalLibraries/F5 CarpetDev/CarpetIOF5 ExternalLibraries/flickcurl LSUThorns/Flickr ExternalLibraries/HYPRE ExternalLibraries/libjpeg CactusIO/IOJpeg ExternalLibraries/libxml2 ExternalLibraries/OpenSSL', 'make' => 'make -j2', # head node has only 2 processors 'basedir' => '/lustre/scratch/@USER@/simulations', 'cpu' => 'six-core AMD Opteron (Istanbul)', 'cpufreq' => 2.6, 'flop/cycle' => 4, 'ppn' => 12, 'spn' => 2, 'mpn' => undef, 'max-num-threads' => 12, 'num-threads' => 6, 'memory' => 16384, 'nodes' => 8256, 'min-ppn' => 12, 'allocation' => 'TG-MCA02N014', 'queue' => 'batch', 'maxwalltime' => '24:00:00', # but: up to 60h for small jobs 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => '/opt/torque/2.3.5/bin/qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => '/opt/torque/2.3.5/bin/qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+[.]nid[0-9]*)', 'statuspattern' => '^@JOB_ID@[. ].* [QRH] ', 'queuedpattern' => '^@JOB_ID@[. ].* Q ', 'runningpattern' => '^@JOB_ID@[. ].* R ', #'startpattern' => 'Estimated Rsv based start in\s+([0-9:]+) on ', 'scratchdir' => '/lustre/scratch/@USER@/scratch/@JOB_ID@', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'cat @JOB_ID@.OU', 'stderr' => 'cat @JOB_ID@.ER', 'stdout-follow' => 'tail -n 100 -f @JOB_ID@.ER @JOB_ID@.OU', }; my $mdb_lacumba = { 'nickname' => 'lacumba', 'name' => 'LaCumba', 'location' => 'LONI, Southern, Baton Rouge', 'description' => 'The LONI IBM P5 machine at Southern, Baton Rouge Orleans', 'webpage' => 'http://www.loni.org/systems/system.php?system=LaCumba', 'status' => 'production', 'hostname' => 'lacumba.loni.org', 'rsynccmd' => '/work/default/eschnett/rsync-3.0.4/bin/rsync', 'rsyncopts' => '-c', # don't trust file time stamps 'aliaspattern' => '^(lacumba(\.loni\.org)?|l5f1n\d\d(\.sys\.loni\.org)?)$', 'sourcebasedir' => '/work/default/@USER@', 'optionlist' => 'pelican.cfg', 'scriptfile' => 'pelican.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz ExternalLibraries/CGNS ExternalLibraries/curl LSUThorns/Twitter ExternalLibraries/flickcurl LSUThorns/Flickr ExternalLibraries/HYPRE ExternalLibraries/libjpeg CactusIO/IOJpeg ExternalLibraries/libxml2 ExternalLibraries/OpenSSL', 'make' => 'mkdir -p /work/default/@USER@/tmp && env TMPDIR=/work/default/@USER@/tmp gmake -j4', 'basedir' => '/work/default/@USER@/simulations', 'quota' => 20, 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 8, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 8, 'num-threads' => 8, # unknown 'memory' => 16384, 'nodes' => 13, 'min-ppn' => 8, 'allocation' => 'loni_numrel05', 'queue' => 'checkpt', 'maxwalltime' => '120:00:00', 'submit' => 'llsubmit @SCRIPTFILE@', 'getstatus' => 'llq @JOB_ID@', 'stop' => 'llcancel @JOB_ID@', 'submitpattern' => '"(.*)"', 'statuspattern' => '^ *@JOB_ID@', 'queuedpattern' => ' I ', 'runningpattern' => ' R ', 'scratchdir' => 'scratchdir', # unknown 'exechost' => 'llq -f \'%h\' @JOB_ID@b | tail +3 | head -1', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => '/opt/freeware/bin/tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_lincoln = { 'nickname' => 'lincoln', 'name' => 'Lincoln', 'location' => 'NCSA', 'description' => 'A Linux cluster with Tesla GPU accelerators at NCSA', 'webpage' => 'http://www.ncsa.illinois.edu/UserInfo/Resources/Hardware/Intel64TeslaCluster/', 'status' => 'experimental', 'hostname' => 'honest1.ncsa.uiuc.edu', # The home directory is the same as that of Abe 'rsynccmd' => '/u/ac/eschnett/rsync-3.0.5/bin/rsync', 'sshsetup' => 'export LM_LICENSE_FILE=1702@barbossa:1702@nani:1702@lilo:1702@stitch:1708@barbossa:1704@barbossa.ncsa.uiuc.edu', 'aliaspattern' => '^honest[1](\.ncsa\.uiuc\.edu)?$', 'sourcebasedir' => '/u/ac/@USER@/lincoln', 'optionlist' => 'lincoln-mvapich2.cfg', 'scriptfile' => 'lincoln-mvapich2.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz', 'make' => 'make -j4', 'basedir' => '/u/ac/@USER@/scratch-global/lincoln/simulations', 'cpu' => 'Intel 64 (Harperrtown)', 'cpufreq' => 2.33, 'flop/cycle' => 4, 'ppn' => 8, 'spn' => 2, 'mpn' => 1, 'max-num-threads' => 8, 'num-threads' => 8, 'memory' => 16384, 'nodes' => 192, 'min-ppn' => 8, 'allocation' => 'out', 'queue' => 'lincoln', 'maxwalltime' => '241:00:00', 'submit' => '/usr/local/bin/qsub @SCRIPTFILE@', 'getstatus' => '/usr/local/torque/bin/qstat @JOB_ID@', #'showstart' => '/usr/local/moab/bin/showstart @JOB_ID@', 'stop' => '/usr/local/torque/bin/qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', #'startpattern' => 'Estimated Rsv based start in\s+([0-9:]+) on ', 'scratchdir' => '/cfs/scratch/users/${USER}/${PBS_JOBID}', 'exechost' => '/usr/local/torque/bin/qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'cat /u/ac/@USER@/.pbs_spool/@JOB_ID@.abem5.OU', 'stderr' => 'cat /u/ac/@USER@/.pbs_spool/@JOB_ID@.abem5.ER', 'stdout-follow' => 'tail -n 100 -f /u/ac/@USER@/.pbs_spool/@JOB_ID@.abem5.OU /u/ac/@USER@/.pbs_spool/@JOB_ID@.abem5.ER', }; my $mdb_lonestar = { 'nickname' => 'lonestar', 'name' => 'Lonestar', 'location' => 'TACC', 'description' => 'A large Linux cluster at TACC', 'webpage' => 'http://services.tacc.utexas.edu/index.php/lonestar-user-guide', 'status' => 'experimental', 'hostname' => 'lonestar.tacc.utexas.edu', 'sshsetup' => 'source /etc/profile.d/modules.sh && module load TACC', 'aliaspattern' => '^login[12]\.ls4\.tacc\.utexas\.edu$', 'sourcebasedir' => '/work/00507/@USER@', 'optionlist' => 'lonestar.cfg', 'scriptfile' => 'lonestar.sh', 'disabled-thorns' => ' ExternalLibraries/curl ExternalLibraries/flickcurl LSUThorns/Twitter ExternalLibraries/hwloc ExternalLibraries/OpenSSL LSUThorns/Flickr', 'make' => 'make -j6', 'basedir' => '/scratch/00507/@USER@/simulations', 'cpu' => 'Xeon Intel Hexa-Core 64-bit Westmere processors', 'cpufreq' => 3.33, 'flop/cycle' => 4, 'ppn' => 12, 'spn' => 2, 'mpn' => 2, 'max-num-threads' => 12, 'num-threads' => 6, 'memory' => 24576, 'nodes' => 1888, 'min-ppn' => 12, 'allocation' => 'TG-MCA02N014', 'queue' => 'normal', 'maxwalltime' => '24:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat -u @USER@ | awk \'$1 == @JOB_ID@ {print $1,$5}\'', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => 'Your job (\d+) \(.*?\) has been submitted', 'statuspattern' => '^@JOB_ID@[ \t]', 'queuedpattern' => '^@JOB_ID@[ \t]+qw', 'runningpattern' => '^@JOB_ID@[ \t]+r', 'scratchdir' => 'scratchdir', # unknown 'exechost' => 'head -n 1 SIMFACTORY/NODES', 'exechostpattern' => '^(\S+)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_louie = { 'nickname' => 'louie', 'name' => 'Louie', 'location' => 'LONI, Tulane', 'description' => 'The LONI Linux cluster at Tulane', 'webpage' => 'http://www.loni.org/systems/system.php?system=Louie', 'status' => 'production', 'hostname' => 'louie.loni.org', 'rsynccmd' => '/home/eschnett/rsync-3.0.6/bin/rsync', 'aliaspattern' => '^louie2(\.loni\.org)?$', 'sourcebasedir' => '/work/@USER@', 'optionlist' => 'queenbee-mvapich2.cfg', 'scriptfile' => 'queenbee-mvapich2.sh', # 'disabled-thorns' => ' # ExternalLibraries/PETSc # CactusElliptic/EllPETSc # TAT/TATPETSc # LSUDevelopment/WaveToyNoGhostsPETSc # CarpetThorns/LSUPETSc # CarpetThorns/LSUPoisson # CarpetThorns/Lichnerowicz', 'make' => 'make -j4', 'basedir' => '/work/@USER@/simulations', 'cpu' => 'Dual Core Xeon 64-bit Processors', 'cpufreq' => 2.33, 'flop/cycle' => 4, 'ppn' => 4, 'spn' => 2, 'mpn' => 1, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 4096, 'nodes' => 64, # while there are 128 nodes, only 64 may be used 'min-ppn' => 4, 'allocation' => 'loni_numrel05', 'queue' => 'checkpt', 'maxwalltime' => '72:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)[.]louie2', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/var/scratch/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.loui.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.loui.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.loui.OU /var/spool/torque/spool/@JOB_ID@.loui.ER', }; my $mdb_mercury = { 'nickname' => 'mercury', 'name' => 'Mercury', 'location' => 'NCSA', 'description' => 'An Itanium cluster at NCSA', 'webpage' => 'http://www.ncsa.uiuc.edu/UserInfo/Resources/Hardware/TGIA64LinuxCluster/', 'status' => 'experimental', 'hostname' => 'login-hg.ncsa.teragrid.org', 'aliaspattern' => '^tg-login1(\.ncsa\.teragrid\.org)?$', 'sourcebasedir' => '/home/ac/@USER@', 'optionlist' => 'mercury.cfg', 'scriptfile' => 'mercury.sh', 'make' => 'make -j2', 'basedir' => '/gpfs_scratch1/@USER@/simulations', 'cpu' => 'Intel Itanium 2', 'cpufreq' => 1.5, 'flop/cycle' => 4, 'ppn' => 2, 'spn' => 1, 'mpn' => 1, 'max-num-threads' => 2, 'num-threads' => 2, 'memory' => 4096, 'nodes' => 631, 'min-ppn' => 2, 'allocation' => 'out', 'queue' => 'dque', 'maxwalltime' => '24:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/scr/${USER}/${PBS_JOBID}', 'exechost' => undef, 'exechostpattern' => undef, 'stdout' => undef, 'stderr' => undef, 'stdout-follow' => undef, }; my $mdb_mileva = { 'nickname' => 'mileva', 'name' => 'Mileva', 'location' => 'Old Dominion University, SURAgrid', 'description' => 'Linux', 'webpage' => 'https://gridportal.sura.org/gridsphere/dist/resources/mileva.html', 'status' => 'production', 'hostname' => 'mileva.hpc.odu.edu', 'sshcmd' => 'gsissh', 'sshopts' => '-p 2222', 'localsshsetup' => 'test $(grid-proxy-info -timeleft 2> /dev/null) -gt 0 2> /dev/null || grid-proxy-init', 'aliaspattern' => '^mileva\.hpc\.odu\.edu$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'mileva.cfg', 'scriptfile' => 'mileva.sh', 'make' => 'make -j2', 'basedir' => '/home/@USER@/simulations', 'cpu' => 'Dual Core AMD Opteron(tm) Processor 175', 'cpufreq' => 1.0, 'flop/cycle' => undef, 'ppn' => 2, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => undef, 'num-threads' => undef, 'memory' => undef, 'nodes' => 16, 'submit' => 'qsub -S /bin/bash -terse @SCRIPTFILE@', 'getstatus' => 'qstat -u @USER@ | awk \'$1 == @JOB_ID@ {print $1,$5}\'', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^ *@JOB_ID@[ \t]', 'queuedpattern' => '^ *@JOB_ID@[ \t]+(qw|hqw)', 'runningpattern' => '^ *@JOB_ID@[ \t]+r', 'scratchdir' => 'scratchdir', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => undef, 'stderr' => undef, 'stdout-follow' => undef, }; my $mdb_mn = { 'nickname' => 'mn', 'name' => 'Mare Nostrum', 'location' => 'BSC', 'description' => 'PowerPC', 'webpage' => 'http://www.bsc.es/plantillaA.php?cat_id=5', 'status' => 'experimental', 'hostname' => 'mn1.bsc.es', 'rsynccmd' => '/home/uib68/uib68311/rsync-3.0.7/bin/rsync', 'aliaspattern' => '^login[0-9]$', 'sourcebasedir' => '/home/uib68/@USER@', 'optionlist' => 'mn.cfg', 'scriptfile' => 'mn.sh', 'make' => 'make -j2', 'basedir' => '/gpfs/scratch/uib68/@USER@', 'cpu' => 'IBM Power PC 970MP', 'cpufreq' => 2.3, 'flop/cycle' => 4, 'ppn' => 4, 'spn' => 2, 'mpn' => 2, 'max-num-threads' => 'num-threads' => 'memory' => 8192, 'nodes' => 5120, 'min-ppn' => 4, #'allocation' => #'queue' => #'maxwalltime' => 'maxqueueslots' => 20, # TODO: Use a script file; see email with "ALCF" in subject 'submit' => 'chmod a+x @SCRIPTFILE@ && qsub ' . ' -A @ALLOCATION@' . ' -q @QUEUE@' . ' -t @WALLTIME@' . ' --mode @(@NUM_THREADS@==4 ? "smp" : @NUM_THREADS@==2 ? "dual" : "vn")@' . ' -n @NODES@' . ' -M @USER@@alcf.anl.gov' . ' -O @SIMULATION_NAME@' . ' -o @RUNDIR@/@SIMULATION_NAME@.out' . ' -e @RUNDIR@/@SIMULATION_NAME@.err' . ' --cwd @RUNDIR@-active' . ' --env=OMP_NUM_THREADS=@NUM_THREADS@' . ' --env=BG_MAPPING=TXYZ' . ' @RUNDIR@-active/@EXECUTABLE@ -L 3 @PARFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' queued ', 'runningpattern' => ' running ', 'scratchdir' => 'scratchdir', 'exechost' => undef, 'exechostpattern' => undef, 'stdout' => undef, 'stderr' => undef, 'stdout-follow' => undef, }; my $mdb_neptune = { 'nickname' => 'neptune', 'name' => 'Neptune', 'location' => 'LONI, UNO', 'description' => 'The LONI IBM P5 machine at UNO', 'webpage' => 'http://www.hpc.lsu.edu/systems/system.php?system=Neptune', 'status' => 'production', 'hostname' => 'neptune.loni.org', 'rsynccmd' => '/work/default/eschnett/rsync-3.0.4/bin/rsync', 'rsyncopts' => '-c', # don't trust file time stamps 'aliaspattern' => '^(neptune(\.loni\.org)?|l4f1n\d\d(\.sys\.loni\.org)?)$', 'sourcebasedir' => '/work/default/@USER@', 'optionlist' => 'pelican.cfg', 'scriptfile' => 'pelican.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz ExternalLibraries/CGNS ExternalLibraries/curl LSUThorns/Twitter ExternalLibraries/flickcurl LSUThorns/Flickr ExternalLibraries/HYPRE ExternalLibraries/libjpeg CactusIO/IOJpeg ExternalLibraries/libxml2 ExternalLibraries/OpenSSL', 'make' => 'mkdir -p /work/default/@USER@/tmp && env TMPDIR=/work/default/@USER@/tmp gmake -j4', 'basedir' => '/mnt/lpfs.nfs403/@USER@/simulations', 'quota' => 20, 'cpu' => 'Power5+', 'cpufreq' => 1.9, 'flop/cycle' => 4, 'ppn' => 8, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 8, 'num-threads' => 8, # unknown 'memory' => 16384, 'nodes' => 13, 'min-ppn' => 8, 'allocation' => 'loni_numrel05', 'queue' => 'checkpt', 'maxwalltime' => '120:00:00', 'submit' => 'llsubmit @SCRIPTFILE@', 'getstatus' => 'llq @JOB_ID@', 'stop' => 'llcancel @JOB_ID@', 'submitpattern' => '"(.*)"', 'statuspattern' => '^ *@JOB_ID@', 'queuedpattern' => ' I ', 'runningpattern' => ' R ', 'scratchdir' => 'scratchdir', # unknown 'exechost' => 'llq -f \'%h\' @JOB_ID@b | tail +3 | head -1', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => '/opt/freeware/bin/tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_nmi = { 'nickname' => 'nmi', 'name' => 'NMI', 'location' => 'University of Wisconsin-Madison', 'description' => 'NMI Build and Test Lab', 'webpage' => 'https://nmi.cs.wisc.edu/', 'status' => 'experimental', 'hostname' => 'nmi-s001.cs.wisc.edu', 'aliaspattern' => '^nmi-.*\.cs\.wisc\.edu$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'nmi.cfg', 'scriptfile' => 'nmi.sh', 'make' => 'make -j2', 'basedir' => '/home/@USER@/simulations', 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 0, # unknown 'spn' => undef, 'mpn' => undef, 'max-num-threads' => undef, 'num-threads' => undef, 'memory' => undef, 'nodes' => 1, 'submit' => 'sh @SCRIPTFILE@ < /dev/null > /dev/null 2> /dev/null & echo $!', 'getstatus' => 'ps @JOB_ID@', 'stop' => 'kill @JOB_ID@', 'submitpattern' => '(.*)', 'statuspattern' => '^ *@JOB_ID@ ', 'queuedpattern' => '$^', # never queued 'runningpattern' => '^', # always running 'scratchdir' => 'scratchdir', 'exechost' => undef, 'exechostpattern' => undef, 'stdout' => undef, 'stderr' => undef, 'stdout-follow' => undef, }; my @mdb_numrel; foreach my $i (1..10) { my $name = sprintf "numrel%02d", $i; $mdb_numrel[$i] = { 'nickname' => $name, 'name' => $name, 'location' => 'LSU, CCT', 'description' => 'One of the numrel workstations at the CCT', 'status' => 'personal', 'hostname' => "$name.cct.lsu.edu", 'rsynccmd' => '/usr/local/packages/numrel/rsync-3.0.7/bin/rsync', 'aliaspattern' => '^'.$name.'(\.cct\.lsu\.edu)?$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'numrel-intel.cfg', 'scriptfile' => 'numrel-intel.sh', 'make' => 'make -j4', 'basedir' => '/home/@USER@/simulations', 'quota' => 50, # don't use all disk space 'cpu' => 'Dual Core AMD Opteron Processor 280', 'cpufreq' => 2.4, 'flop/cycle' => 2.0, 'ppn' => 4, 'spn' => 2, 'mpn' => undef, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 8192, 'nodes' => 1, 'min-ppn' => 1, 'submit' => 'sh @SCRIPTFILE@ < /dev/null > /dev/null 2> /dev/null & echo $!', 'run' => '/usr/local/packages/numrel/mpich-1.2.7p1/bin/mpirun -np @NUM_PROCS@ -machinefile localhost ./RunCmd', 'run2' => 'exec /bin/env OMP_NUM_THREADS=@NUM_THREADS@ nice -19 @RUNDIR@/@EXECUTABLE@ $*', 'getstatus' => 'ps @JOB_ID@', 'stop' => 'kill @JOB_ID@', 'submitpattern' => '(.*)', 'statuspattern' => '^ *@JOB_ID@ ', 'queuedpattern' => '$^', # never queued 'runningpattern' => '^', # always running 'scratchdir' => 'scratchdir', 'exechost' => 'echo localhost', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; } my $mdb_oliver = { 'nickname' => 'oliver', 'name' => 'Oliver', 'location' => 'ULL', 'description' => 'The LONI Linux cluster at ULL', 'webpage' => 'http://www.loni.org/systems/system.php?system=Oliver', 'status' => 'production', 'hostname' => 'oliver.loni.org', 'rsynccmd' => '/home/eschnett/rsync-3.0.6/bin/rsync', 'aliaspattern' => '^oliver2(\.loni\.org)?$', 'sourcebasedir' => '/work/@USER@', 'optionlist' => 'queenbee-mvapich2.cfg', 'scriptfile' => 'queenbee-mvapich2.sh', # 'disabled-thorns' => ' # ExternalLibraries/PETSc # CactusElliptic/EllPETSc # TAT/TATPETSc # LSUDevelopment/WaveToyNoGhostsPETSc # CarpetThorns/LSUPETSc # CarpetThorns/LSUPoisson # CarpetThorns/Lichnerowicz', 'make' => 'make -j4', 'basedir' => '/work/@USER@/simulations', 'cpu' => 'Dual Core Xeon 64-bit Processors', 'cpufreq' => 2.33, 'flop/cycle' => 4, 'ppn' => 4, 'spn' => 2, 'mpn' => 1, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 4096, 'nodes' => 48, # while there are 128 nodes, only 48 may be used 'min-ppn' => 4, 'allocation' => 'loni_numrel05', 'queue' => 'checkpt', 'maxwalltime' => '72:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)[.]oliver2', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/var/scratch/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.oliv.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.oliv.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.olive.OU /var/spool/torque/spool/@JOB_ID@.oliv.ER', }; my $mdb_painter = { 'nickname' => 'painter', 'name' => 'Painter', 'location' => 'LA Tech', 'description' => 'The LONI Linux cluster at LA Tech', 'webpage' => 'http://www.loni.org/systems/system.php?system=Painter', 'status' => 'production', 'hostname' => 'painter.loni.org', 'rsynccmd' => '/home/eschnett/rsync-3.0.2/bin/rsync', 'aliaspattern' => '^painter2(\.loni\.org)?$', 'sourcebasedir' => '/work/@USER@', 'optionlist' => 'queenbee-mvapich2.cfg', 'scriptfile' => 'queenbee-mvapich2.sh', # 'disabled-thorns' => ' # ExternalLibraries/PETSc # CactusElliptic/EllPETSc # TAT/TATPETSc # LSUDevelopment/WaveToyNoGhostsPETSc # CarpetThorns/LSUPETSc # CarpetThorns/LSUPoisson # CarpetThorns/Lichnerowicz', 'make' => 'make -j4', 'basedir' => '/work/@USER@/simulations', 'cpu' => 'Dual Core Xeon 64-bit Processors', 'cpufreq' => 2.33, 'flop/cycle' => 4, 'ppn' => 4, 'spn' => 2, 'mpn' => 1, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 4096, 'nodes' => 48, # while there are 128 nodes, only 48 may be used 'min-ppn' => 4, 'allocation' => 'loni_numrel05', 'queue' => 'checkpt', 'maxwalltime' => '72:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)[.]painter2', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/var/scratch/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.olive.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.olive.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.olive.OU /var/spool/torque/spool/@JOB_ID@.olive.ER', }; my $mdb_pelican = { 'nickname' => 'pelican', 'name' => 'Pelican', 'location' => 'LSU', 'description' => 'An IBM P5 at LSU', 'webpage' => 'http://www.hpc.lsu.edu/systems/system.php?system=Pelican', 'status' => 'production', 'hostname' => 'pelican.lsu.edu', 'rsynccmd' => '/work/default/eschnett/rsync-3.0.4/bin/rsync', 'rsyncopts' => '-c', # don't trust file time stamps 'aliaspattern' => '^pelican(\.lsu\.edu)?|peg304(\.hpc\.lsu\.edu)?$', 'sourcebasedir' => '/work/default/@USER@', 'optionlist' => 'pelican.cfg', 'scriptfile' => 'pelican.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz ExternalLibraries/CGNS ExternalLibraries/curl LSUThorns/Twitter ExternalLibraries/flickcurl LSUThorns/Flickr ExternalLibraries/HYPRE ExternalLibraries/libjpeg CactusIO/IOJpeg ExternalLibraries/libxml2 ExternalLibraries/OpenSSL', 'make' => 'mkdir -p /work/default/@USER@/tmp && env TMPDIR=/work/default/@USER@/tmp gmake -j4', 'basedir' => '/work/default/@USER@/simulations', 'cpu' => 'Power5+', 'cpufreq' => 1.9, 'flop/cycle' => 4, 'ppn' => 16, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 16, 'num-threads' => 8, # unknown 'memory' => 32768, 'nodes' => 16, # TODO: there are also 13 older Power5 nodes 'min-ppn' => 16, 'allocation' => 'NoAllocation', 'queue' => 'MP5L', 'maxwalltime' => '168:00:00', 'submit' => 'llsubmit @SCRIPTFILE@', 'getstatus' => 'llq @JOB_ID@', 'stop' => 'llcancel @JOB_ID@', 'submitpattern' => '"(.*)"', 'statuspattern' => '^ *@JOB_ID@', 'queuedpattern' => ' I ', 'runningpattern' => ' R ', 'scratchdir' => 'scratchdir', # unknown 'exechost' => 'llq -f \'%h\' @JOB_ID@b | tail +3 | head -1', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => '/opt/freeware/bin/tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_peyote = { 'nickname' => 'peyote', 'name' => 'Peyote', 'location' => 'AEI', 'description' => 'The old AEI numrel cluster', 'webpage' => 'http://supercomputers.aei.mpg.de/peyote', 'status' => 'outdated', 'hostname' => 'peyote.aei.mpg.de', 'aliaspattern' => '^(peyote|peyoteb|peyotec)(\.aei\.mpg\.de)?$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'peyote-mpich.cfg', 'scriptfile' => 'peyote-mpich.sh', 'make' => 'ssh peyoteb "cd $(pwd) && make -j4"', 'basedir' => '/data2/@USER@/simulations', 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 2, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 2, 'num-threads' => 2, 'memory' => 4096, 'nodes' => 128, # TODO: there are also 64+48 new nodes 'queue' => 'old', 'maxwalltime' => '2400:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/scratch/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh $(echo @EXECHOST@ | sed -e "s/ic/kali/") cat /var/spool/pbs/spool/@JOB_ID@.peyot.OU', 'stderr' => 'ssh $(echo @EXECHOST@ | sed -e "s/ic/kali/") cat /var/spool/pbs/spool/@JOB_ID@.peyot.ER', 'stdout-follow' => 'ssh $(echo @EXECHOST@ | sed -e "s/ic/kali/") tail -n 100 -f /var/spool/pbs/spool/@JOB_ID@.peyot.OU /var/spool/pbs/spool/@JOB_ID@.peyot.ER', }; my $mdb_philip = { 'nickname' => 'philip', 'name' => 'Philip', 'location' => 'LSU', 'description' => '37 mixed compute node cluster meant for single node use', 'webpage' => 'http://www.hpc.lsu.edu/help/philipguide.php', 'status' => 'experimental', 'hostname' => 'philip1.hpc.lsu.edu', 'aliaspattern' => '^(philip1|philip\d\d\d)(\.hpc\.lsu\.edu)?$', #'sourcebasedir' => '/home/@USER@', 'sourcebasedir' => '/project/numrel/@USER@/philip', 'optionlist' => 'philip-mpich.cfg', 'scriptfile' => 'philip-mpich.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz EinsteinAnalysis/AHFinder', 'make' => 'make -j8', 'basedir' => '/work/@USER@/philip/simulations', 'cpu' => 'Intel(R) Xeon(R) CPU X5570', 'cpufreq' => 2.93, 'flop/cycle' => 2, # or 4 flop/cycle for 8 threads 'ppn' => 8, 'spn' => 1, 'mpn' => 1, 'max-num-threads' => 16, 'num-threads' => 8, 'memory' => 24576, # there are also nodes with 48 and 96 GB 'nodes' => 36, 'min-ppn' => 8, 'allocation' => 'NoAllocation', 'queue' => 'workq', # there are also "single" and "bigmem" queues 'maxwalltime' => '72:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)[.]philip', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/var/scratch/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.philip1.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.philip1.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.philip1.OU /var/spool/torque/spool/@JOB_ID@.philip1.ER', }; my $mdb_poseidon = { 'nickname' => 'poseidon', 'name' => 'Poseidon', 'location' => 'LONI, Tulane', 'description' => 'The LONI Linux cluster at UNO', 'webpage' => 'http://www.loni.org/systems/system.php?system=Poseidon', 'status' => 'production', 'hostname' => 'poseidon.loni.org', 'rsynccmd' => '/home/eschnett/rsync-3.0.6/bin/rsync', 'aliaspattern' => '^poseidon2(\.loni\.org)?$', 'sourcebasedir' => '/work/@USER@', 'optionlist' => 'queenbee-mvapich2.cfg', 'scriptfile' => 'queenbee-mvapich2.sh', # 'disabled-thorns' => ' # ExternalLibraries/PETSc # CactusElliptic/EllPETSc # TAT/TATPETSc # LSUDevelopment/WaveToyNoGhostsPETSc # CarpetThorns/LSUPETSc # CarpetThorns/LSUPoisson # CarpetThorns/Lichnerowicz', 'make' => 'make -j4', 'basedir' => '/work/@USER@/simulations', 'cpu' => 'Dual Core Xeon 64-bit Processors', 'cpufreq' => 2.33, 'flop/cycle' => 4, 'ppn' => 4, 'spn' => 2, 'mpn' => 1, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 4096, 'nodes' => 64, # while there are 128 nodes, only 64 may be used 'min-ppn' => 4, 'allocation' => 'loni_numrel05', 'queue' => 'checkpt', 'maxwalltime' => '72:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)[.]poseidon2', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/var/scratch/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.posei.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.posei.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.posei.OU /var/spool/torque/spool/@JOB_ID@.posei.ER', }; my $mdb_prism = { 'nickname' => 'prism', 'name' => 'Prism', 'location' => 'LITE', 'description' => 'One of the frontends of the large SGI Altix of LITE', 'webpage' => 'http://www.lite3d.com/', 'status' => 'experimental', 'hostname' => '69.1.166.227', # yes, there is no host name 'aliaspattern' => '^prism[123](\.LITE|\.louisiana\.edu)?$', 'sourcebasedir' => '/store/home/@USER@', 'optionlist' => 'prism.cfg', 'scriptfile' => 'prism.sh', 'make' => 'make -j8', # front end has 16 CPUs 'basedir' => '/store/home/@USER@/simulations', 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 16, # the Prisms have 16 CPUs 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 16, 'num-threads' => 16, # unknown 'memory' => 98304, # 96 GB 'nodes' => 1, 'min-ppn' => 16, 'submit' => 'sh @SCRIPTFILE@ < /dev/null > /dev/null 2> /dev/null & echo $!', 'getstatus' => 'ps @JOB_ID@', 'stop' => 'kill @JOB_ID@', 'submitpattern' => '(.*)', 'statuspattern' => '^ *@JOB_ID@ ', 'queuedpattern' => '$^', # never queued 'runningpattern' => '^', # always running 'scratchdir' => 'scratchdir', 'exechost' => 'echo localhost', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_q = { 'nickname' => 'q', 'name' => 'Q', 'location' => 'CCT', 'description' => 'Ed\'s workstation', 'status' => 'personal', 'hostname' => 'q.cct.lsu.edu', 'aliaspattern' => '^q\.cct\.lsu\.edu?$', 'sourcebasedir' => '/Users/@USER@', 'optionlist' => 'q.cfg', 'scriptfile' => 'q.sh', 'make' => 'make', 'basedir' => '/Users/@USER@/simulations', 'quota' => 200, # don't use all disk space 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 4, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 8192, 'nodes' => 1, 'submit' => 'sh @SCRIPTFILE@ < /dev/null > /dev/null 2> /dev/null & echo $!', 'getstatus' => 'ps @JOB_ID@', 'stop' => 'kill @JOB_ID@', 'submitpattern' => '(.*)', 'statuspattern' => '^ *@JOB_ID@ ', 'queuedpattern' => '$^', # never queued 'runningpattern' => '^', # always running 'scratchdir' => 'scratchdir', 'exechost' => 'echo localhost', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_queenbee = { 'nickname' => 'queenbee', 'name' => 'Queen Bee', 'location' => 'LONI, LSU', 'description' => 'The large LONI Linux cluster', 'webpage' => 'http://www.loni.org/systems/system.php?system=QueenBee', 'status' => 'production', 'hostname' => 'qb4.loni.org', 'rsynccmd' => '/home/eschnett/rsync-3.0.6/bin/rsync', #'sshcmd' => 'gsissh', #'localsshsetup' => 'test $(grid-proxy-info -timeleft 2> /dev/null) -gt 0 2> /dev/null || MYPROXY_SERVER=myproxy.teragrid.org MYPROXY_SERVER_PORT=7514 myproxy-logon -T -l @USER@', #'sshsetup' => 'source /etc/profile', 'aliaspattern' => '^qb[0-9](\.loni\.org)?$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'queenbee-mvapich2.cfg', 'scriptfile' => 'queenbee-mvapich2.sh', 'make' => 'make -j4', 'basedir' => '/scratch/@USER@/simulations', 'cpu' => 'Quad Core Xeon 64-bit Processors', 'cpufreq' => 2.33, 'flop/cycle' => 4, 'ppn' => 8, 'spn' => 2, 'mpn' => 1, 'max-num-threads' => 8, 'num-threads' => 8, 'memory' => 8192, 'nodes' => 256, # there are 668 nodes, but not all can be used 'min-ppn' => 8, 'allocation' => 'loni_numrel05', # prefer the LONI allocation; we # also have a TeraGrid allocation # 'TG-MCA02N014' 'queue' => 'checkpt', 'maxwalltime' => '48:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)[.]qb2', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/var/scratch/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.qb2.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.qb2.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.qb2.OU /var/spool/torque/spool/@JOB_ID@.qb2.ER', }; my $mdb_ranger = { 'nickname' => 'ranger', 'name' => 'Ranger', 'location' => 'TACC', 'description' => 'A very large Linux cluster at TACC', 'webpage' => 'http://www.tacc.utexas.edu/services/userguides/ranger/', 'status' => 'production', 'hostname' => 'login4.ranger.tacc.utexas.edu', 'rsynccmd' => '/share/home/00507/eschnett/rsync-3.0.7/bin/rsync', 'sshsetup' => 'source /etc/profile && source /usr/local/etc/profile', 'aliaspattern' => '^login[1234](\.ranger\.tacc\.utexas\.edu)?$', 'sourcebasedir' => '/work/00507/@USER@', 'optionlist' => 'ranger-mvapich2.cfg', 'scriptfile' => 'ranger-mvapich2.sh', 'disabled-thorns' => ' ExternalLibraries/OpenSSL', 'make' => 'make -j8', 'basedir' => '/scratch/00507/@USER@/simulations', 'cpu' => 'AMD Opteron Quad-Core 64-bit processors', 'cpufreq' => 2.3, 'flop/cycle' => 4, 'ppn' => 16, 'spn' => 4, 'mpn' => 4, 'max-num-threads' => 16, 'num-threads' => 4, # 4 is faster than 16 'memory' => 32768, 'nodes' => 768, # while there are 3936 nodes, only 768 may be used 'min-ppn' => 16, 'allocation' => 'TG-MCA02N014', # 'allocation' => 'TG-ASC090007', 'queue' => 'long', # queue "long" allows only <=1024 nodes; # queue "large" allows >1024 nodes, but only 24h 'maxwalltime' => '48:00:00', 'maxqueueslots' => 49, 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat -u @USER@ | awk \'$1 == @JOB_ID@ {print $1,$5}\'', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => 'Your job ([[:digit:]]+) \(.*?\) has been submitted', 'statuspattern' => '^@JOB_ID@[ \t]', 'queuedpattern' => '^@JOB_ID@[ \t]+(qw|hqw)', 'runningpattern' => '^@JOB_ID@[ \t]+r', 'scratchdir' => 'scratchdir', # unknown 'exechost' => 'head -n 1 SIMFACTORY/NODES', 'exechostpattern' => '^(\S+)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_santaka = { 'nickname' => 'santaka', 'name' => 'Santaka', 'location' => 'LSU', 'description' => 'An SGI Altix at LSU', 'webpage' => 'http://www.hpc.lsu.edu/systems/system.php?system=Santaka', 'status' => 'outdated', 'hostname' => 'santaka.cct.lsu.edu', 'trampoline' => 'is', 'aliaspattern' => '^santaka[12](\.cct\.lsu\.edu)?$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'santaka.cfg', 'scriptfile' => 'santaka.sh', 'make' => 'make -j2', 'basedir' => '/home/@USER@/simulations', 'cpu' => 'Intel Itanium 2', 'cpufreq' => 1.5, 'flop/cycle' => 4, 'ppn' => 30, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 30, 'num-threads' => 8, # 8 should be faster than 30 'memory' => 131072, # 128 GB 'nodes' => 1, 'min-ppn' => 1, 'queue' => 'workq', 'maxwalltime' => '48:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/tmp/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.santak.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.santak.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.santak.OU /var/spool/torque/spool/@JOB_ID@.santak.ER', }; my $mdb_sicortex = { 'nickname' => 'sicortex', 'name' => 'SiCortex', 'location' => 'SiCortex, Houston', 'description' => 'SiCortex machine', 'webpage' => 'http://sicortex.com/', 'status' => 'outdated', 'hostname' => 'hou-snow', 'iomachine' => 'sicortex1', 'trampoline' => 'sicortex1', 'aliaspattern' => '^sci-m8n6\.scsystem$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'sicortex.cfg', 'scriptfile' => 'sicortex.sh', 'make' => 'make -j2', 'basedir' => '/home/@USER@/simulations', 'cpu' => 'SiCortex ICE9B V1.0 FPU V0.1', 'cpufreq' => 0.7, 'flop/cycle' => undef, 'ppn' => 6, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 6, 'num-threads' => 6, 'memory' => 4096, 'nodes' => 235, # or is it 238? 'min-ppn' => 6, 'submit' => 'sh @SCRIPTFILE@ < /dev/null > /dev/null 2> /dev/null & echo $!', 'getstatus' => 'ps @JOB_ID@', # TODO: use squeue 'stop' => 'kill @JOB_ID@', # TODO: use scancel 'submitpattern' => '(.*)', 'statuspattern' => '^ *@JOB_ID@ ', 'queuedpattern' => '$^', # never queued 'runningpattern' => '^', # always running 'scratchdir' => '/home/@USER@/scratch', 'exechost' => 'echo localhost', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_sicortex1 = { 'nickname' => 'sicortex1', 'name' => 'SiCortex1', 'location' => 'SiCortex firewall, Houston', 'description' => 'First firewall for SiCortex machine', 'webpage' => 'http://sicortex.com/', 'status' => 'trampoline', 'hostname' => 'ssh.houston.sicortex.com', 'aliaspattern' => '^hou-IT$', 'sourcebasedir' => '/home/@USER@/eschnett', 'optionlist' => 'no-such-optionlist.cfg', 'scriptfile' => 'no-such-scriptfile.sh', 'basedir' => '/home/@USER@/eschnett/simulations', 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 0, # n/a 'spn' => undef, 'mpn' => undef, 'max-num-threads' => undef, 'num-threads' => undef, 'memory' => undef, 'nodes' => 0, # n/a 'submit' => 'no-such-command', 'getstatus' => 'no-such-pattern', 'stop' => 'no-such-command', 'submitpattern' => 'no-such-pattern', 'statuspattern' => 'no-such-pattern', 'queuedpattern' => 'no-such-pattern', 'runningpattern' => 'no-such-pattern', 'scratchdir' => 'no-such-directory', }; my $mdb_sicortex2 = { 'nickname' => 'sicortex2', 'name' => 'SiCortex2', 'location' => 'SSiCortex firewall, Houston', 'description' => 'Second firewall for SiCortex machine', 'webpage' => 'http://sicortex.com/', 'status' => 'trampoline', 'hostname' => 'hou-ssp', 'iomachine' => 'sicortex1', 'trampoline' => 'sicortex1', 'aliaspattern' => '^hou-sc\d\d\d\d-ssp\.houston\.sicortex\.com$', 'sourcebasedir' => '/home/@USER@/eschnett', 'optionlist' => 'no-such-optionlist.cfg', 'scriptfile' => 'no-such-scriptfile.sh', 'basedir' => '/home/@USER@/eschnett/simulations', 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 0, # n/a 'spn' => undef, 'mpn' => undef, 'max-num-threads' => undef, 'num-threads' => undef, 'memory' => undef, 'nodes' => 0, # n/a 'submit' => 'no-such-command', 'getstatus' => 'no-such-pattern', 'stop' => 'no-such-command', 'submitpattern' => 'no-such-pattern', 'statuspattern' => 'no-such-pattern', 'queuedpattern' => 'no-such-pattern', 'runningpattern' => 'no-such-pattern', 'scratchdir' => 'no-such-directory', }; my $mdb_spider = { 'nickname' => 'spider', 'name' => 'Spider', 'location' => 'LONI, LSU', 'description' => 'A visualisation workstation at LSU', 'status' => 'storage', 'hostname' => 'spider.loni.org', 'trampoline' => 'is', 'aliaspattern' => '^spider\.loni\.org$', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'no-such-optionlise.cfg', 'scriptfile' => 'no-such-scriptfile.sh', 'make' => 'make', 'basedir' => '/scratch/@USER@/simulations', 'cpu' => 'Intel(R) Xeon(R) CPU E5335 @ 2.00GHz', 'cpufreq' => 2.0, 'flop/cycle' => undef, 'ppn' => 8, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => undef, 'num-threads' => undef, 'memory' => 16384, 'nodes' => 1, 'submit' => 'sh @SCRIPTFILE@ < /dev/null > /dev/null 2> /dev/null & echo $!', 'getstatus' => 'ps @JOB_ID@', 'stop' => 'kill @JOB_ID@', 'submitpattern' => '(.*)', 'statuspattern' => '^ *@JOB_ID@ ', 'queuedpattern' => '$^', # never queued 'runningpattern' => '^', # always running 'scratchdir' => 'scratchdir', 'exechost' => 'echo localhost', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_steele = { 'nickname' => 'steele', 'name' => 'Steele', 'location' => 'Purdue', 'description' => 'A Linux cluster at Purdue', 'webpage' => 'http://www.rcac.purdue.edu/userinfo/resources/steele/', 'status' => 'experimental', 'hostname' => 'tg-steele.rcac.purdue.edu', 'aliaspattern' => '^tg-steele\.rcac\.purdue\.edu$', 'sourcebasedir' => '/autohome/u114/@USER@', 'optionlist' => 'steele.cfg', 'scriptfile' => 'steele.sh', 'make' => 'make -j4', 'basedir' => '/scratch/scratch96/e/${USER}/simulations', 'cpu' => 'Dual 2.33 GHz Quad-Core Intel E5410', 'cpufreq' => 2.33, 'flop/cycle' => undef, # ? 'ppn' => 8, 'spn' => 2, # ? 'mpn' => 1, # ? 'max-num-threads' => 8, 'num-threads' => 8, # ? 'memory' => 16384, 'nodes' => 224, # there 624 nodes altogether 'min-ppn' => 8, 'allocation' => 'TG-MCA02N014', 'queue' => 'tg_workq', # there is also 'tg_short', 'standby' and 'standby-8 # tg_workq: 224 nodes, 16 GB Gigabit Ethernet, maxwalltime 720h # tg_short: 3 nodes, 16 GB Gigabit Ethernet, maxwalltime 72h # standby: 6424 nodes, unknown interconnect, maxwalltime 4h # standby-8: 400 nodes, unknown interconnect, maxwalltime 8h 'maxwalltime' => '720:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)[.]tezpur2', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/scratch/scratch96/e/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/pbs/spool/@JOB_ID@.steele.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/pbs/spool/@JOB_ID@.steele.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/pbs/spool/@JOB_ID@.steele.OU /var/spool/pbs/spool/@JOB_ID@.steele.ER', }; my $mdb_surveyor = { 'nickname' => 'surveyor', 'name' => 'Surveyor', 'location' => 'ALCF', 'description' => 'Blue Gene/P', 'webpage' => 'http://www.alcf.anl.gov/resources/storage.php', 'status' => 'experimental', 'hostname' => 'surveyor.alcf.anl.gov', 'rsynccmd' => '/home/eschnett/rsync-3.0.4/bin/rsync', 'aliaspattern' => '^login[0-9]\.surveyor', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'intrepid-xlc.cfg', 'scriptfile' => 'intrepid-xlc.sh', 'disabled-thorns' => ' EinsteinInitialData/Meudon_Bin_BH EinsteinInitialData/Meudon_Bin_NS EinsteinInitialData/Meudon_Mag_NS ExternalLibraries/CGNS ExternalLibraries/curl LSUThorns/Twitter ExternalLibraries/flickcurl LSUThorns/Flickr ExternalLibraries/libxml2 ExternalLibraries/LORENE ExternalLibraries/OpenSSL', 'make' => 'make -j2', 'basedir' => '/pvfs-surveyor/@USER@/simulations', 'cpu' => 'PowerPC 450', 'cpufreq' => 0.85, 'flop/cycle' => 4, 'ppn' => 4, # one partition has 64 nodes 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 2048, 'nodes' => 1024, # Surveyor has 1024 nodes 'min-ppn' => 4, 'allocation' => 'petascaling', 'queue' => 'default', 'maxwalltime' => '1:00:00', 'maxqueueslots' => 20, # TODO: Use a script file; see email with "ALCF" in subject 'submit' => 'chmod a+x @SCRIPTFILE@ && qsub ' . ' -A @ALLOCATION@' . ' -q @QUEUE@' . ' -t @WALLTIME@' . ' --mode @(@NUM_THREADS@==4 ? "smp" : @NUM_THREADS@==2 ? "dual" : "vn")@' . ' -n @NODES@' . ' -M @USER@@alcf.anl.gov' . ' -O @SIMULATION_NAME@' . ' -o @RUNDIR@/@SIMULATION_NAME@.out' . ' -e @RUNDIR@/@SIMULATION_NAME@.err' . ' --cwd @RUNDIR@-active' . ' --env=OMP_NUM_THREADS=@NUM_THREADS@' . ' --env=BG_MAPPING=TXYZ' . ' @RUNDIR@-active/@EXECUTABLE@ -L 3 @PARFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' queued ', 'runningpattern' => ' running ', 'scratchdir' => 'scratchdir', 'exechost' => undef, 'exechostpattern' => undef, 'stdout' => undef, 'stderr' => undef, 'stdout-follow' => undef, }; my $mdb_tezpur = { 'nickname' => 'tezpur', 'name' => 'Tezpur', 'location' => 'LSU', 'description' => 'The LSU HPC Linux cluster', 'webpage' => 'http://www.hpc.lsu.edu/systems/system.php?system=Tezpur', 'status' => 'production', 'hostname' => 'tezpur1.hpc.lsu.edu', 'rsynccmd' => '/home/eschnett/rsync-3.0.2/bin/rsync', 'aliaspattern' => '^tezpur1(\.hpc\.lsu\.edu)?$', 'sourcebasedir' => '/project/numrel/@USER@/tezpur', 'optionlist' => 'tezpur-mvapich2.cfg', 'scriptfile' => 'tezpur-mvapich2.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz', 'make' => 'make -j4', 'basedir' => '/work/@USER@/tezpur/simulations', 'cpu' => 'Dual Core Xeon 64-bit Processors', 'cpufreq' => 2.33, 'flop/cycle' => 4, 'ppn' => 4, 'spn' => 2, 'mpn' => 1, 'min-ppn' => 1, 'max-num-threads' => 30, 'num-threads' => 4, 'memory' => 4096, 'nodes' => 180, # while there are 360 nodes, only 180 may be used 'min-ppn' => 4, 'allocation' => 'NoAllocation', 'queue' => 'checkpt', 'maxwalltime' => '72:00:00', 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', #'showstart' => 'showstart @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '([[:digit:]]+)[.]tezpur2', 'statuspattern' => '^@JOB_ID@[. ]', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => '/var/scratch/${USER}/${PBS_JOBID}', 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', 'stdout' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.tezpu.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/torque/spool/@JOB_ID@.tezpu.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/torque/spool/@JOB_ID@.tezpu.OU /var/spool/torque/spool/@JOB_ID@.tezpu.ER', }; my $mdb_tgsdsc = { 'nickname' => 'tgsdsc', 'name' => 'TGSDSC', 'location' => 'SDSC', 'description' => 'The TeraGrid cluster at SDSC', 'webpage' => 'http://www.sdsc.edu/us/resources/ia64/', 'status' => 'experimental', 'hostname' => 'tg-login.sdsc.teragrid.org', 'aliaspattern' => '^tg-login(\.sdsc\.teragrid\.org)?$', 'sourcebasedir' => '/users/@USER@', 'optionlist' => 'tgsdsc.cfg', 'scriptfile' => 'tgsdsc.sh', 'make' => 'gmake -j2', 'basedir' => '/users/@USER@/simulations', 'cpu' => 'Intel Itanium 2', 'cpufreq' => 1.5, 'flop/cycle' => 4, 'ppn' => 2, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 2, 'num-threads' => 2, 'memory' => 4096, 'nodes' => 262, 'min-ppn' => undef, 'allocation' => undef, # unknown 'queue' => 'XXX', # TODO: check this 'maxwalltime' => undef, # TODO: check this 'submit' => 'qsub @SCRIPTFILE@', 'getstatus' => 'qstat @JOB_ID@', 'stop' => 'qdel @JOB_ID@', 'submitpattern' => '"(.*)"', 'statuspattern' => '^ *@JOB_ID@', 'queuedpattern' => ' Q ', 'runningpattern' => ' R ', 'scratchdir' => 'scratchdir', # unknown 'exechost' => 'qstat -f @JOB_ID@', 'exechostpattern' => 'exec_host = (\w+)/', # TODO: check the PBS spool directory names 'stdout' => 'ssh @EXECHOST@ cat /var/spool/PBS/spool/@JOB_ID@.XXX.OU', 'stderr' => 'ssh @EXECHOST@ cat /var/spool/PBS/spool/@JOB_ID@.XXX.ER', 'stdout-follow' => 'ssh @EXECHOST@ tail -n 100 -f /var/spool/PBS/spool/@JOB_ID@.XXX.OU /var/spool/PBS/spool/@JOB_ID@.XXX.ER', }; my $mdb_tungsten = { 'nickname' => 'tungsten', 'name' => 'Tungsten', 'location' => 'NCSA', 'description' => 'A large Linux cluster at NCSA', 'webpage' => 'http://www.ncsa.uiuc.edu/UserInfo/Resources/Hardware/XeonCluster/', 'status' => 'outdated', 'hostname' => 'tungsten.ncsa.uiuc.edu', 'aliaspattern' => '^tun[abcde](\.ncsa\.uiuc\.edu)?$', 'sourcebasedir' => '/u/ac/@USER@', 'optionlist' => 'tungsten.cfg', 'scriptfile' => 'tungsten.sh', 'make' => 'make -j2', # Temporary solution for licence server problems # 'make' => 'env LM_LICENSE_FILE=1708@barbossa make -j2', 'basedir' => '/u/ac/@USER@/scratch-global/simulations', 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 2, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 2, 'num-threads' => 2, 'memory' => 3072, 'nodes' => 512, # suggested maximum use 'min-ppn' => 2, 'allocation' => 'out', 'queue' => 'normal', 'maxwalltime' => '48:00:00', 'submit' => 'bsub < @SCRIPTFILE@', 'getstatus' => 'bjobs @JOB_ID@', 'stop' => 'bkill @JOB_ID@', 'submitpattern' => '<([[:digit:]]*)>', 'statuspattern' => '^ *@JOB_ID@ (?!.* DONE )', 'queuedpattern' => ' PEND ', 'runningpattern' => ' RUN ', 'scratchdir' => '/cfs/scratch/batch/${LSB_JOBID}', 'exechost' => 'false', 'exechostpattern' => '$^', 'stdout' => 'bpeek @JOB_ID@', # TODO: output only until "<< output # from stdout >>" 'stderr' => 'true', # TODO: output only from "<< output # from stdout >>" until "<< output # from sterr >>" 'stdout-follow' => 'bpeek -f @JOB_ID@', }; my $mdb_vip = { 'nickname' => 'vip', 'name' => 'VIP', 'location' => 'RZG', 'description' => 'An IBM Power6 at the RZG', 'webpage' => 'https://www.rzg.mpg.de/computing/hardware/Power6/', 'status' => 'production', 'hostname' => 'vip.rzg.mpg.de', 'rsynccmd' => '/u/eschnett/bin/rsync', 'sshsetup' => 'export PATH=${PATH}:/afs/ipp/rs_aix53/bin:/afs/ipp/rs_aix53/soft/gnu/bin:/afs/ipp/rs_aix53/soft/X11/bin', 'aliaspattern' => '^vip(\d\d\d)?(i)?(\.rzg\.mpg\.de)$', 'sourcebasedir' => '/u/@USER@', 'optionlist' => 'vip.cfg', 'scriptfile' => 'vip.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz ExternalLibraries/CGNS ExternalLibraries/curl LSUThorns/Twitter ExternalLibraries/flickcurl LSUThorns/Flickr ExternalLibraries/HYPRE ExternalLibraries/libjpeg CactusIO/IOJpeg ExternalLibraries/libxml2 ExternalLibraries/OpenSSL', 'make' => 'gmake -j16', # there are 32 processors with 2 threads each 'basedir' => '/ptmp/@USER@/simulations', 'cpu' => 'Power6', 'cpufreq' => 4.7, 'flop/cycle' => 2, # the 2 threads share 4 flop/cycle 'ppn' => 64, # 32 processors with 2 threads each 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 64, 'num-threads' => 16, # 1 MCM = 4 DCM = 8 cores = 16 threads 'memory' => 65536, # some nodes have 128 GB 'nodes' => 205, 'min-ppn' => 64, 'maxwalltime' => '24:00:00', 'submit' => 'llsubmit @SCRIPTFILE@', 'getstatus' => 'llq p6io1.@JOB_ID@', 'stop' => 'llcancel p6io1.@JOB_ID@', 'submitpattern' => '".*[.](\d+)"', 'statuspattern' => '^p6io1[.]@JOB_ID@', 'queuedpattern' => ' I ', 'runningpattern' => ' R ', 'scratchdir' => '/ptmp/@USER@/@JOB_ID@', 'exechost' => undef, 'exechostpattern' => undef, 'stdout' => undef, 'stderr' => undef, 'stdout-follow' => undef, }; my $mdb_wilson = { 'nickname' => 'wilson', 'name' => 'Wilson', 'location' => 'Caltech', 'description' => 'Christian D. Ott\'s workstation', 'webpage' => 'http://www.physicstoday.org/obits/notice_180.shtml', 'status' => 'personal', 'hostname' => 'wilson.tapir.caltech.edu', 'rsynccmd' => '/home/schnetter/bin/rsync', 'aliaspattern' => '^wilson\.tapir\.caltech\.edu', 'sourcebasedir' => '/home/@USER@', 'optionlist' => 'wilson.cfg', 'scriptfile' => 'wilson.sh', 'make' => 'make -j4', 'basedir' => '/data/@USER@/simulations', 'cpu' => undef, 'cpufreq' => undef, 'flop/cycle' => undef, 'ppn' => 4, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 4, 'num-threads' => 4, 'memory' => 8192, 'nodes' => 1, 'submit' => 'sh @SCRIPTFILE@ < /dev/null > /dev/null 2> /dev/null & echo $!', 'getstatus' => 'ps @JOB_ID@', 'stop' => 'kill @JOB_ID@', 'submitpattern' => '(.*)', 'statuspattern' => '^ *@JOB_ID@ ', 'queuedpattern' => '$^', # never queued 'runningpattern' => '^', # always running 'scratchdir' => 'scratchdir', 'exechost' => 'echo localhost', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => 'tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; my $mdb_zeke = { 'nickname' => 'zeke', 'name' => 'Zeke', 'location' => 'LONI, UL Lafayette', 'description' => 'The LONI IBM P5 machine at UL Lafayette', 'webpage' => 'http://www.loni.org/systems/system.php?system=Zeke', 'status' => 'production', 'hostname' => 'zeke.loni.org', 'rsynccmd' => '/work/default/eschnett/rsync-3.0.4/bin/rsync', 'rsyncopts' => '-c', # don't trust file time stamps 'aliaspattern' => '^(zeke(\.loni\.org)?|l3f1n\d\d(\.sys\.loni\.org)?)$', 'sourcebasedir' => '/work/default/@USER@', 'optionlist' => 'pelican.cfg', 'scriptfile' => 'pelican.sh', 'disabled-thorns' => ' ExternalLibraries/PETSc CactusElliptic/EllPETSc TAT/TATPETSc LSUDevelopment/WaveToyNoGhostsPETSc CarpetThorns/LSUPETSc CarpetThorns/LSUPoisson CarpetThorns/Lichnerowicz ExternalLibraries/CGNS ExternalLibraries/curl LSUThorns/Twitter ExternalLibraries/flickcurl LSUThorns/Flickr ExternalLibraries/HYPRE ExternalLibraries/libjpeg CactusIO/IOJpeg ExternalLibraries/libxml2 ExternalLibraries/OpenSSL', 'make' => 'mkdir -p /work/default/@USER@/tmp && env TMPDIR=/work/default/@USER@/tmp gmake -j4', 'basedir' => '/mnt/lpfs.nfs302/@USER@/simulations', 'quota' => 20, 'cpu' => 'Power5+', 'cpufreq' => 1.9, 'flop/cycle' => 4, 'ppn' => 8, 'spn' => undef, 'mpn' => undef, 'max-num-threads' => 8, 'num-threads' => 8, # unknown 'memory' => 16384, 'nodes' => 13, 'min-ppn' => 8, 'allocation' => 'loni_numrel05', 'queue' => 'checkpt', 'maxwalltime' => '120:00:00', 'submit' => 'llsubmit @SCRIPTFILE@', 'getstatus' => 'llq @JOB_ID@', 'stop' => 'llcancel @JOB_ID@', 'submitpattern' => '"(.*)"', 'statuspattern' => '^ *@JOB_ID@', 'queuedpattern' => ' I ', 'runningpattern' => ' R ', 'scratchdir' => 'scratchdir', # unknown 'exechost' => 'llq -f \'%h\' @JOB_ID@b | tail +3 | head -1', 'exechostpattern' => '(.*)', 'stdout' => 'cat @SIMULATION_NAME@.out', 'stderr' => 'cat @SIMULATION_NAME@.err', 'stdout-follow' => '/opt/freeware/bin/tail -n 100 -f @SIMULATION_NAME@.out @SIMULATION_NAME@.err', }; # The database our %machine_database = ( 'abe' => $mdb_abe, 'ac' => $mdb_ac, 'athena' => $mdb_athena, 'bassi' => $mdb_bassi, 'bd' => $mdb_bd, 'beast' => $mdb_beast, 'belladonna' => $mdb_belladonna, 'bethe' => $mdb_bethe, 'bluedawg' => $mdb_bluedawg, 'bp' => $mdb_bp, 'carver' => $mdb_carver, 'catbert' => $mdb_catbert, 'celeritas' => $mdb_celeritas, 'cobalt' => $mdb_cobalt, 'damiana' => $mdb_damiana, 'damiana2' => $mdb_damiana2, 'datura' => $mdb_datura, 'della' => $mdb_della, 'ducky' => $mdb_ducky, 'ducky-globus' => $mdb_ducky_globus, 'eric' => $mdb_eric, 'franklin' => $mdb_franklin, 'gauss' => $mdb_gauss, 'genius' => $mdb_genius, 'hlrb2' => $mdb_hlrb2, 'hopper' => $mdb_hopper, 'hyperion' => $mdb_hyperion, 'intrepid' => $mdb_intrepid, 'is' => $mdb_is, 'kraken' => $mdb_kraken, 'lacumba' => $mdb_lacumba, 'lincoln' => $mdb_lincoln, 'lonestar' => $mdb_lonestar, 'louie' => $mdb_louie, 'mercury' => $mdb_mercury, 'mileva' => $mdb_mileva, 'mn' => $mdb_mn, 'neptune' => $mdb_neptune, 'nmi' => $mdb_nmi, 'numrel01' => $mdb_numrel[ 1], 'numrel02' => $mdb_numrel[ 2], 'numrel03' => $mdb_numrel[ 3], 'numrel04' => $mdb_numrel[ 4], 'numrel05' => $mdb_numrel[ 5], 'numrel06' => $mdb_numrel[ 6], 'numrel07' => $mdb_numrel[ 7], 'numrel08' => $mdb_numrel[ 8], 'numrel09' => $mdb_numrel[ 9], 'numrel10' => $mdb_numrel[10], 'oliver' => $mdb_oliver, 'painter' => $mdb_painter, 'pelican' => $mdb_pelican, 'peyote' => $mdb_peyote, 'philip' => $mdb_philip, 'poseidon' => $mdb_poseidon, 'prism' => $mdb_prism, 'q' => $mdb_q, 'queenbee' => $mdb_queenbee, 'ranger' => $mdb_ranger, 'santaka' => $mdb_santaka, 'sicortex' => $mdb_sicortex, 'sicortex1' => $mdb_sicortex1, 'sicortex2' => $mdb_sicortex2, 'spider' => $mdb_spider, 'steele' => $mdb_steele, 'surveyor' => $mdb_surveyor, 'tezpur' => $mdb_tezpur, 'tgsdsc' => $mdb_tgsdsc, 'tungsten' => $mdb_tungsten, 'vip' => $mdb_vip, 'wilson' => $mdb_wilson, 'zeke' => $mdb_zeke, ); sub array2string (\@) { my ($array) = @_; die if ! defined $array; return '[' . (join ',', @$array) . ']'; } sub hash2string (\%) { my ($hash) = @_; die if ! defined $hash; my @array; foreach my $key (sort keys %$hash) { push @array, $key . '=>' . $hash->{$key}; } return '{' . (join ',', @array) . '}'; } # Check one item. Add the default value for entries that are missing # and that have a default. sub check_item (\%$\%) { my ($description, $name, $entry) = @_; # The description, defining how the entry should look like if (! defined $description) { die "Argument 'description' not defined"; } # The name of the entry, so that the user can identify it if (! defined $name) { die "Argument 'name' not defined"; } # The entry to be checked if (! defined $entry) { die "Argument 'entry' not defined"; } # Walk through all keys in the description foreach my $key (keys %$description) { my $keydesc = $description->{$key}; my $necessity = $keydesc->{'necessity' }; my $type = $keydesc->{'type' }; my $pattern = $keydesc->{'pattern' }; my $default = $keydesc->{'default' }; my $example = $keydesc->{'example' }; my $description = $keydesc->{'description'}; # Self-test die if $necessity eq 'required' and defined $keydesc->{'default'}; die if $type ne 'string' and defined $keydesc->{'pattern'}; die if defined $keydesc->{'default'} and $type eq 'string' and defined $keydesc->{'pattern'} and $default !~ $pattern; die if $type eq 'string' and defined $keydesc->{'pattern'} and $example !~ $pattern; # General rule: keys that exist, but which are undefined, are # treated in the same way as keys which do not exist. This # allows "superfluous" keys to be present, which can serve as # comment to the reader. if (defined $entry->{$key}) { my $val = $entry->{$key}; # TODO: check type of $val if ($type eq 'string' && defined $pattern) { if ($val !~ $pattern) { die "Entry '$key' in item '$name' has the illegal value '$val', which does not match the pattern '$pattern'"; } } } else { if ($necessity eq 'required') { die "Required entry '$key' does not exist in item '$name'"; } if (defined $default) { my $val = $default; $entry->{$key} = $val; } } } # Check for superfluous keys my %keys; foreach my $key (keys %$entry) { $keys{$key} = 1; } foreach my $key (keys %$description) { delete $keys{$key}; } if (%keys) { die "Illegal entries [" . (join ', ', sort keys %keys) . "] found" } } # Check that the machine database is consistent and complete sub check () { # Check the description description (as a meta self test) foreach my $item (keys %$description_description) { check_item %$description_description, $item, %{$description_description->{$item}}; } if ((join "\n", sort @mdb_description_entries) ne (join "\n", sort keys %$mdb_description)) { die "Machine database description is inconsistent with the list of machine database description entries"; } # Check the machine database description (as self test) foreach my $item (keys %$mdb_description) { check_item %$description_description, $item, %{$mdb_description->{$item}}; } # Check the machine database foreach my $machine (keys %machine_database) { my $entry = $machine_database{$machine}; # The nickname must be the database key my $nickname = $entry->{'nickname'}; if (! defined $nickname) { die "Key 'nickname' is missing in mdb entry '$machine'"; } if ($nickname ne $machine) { die "Entry 'nickname' in mdb entry '$machine' does not have the value '$machine'"; } check_item %$mdb_description, $machine, %$entry; } } # Do not check the machine database yet -- need to process the user # database first 1;