<!--
Copyright (C) 2005-2007 The Regents of the University of California.
Copyright (C) 2008-2011 Lawrence Livermore National Security.
Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
Written by Morris Jette <jette1@llnl.gov> and Danny Auble <da@llnl.gov>

This file is part of Slurm, a resource management program.
For details, see <https://slurm.schedmd.com/>.

Slurm is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version.

Slurm is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
details.

You should have received a copy of the GNU General Public License along
with Slurm; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
-->
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Slurm System Configuration Tool</title>
<SCRIPT type="text/javascript">
<!--
function print_pair(name,value)
{
  if (value)
     return name + "=" + value
  return "#" + name + "="
}

function get_field(name,form)
{
  if (form.value)
     return name + "=" + form.value
  return "#" + name + "="
}

function get_field2(name,form)
{
  if (form.value)
     return name + "=" + form.value
  return ""
}

function get_radio_field_skipfirst(name,form)
{
  for (var i=1; i < form.length; i++)
  {
    if (form[i].checked)
    {
      return name + "=" + form[i].value
    }
  }
  return "#" + name + "="
}

function get_radio_value(form)
{
  for (var i=0; i < form.length; i++)
  {
    if (form[i].checked)
    {
      return form[i].value
    }
  }
}

function get_checkbox_value(form)
{
  comma_list = ""
  for (var i=0; i < form.length; i++)
  {
    if (form[i].checked)
    {
     if (comma_list != "")
      comma_list = comma_list +","
     comma_list = comma_list+form[i].value
    }
  }
  return comma_list
}

// When generating TaskPluginParam return the parameters that
// correspond to the checked task_plugin
function get_task_plugin_param()
{
  for (var i=0; i<document.config.task_plugin.length; i++) {
    if (document.config.task_plugin[i].checked) {
       if (document.config.task_plugin[i].value == "affinity") {
	 return "TaskPluginParam=" +
		get_radio_value(document.config.task_plugin_param)
       }
    }
  }
  return "#TaskPluginParam="
}

function hide_box()
{
   var popup = document.getElementById('out_box');
   popup.style.visibility = 'hidden';

}

function displayfile()
{
  var printme = "# slurm.conf file generated by configurator easy.html.<br>" +
   "# Put this file on all nodes of your cluster.<br>" +
   "# See the slurm.conf man page for more information.<br>" +
   "#<br>" +
   get_field("ClusterName",document.config.cluster_name) + "<br>" +
   "SlurmctldHost=" + document.config.control_machine.value + "<br>" +
   "# <br>" +
   "#MailProg=/bin/mail <br>" +
   print_pair("MpiDefault",get_radio_value(document.config.mpi_default)) + "<br>" +
   "#MpiParams=ports=#-# <br>" +
   "ProctrackType=proctrack/" + get_radio_value(document.config.proctrack_type) + "<br>" +
   "ReturnToService=" + get_radio_value(document.config.return_to_service) + "<br>" +
   "SlurmctldPidFile=" + document.config.slurmctld_pid_file.value + "<br>" +
   "#SlurmctldPort=6817 <br>" +
   "SlurmdPidFile=" + document.config.slurmd_pid_file.value + "<br>" +
   "#SlurmdPort=6818 <br>" +
   "SlurmdSpoolDir=" + document.config.slurmd_spool_dir.value + "<br>" +
   "SlurmUser=" + document.config.slurm_user.value + "<br>" +
   "#SlurmdUser=root <br>" +
   "StateSaveLocation=" + document.config.state_save_location.value + "<br>" +
   print_pair("SwitchType",get_radio_value(document.config.switch_type)) + "<br>" +
   "TaskPlugin=" + get_checkbox_value(document.config.task_plugin) + "<br>" +
   "# <br>" +
   "# <br>" +
   "# TIMERS <br>" +
   "#KillWait=30 <br>" +
   "#MinJobAge=300 <br>" +
   "#SlurmctldTimeout=120 <br>" +
   "#SlurmdTimeout=300 <br>" +
   "# <br>" +
   "# <br>" +
   "# SCHEDULING <br>" +
   "SchedulerType=sched/" + get_radio_value(document.config.sched_type) + "<br>" +
   "SelectType=select/" + get_radio_value(document.config.select_type) + "<br>" +
   "# <br>" +
   "# <br>" +
   "# LOGGING AND ACCOUNTING <br>" +
   print_pair("AccountingStorageType",get_radio_value(document.config.accounting_storage_type)) + "<br>" +
   "#JobAcctGatherFrequency=30 <br>" +
   print_pair("JobAcctGatherType",get_radio_value(document.config.job_acct_gather_type)) + "<br>" +
   "#SlurmctldDebug=info <br>" +
   get_field("SlurmctldLogFile",document.config.slurmctld_logfile) + "<br>" +
   "#SlurmdDebug=info <br>" +
   get_field("SlurmdLogFile",document.config.slurmd_logfile) + "<br>" +
   "# <br>" +
   "# <br>" +
   "# COMPUTE NODES <br>" +
   "NodeName=" + document.config.node_name.value +
   get_field2(" NodeAddr",document.config.node_addr) +
   get_field2(" CPUs",document.config.procs) +
   get_field2(" RealMemory",document.config.memory) +
   get_field2(" Sockets",document.config.sockets) +
   get_field2(" CoresPerSocket",document.config.cores_per_socket) +
   get_field2(" ThreadsPerCore",document.config.threads_per_core) +
   " State=UNKNOWN <br>" +
   "PartitionName=" + document.config.partition_name.value +
   " Nodes=ALL" +
   " Default=YES"+
   " MaxTime=" + document.config.max_time.value +
   " State=UP"

   //scroll(0,0);
   //var popup = document.getElementById('out_box');

   //popup.innerHTML = "<a href='javascript:hide_box();'>close</a><br>";
   //popup.innerHTML += "#BEGIN SLURM.CONF FILE<br><br>";
   //popup.innerHTML += printme;
   //popup.innerHTML += "<br><br>#END SLURM.CONF FILE<br>";
   //popup.innerHTML += "<a href='javascript:hide_box();'>close</a>";

   //popup.style.visibility = 'visible';

   // OLD CODE
   document.open();
   document.write(printme);
   document.close();
}

-->
</SCRIPT>
<!-- <div style='visibility:hidden;text-align:left;background:#ccc;border:1px solid black;position: absolute;left:100;z-index:1;padding:5;' id='out_box'></div> -->
</head>
<body>
<form name=config>
<H1>Slurm Version @SLURM_MAJOR@.@SLURM_MINOR@ Configuration Tool - Easy Version</H1>
<P>This form can be used to create a Slurm configuration file with
you controlling many of the important configuration parameters.</P>

<p>This is a simplified version of the Slurm configuration tool. This version
has fewer  options for creating a Slurm configuration file. The full version
of the Slurm configuration tool is available at
<a href="configurator.html">configurator.html</a>.</p>

<P><B>This tool supports Slurm version @SLURM_MAJOR@.@SLURM_MINOR@ only.</B>
Configuration files for other versions of Slurm should be built
using the tool distributed with it in <i>doc/html/configurator.html</i>.
Some parameters will be set to default values, but you can
manually edit the resulting <I>slurm.conf</I> as desired
for greater flexibility. See <I>man slurm.conf</I> for more
details about the configuration parameters.</P>

<P>Note the while Slurm daemons create log files and other files as needed,
it treats the lack of parent directories as a fatal error.
This prevents the daemons from running if critical file systems are
not mounted and will minimize the risk of cold-starting (starting
without preserving jobs).</P>

<P>Note that this configuration file must be installed on all nodes
in your cluster.</P>

<P>After you have filled in the fields of interest, use the
"Submit" button on the bottom of the page to build the <I>slurm.conf</I>
file. It will appear on your web browser. Save the file in text format
as <I>slurm.conf</I> for use by Slurm.

<P>For more information about Slurm, see
<A HREF="https://slurm.schedmd.com/slurm.html">https://slurm.schedmd.com/slurm.html</A>

<h2>Cluster Name</h2>
<input type="text" name="cluster_name" value="cluster"> <b>ClusterName</b>:
The name of your cluster. Using different names for each of your clusters is
important when using a single database to record information from multiple
Slurm-managed clusters.

<H2>Control Machines</H2>
Define the hostname of the computer on which the Slurm controller and
optional backup controller will execute.
Hostname values should should not be the fully qualified domain
name (e.g. use <I>tux</I> rather than <I>tux.abc.com</I>).
<P>
<input type="text" name="control_machine" value="linux0"> <B>SlurmctldHost</B>:
Primary Controller Hostname
<P>

<H2>Compute Machines</H2>
Define the machines on which user applications can run.
You can also specify addresses of these computers if desired
(defaults to their hostnames).
Only a few of the possible parameters associated with the nodes will
be set by this tool, but many others are available.
Executing the command <i>slurmd -C</i> on each compute node will print its
physical configuration (sockets, cores, real memory size, etc.), which
can be used in constructing the <i>slurm.conf</i> file.
All of the nodes will be placed into a single partition (or queue)
with global access. Many options are available to group nodes into
partitions with a wide variety of configuration parameters.
Manually edit the <i>slurm.conf</i> produced to exercise these options.
Node names and addresses may be specified using a numeric range specification.

<P>
<input type="text" name="node_name" value="linux[1-32]"> <B>NodeName</B>:
Compute nodes
<P>
<input type="text" name="node_addr"> <B>NodeAddr</B>: Compute node addresses
(optional)
<P>
<input type="text" name="partition_name" value="debug"> <B>PartitionName</B>:
Name of the one partition to be created
<P>
<input type="text" name="max_time" value="INFINITE"> <B>MaxTime</B>:
Maximum time limit of jobs in minutes or INFINITE
<P>
The following parameters describe a node's configuration.
Set a value for <B>CPUs</B>.
The other parameters are optional, but provide more control over scheduled resources:
<P>
<input type="text" name="procs" value="1"> <B>CPUs</B>: Count of processors
on each compute node.
If CPUs is omitted, it will be inferred from:
Sockets, CoresPerSocket, and ThreadsPerCore.
<P>
<input type="text" name="sockets" value="">
<B>Sockets</B>:
Number of physical processor sockets/chips on the node.
If Sockets is omitted, it will be inferred from:
CPUs, CoresPerSocket, and ThreadsPerCore.
<P>
<input type="text" name="cores_per_socket" value="">
<B>CoresPerSocket</B>:
Number of cores in a single physical processor socket.
The CoresPerSocket value describes physical cores, not
the logical number of processors per socket.
<P>
<input type="text" name="threads_per_core" value="">
<B>ThreadsPerCore</B>:
Number of logical threads in a single physical core.
<P>
<input type="text" name="memory" value=""> <B>RealMemory</B>: Amount
of real memory. This parameter is required when specifying Memory as a
consumable resource with the select/cons_tres plug-in. See below
under Resource Selection.
<P>

<H2>Slurm User</H2>
The Slurm controller (slurmctld) can run without elevated privileges,
so it is recommended that a user "slurm" be created for it. For testing
purposes any user name can be used.
<P>
<input type="text" name="slurm_user" value="slurm"> <B>SlurmUser</B>
<P>

<H2>State Preservation</H2>
Define the location of a directory where the slurmctld daemon saves its state.
This should be a fully qualified pathname which can be read and written to
by the Slurm user on both the control machine and backup controller (if configured).
The location of a directory where slurmd saves state should also be defined.
This must be a unique directory on each compute server (local disk).
The use of a highly reliable file system (e.g. RAID) is recommended.
<P>
<input type="text" name="state_save_location" value="/var/spool/slurmctld">
<b>StateSaveLocation</b>: Slurmctld state save directory
<P>
<input type="text" name="slurmd_spool_dir" value="/var/spool/slurmd">
<b>SlurmdSpoolDir</b>: Slurmd state save directory
<P>
Define when a non-responding (DOWN) node is returned to service.<BR>
Select one value for <B>ReturnToService</B>:<BR>
<input type="radio" name="return_to_service" value="0">
<B>0</B>: When explicitly restored to service by an administrator.<BR>
<input type="radio" name="return_to_service" value="1" checked>
<B>1</B>:Upon registration with a valid configuration only if it was set DOWN
due to being non-responsive.<BR>
<input type="radio" name="return_to_service" value="2">
<B>2</B>:Upon registration with a valid configuration.<BR>
<P>

<H2>Scheduling</H2>
Define the mechanism to be used for controlling job ordering.<BR>
Select one value for <B>SchedulerType</B>:<BR>
<input type="radio" name="sched_type" value="backfill" checked> <B>Backfill</B>:
FIFO with backfill<BR>
<input type="radio" name="sched_type" value="builtin">  <B>Builtin</B>: First-In
First-Out (FIFO)<BR>
<P>

<H2>Interconnect</H2>
Define the node interconnect used.<BR>
Select one value for <B>SwitchType</B>:<BR>
<input type="radio" name="switch_type" value="switch/hpe_slingshot"> <B>HPE
  Slingshot</B>: HPE Slingshot proprietary interconnect<BR>
<input type="radio" name="switch_type" value="" checked> <B>None</B>: No special
handling required (InfiniBand, Myrinet, Ethernet, etc.)<BR>
<P>

<H2>Default MPI Type</H2>
Specify the type of MPI to be used by default. Slurm will configure environment
variables accordingly. Users can over-ride this specification with an srun option.<BR>
Select one value for <B>MpiDefault</B>:<BR>
<input type="radio" name="mpi_default" value="mpi/pmi2"> <B>MPI-PMI2</B>
(For PMI2-supporting MPI implementations)<BR>
<input type="radio" name="mpi_default" value="mpi/pmix"> <B>MPI-PMIx</B>
(Exascale PMI implementation)<BR>
<input type="radio" name="mpi_default" value="" checked> <B>None</B>:
 This works for most other MPI types.<BR>
<P>

<H2>Process Tracking</H2>
Define the algorithm used to identify which processes are associated with a
given job. This is used signal, kill, and account for the processes associated
with a job step.<BR>
Select one value for <B>ProctrackType</B>:<BR>
<input type="radio" name="proctrack_type" value="cgroup" checked> <B>Cgroup</B>:  Use
Linux <i>cgroup</i> to create a job container and track processes.
Build a <i>cgroup.conf</i> file as well<BR>
<input type="radio" name="proctrack_type" value="linuxproc"> <B>LinuxProc</B>: Use
parent process ID records, processes can escape from Slurm control<BR>
<input type="radio" name="proctrack_type" value="pgid"> <B>Pgid</B>: Use Unix
Process Group ID, processes changing their process group ID can escape from Slurm
control<BR>
<P>

<H2>Resource Selection</H2>
Define resource (node) selection algorithm to be used.<BR>
Select one value for <B>SelectType</B>:<BR>
<input type="radio" name="select_type" value="cons_tres" checked>
<b>cons_tres</b>: Allocate individual processors, memory, GPUs, and other
trackable resources<br />
<input type="radio" name="select_type" value="linear">
<B>Linear</B>: Node-base
resource allocation, does not manage individual processor allocation<BR>
<P>

<H2>Task Launch</H2>
Define a task launch plugin. This may be used to
provide resource management within a node (e.g. pinning
tasks to specific processors).
Select one value for <B>TaskPlugin</B>:<BR>
<input type="checkbox" name="task_plugin" value="task/none"> <B>None</B>: No task launch actions<BR>
<input type="checkbox" name="task_plugin" value="task/affinity" checked> <B>Affinity</B>:
CPU affinity support
(see srun man pages for the --cpu-bind, --mem-bind, and -E options)<BR>
<input type="checkbox" name="task_plugin" value="task/cgroup" checked> <B>Cgroup</B>:
Allocated resources constraints enforcement using Linux Control Groups
(see cgroup.conf man page)
<P>

<H2>Event Logging</H2>
Slurmctld and slurmd daemons can each be configured with different
levels of logging verbosity from 0 (quiet) to 7 (extremely verbose).
Each may also be configured to use debug files. Use fully qualified
pathnames for the files.
<P>
<input type="text" name="slurmctld_logfile" value="/var/log/slurmctld.log">
<b>SlurmctldLogFile</b> (if empty, log goes to syslog)
<P>
<input type="text" name="slurmd_logfile" value="/var/log/slurmd.log">
<b>SlurmdLogFile</b> (if empty, log goes to syslog. String "%h" in name gets
replaced with hostname)
<P>

<H2>Job Accounting Gather</H2>
Slurm accounts for resource use per job.  System specifics can be polled
determined by system type<BR>
Select one value for <B>JobAcctGatherType</B>:<BR>
<input type="radio" name="job_acct_gather_type" value="" checked> <B>None</B>: No
job accounting<BR>
<input type="radio" name="job_acct_gather_type" value="jobacct_gather/cgroup"> <b>cgroup</b>:
Specific Linux cgroup information gathered, use with Linux systems only<br>
<input type="radio" name="job_acct_gather_type" value="jobacct_gather/linux"> <B>Linux</B>: Specific
Linux process table information gathered, use with Linux systems only<BR>

<H2>Job Accounting Storage</H2>
Used with the Job Accounting Gather Slurm can store the accounting information in many different fashions.  Fill in your systems choice here<BR>
Select one value for <B>AccountingStorageType</B>:<BR>
<input type="radio" name="accounting_storage_type" value="" checked> <B>None</B>:
No job accounting storage<BR>
<input type="radio" name="accounting_storage_type" value="accounting_storage/slurmdbd"> <B>SlurmDBD</B>:
Write job accounting to SlurmDBD (database daemon) which can securely
save the data from many Slurm managed clusters into a common database<BR>
<P>

<H2>Process ID Logging</H2>
Define the location into which we can record the daemon's process ID.
This is used for locate the appropriate daemon for signaling.
Specify a specify the fully qualified pathname for the file.
<P>
<input type="text" name="slurmctld_pid_file" value="/var/run/slurmctld.pid">
<B>SlurmctldPidFile</B>
<P>
<input type="text" name="slurmd_pid_file" value="/var/run/slurmd.pid">
<B>SlurmdPidFile</B>
<P>

<BR>
<BR>
<input type=button value="Submit" onClick="javascript:displayfile()">
<input type=reset value="Reset Form">
</form>
<hr>
<p>
<a href="disclaimer.html" target="_blank" class="privacy">Legal Notices</a><br>
Last modified 13 March 2024</p>
</body>
</html>
