From 5dda1fed380151d39f1d81772fcdc5fe2ff30fe6 Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Wed, 28 Jan 2004 00:33:55 +0000 Subject: [PATCH] Major update to slurm web pages by Elizabeth. Added page formatting with graphics. Existing *.png format graphics changed to *.gif. --- doc/html/arch.gif | Bin 0 -> 23070 bytes doc/html/arch.png | Bin 53753 -> 0 bytes doc/html/authplugins.html | 991 +++++++++------------------------ doc/html/coding_style.pdf | Bin 0 -> 21725 bytes doc/html/documentation.html | 94 +++- doc/html/download.html | 134 +++-- doc/html/entities.gif | Bin 0 -> 7899 bytes doc/html/entities.png | Bin 9900 -> 0 bytes doc/html/faq.html | 186 ++++--- doc/html/help.html | 92 ++- doc/html/index.html | 101 ---- doc/html/lll.gif | Bin 0 -> 1794 bytes doc/html/news.html | 131 +++-- doc/html/overview.html | 209 +++---- doc/html/platforms.html | 153 ++--- doc/html/plugins.html | 622 ++++++--------------- doc/html/programmer.guide.html | 187 ------- doc/html/programmer_guide.html | 170 ++++++ doc/html/publications.html | 85 ++- doc/html/quickstart.admin.html | 360 ------------ doc/html/quickstart.html | 306 +++++----- doc/html/quickstart_admin.html | 353 ++++++++++++ doc/html/slurm.html | 99 ++++ doc/html/slurm_banner.jpg | Bin 0 -> 18651 bytes doc/html/slurmstyles.css | 16 + doc/html/spacer.gif | Bin 0 -> 43 bytes doc/html/team.html | 90 ++- 27 files changed, 1999 insertions(+), 2380 deletions(-) create mode 100644 doc/html/arch.gif delete mode 100644 doc/html/arch.png create mode 100644 doc/html/coding_style.pdf create mode 100644 doc/html/entities.gif delete mode 100644 doc/html/entities.png delete mode 100644 doc/html/index.html create mode 100644 doc/html/lll.gif delete mode 100644 doc/html/programmer.guide.html create mode 100644 doc/html/programmer_guide.html delete mode 100644 doc/html/quickstart.admin.html create mode 100644 doc/html/quickstart_admin.html create mode 100644 doc/html/slurm.html create mode 100644 doc/html/slurm_banner.jpg create mode 100644 doc/html/slurmstyles.css create mode 100644 doc/html/spacer.gif diff --git a/doc/html/arch.gif b/doc/html/arch.gif new file mode 100644 index 0000000000000000000000000000000000000000..22394f0810f7eb3364ce6855b50e45fbcf8c349f GIT binary patch literal 23070 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 F^FL0@iAn$f literal 0 HcmV?d00001 diff --git a/doc/html/arch.png b/doc/html/arch.png deleted file mode 100644 index bec0227d0206af80eec300bfc74997e9e75ad594..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53753 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 Vi1F#;NDvhMnmWV!td-Z6{{urPqul@i diff --git a/doc/html/authplugins.html b/doc/html/authplugins.html index d733afed593..3aa5b78223e 100644 --- a/doc/html/authplugins.html +++ b/doc/html/authplugins.html @@ -1,728 +1,281 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> -<html xmlns:v="urn:schemas-microsoft-com:vml" -xmlns:o="urn:schemas-microsoft-com:office:office" -xmlns:w="urn:schemas-microsoft-com:office:word" -xmlns="http://www.w3.org/TR/REC-html40"> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> -<head> -<meta http-equiv=Content-Type content="text/html; charset=utf-8"> -<meta name=ProgId content=Word.Document> -<meta name=Generator content="Microsoft Word 10"> -<meta name=Originator content="Microsoft Word 10"> -<link rel=File-List href="authplugins_files/filelist.xml"> -<title>/home/jwindley/slurm/docs/authplugins.html</title> -<!--[if gte mso 9]><xml> - <o:DocumentProperties> - <o:Author>Jay Windley</o:Author> - <o:Template>Normal</o:Template> - <o:LastAuthor>Jay Windley</o:LastAuthor> - <o:Revision>10</o:Revision> - <o:TotalTime>178</o:TotalTime> - <o:Created>2003-03-21T18:13:00Z</o:Created> - <o:LastSaved>2003-03-21T21:13:00Z</o:LastSaved> - <o:Pages>1</o:Pages> - <o:Words>1724</o:Words> - <o:Characters>9828</o:Characters> - <o:Company> </o:Company> - <o:Lines>81</o:Lines> - <o:Paragraphs>23</o:Paragraphs> - <o:CharactersWithSpaces>11529</o:CharactersWithSpaces> - <o:Version>10.3501</o:Version> - </o:DocumentProperties> -</xml><![endif]--><!--[if gte mso 9]><xml> - <w:WordDocument> - <w:SpellingState>Clean</w:SpellingState> - <w:GrammarState>Clean</w:GrammarState> - <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> - </w:WordDocument> -</xml><![endif]--> -<style> -<!-- -@media print - -{ - - body - - { - - padding-top: 1in; padding-bottom: 1in; +<html> - padding-left: 1in; padding-right: 1in; - - } - -} -body - {widows: 2; - font-stretch: normal;} -p - {widows: 2; - font-stretch: normal;} -.NORMAL - {widows: 2; - font-stretch: normal;} - - /* Font Definitions */ - @font-face - {font-family:Courier; - panose-1:2 7 4 9 2 2 5 2 4 4; - mso-font-alt:"Courier New"; - mso-font-charset:0; - mso-generic-font-family:modern; - mso-font-format:other; - mso-font-pitch:fixed; - mso-font-signature:3 0 0 0 1 0;} -@font-face - {font-family:Wingdings; - panose-1:5 0 0 0 0 0 0 0 0 0; - mso-font-charset:2; - mso-generic-font-family:auto; - mso-font-pitch:variable; - mso-font-signature:0 268435456 0 0 -2147483648 0;} -@font-face - {font-family:"Nimbus Roman"; - panose-1:0 0 0 0 0 0 0 0 0 0; - mso-font-alt:"Times New Roman"; - mso-font-charset:0; - mso-generic-font-family:roman; - mso-font-format:other; - mso-font-pitch:auto; - mso-font-signature:0 0 0 0 0 0;} -@font-face - {font-family:"Nimbus Sans"; - panose-1:0 0 0 0 0 0 0 0 0 0; - mso-font-alt:"Times New Roman"; - mso-font-charset:0; - mso-generic-font-family:roman; - mso-font-format:other; - mso-font-pitch:auto; - mso-font-signature:0 0 0 0 0 0;} - /* Style Definitions */ - p.MsoNormal, li.MsoNormal, div.MsoNormal - {mso-style-parent:""; - margin:0in; - margin-bottom:.0001pt; - mso-pagination:widow-orphan; - font-size:12.0pt; - font-family:"Times New Roman"; - mso-fareast-font-family:"Times New Roman"; - color:windowtext;} -h1 - {margin-top:21.95pt; - margin-right:0in; - margin-bottom:2.95pt; - margin-left:0in; - mso-pagination:widow-orphan; - mso-outline-level:1; - font-size:17.0pt; - font-family:"Nimbus Sans"; - color:windowtext; - font-weight:bold;} -h2 - {margin-top:21.95pt; - margin-right:0in; - margin-bottom:2.95pt; - margin-left:0in; - mso-pagination:widow-orphan; - mso-outline-level:2; - font-size:14.0pt; - font-family:"Nimbus Sans"; - color:windowtext; - font-weight:bold;} -p - {margin-top:0in; - margin-right:0in; - margin-bottom:11.95pt; - margin-left:0in; - mso-pagination:widow-orphan; - font-size:12.0pt; - font-family:"Nimbus Roman"; - mso-fareast-font-family:"Times New Roman"; - mso-bidi-font-family:"Times New Roman"; - color:black;} -p.blocktext, li.blocktext, div.blocktext - {mso-style-name:blocktext; - margin-top:0in; - margin-right:1.0in; - margin-bottom:5.85pt; - margin-left:1.0in; - mso-pagination:widow-orphan; - font-size:12.0pt; - font-family:"Nimbus Roman"; - mso-fareast-font-family:"Times New Roman"; - mso-bidi-font-family:"Times New Roman"; - color:black;} -p.heading1, li.heading1, div.heading1 - {mso-style-name:heading1; - margin-top:21.95pt; - margin-right:0in; - margin-bottom:2.95pt; - margin-left:0in; - mso-pagination:widow-orphan; - font-size:17.0pt; - font-family:"Nimbus Sans"; - mso-fareast-font-family:"Times New Roman"; - mso-bidi-font-family:"Times New Roman"; - color:black; - font-weight:bold;} -p.heading2, li.heading2, div.heading2 - {mso-style-name:heading2; - margin-top:21.95pt; - margin-right:0in; - margin-bottom:2.95pt; - margin-left:0in; - mso-pagination:widow-orphan; - font-size:14.0pt; - font-family:"Nimbus Sans"; - mso-fareast-font-family:"Times New Roman"; - mso-bidi-font-family:"Times New Roman"; - color:black; - font-weight:bold;} -p.normal, li.normal, div.normal - {mso-style-name:normal; - margin-top:0in; - margin-right:0in; - margin-bottom:11.95pt; - margin-left:0in; - mso-pagination:widow-orphan; - font-size:12.0pt; - font-family:"Nimbus Roman"; - mso-fareast-font-family:"Times New Roman"; - mso-bidi-font-family:"Times New Roman"; - color:black;} -span.SpellE - {mso-style-name:""; - mso-spl-e:yes;} -span.GramE - {mso-style-name:""; - mso-gram-e:yes;} -@page Section1 - {size:8.5in 11.0in; - margin:1.0in 1.25in 1.0in 1.25in; - mso-header-margin:.5in; - mso-footer-margin:.5in; - mso-paper-source:0;} -div.Section1 - {page:Section1;} - /* List Definitions */ - @list l0 - {mso-list-id:273175015; - mso-list-template-ids:-1614802786;} -@list l0:level1 - {mso-level-number-format:bullet; - mso-level-text:ï‚·; - mso-level-tab-stop:.5in; - mso-level-number-position:left; - text-indent:-.25in; - mso-ansi-font-size:10.0pt; - font-family:Symbol;} -ol - {margin-bottom:0in;} -ul - {margin-bottom:0in;} ---> -</style> -<!--[if gte mso 10]> -<style> - /* Style Definitions */ - table.MsoNormalTable - {mso-style-name:"Table Normal"; - mso-tstyle-rowband-size:0; - mso-tstyle-colband-size:0; - mso-style-noshow:yes; - mso-style-parent:""; - mso-padding-alt:0in 5.4pt 0in 5.4pt; - mso-para-margin:0in; - mso-para-margin-bottom:.0001pt; - mso-pagination:widow-orphan; - font-size:10.0pt; - font-family:"Times New Roman";} -</style> -<![endif]--><!-- ================================================================================ --><!-- This HTML file was created by AbiWord. --><!-- AbiWord is a free, Open Source word processor. --><!-- You may obtain more information about AbiWord at www.abisource.com --><!-- ================================================================================ --><!--[if gte mso 9]><xml> - <o:shapedefaults v:ext="edit" spidmax="2050"/> -</xml><![endif]--><!--[if gte mso 9]><xml> - <o:shapelayout v:ext="edit"> - <o:idmap v:ext="edit" data="1"/> - </o:shapelayout></xml><![endif]--> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:Authentication Plugins</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> </head> -<body bgcolor=white lang=EN-US style='tab-interval:.5in'> - -<div class=Section1> - -<div> - -<h1 style='margin-bottom:12.0pt'><span style='color:black'>SLURM Authentication -<span class=SpellE>Plugin</span> API<o:p></o:p></span></h1> - -<h2 style='margin-bottom:12.0pt'><span style='color:black'>Overview<o:p></o:p></span></h2> - -<p style='margin-bottom:12.0pt'>This document describes SLURM authentication <span -class=SpellE>plugins</span> and the API which defines them. It is -intended as a resource to programmers wishing to write their own SLURM -authentication <span class=SpellE>plugins</span>. This is version 0 of -the API.</p> - -<p style='margin-bottom:12.0pt'>SLURM authentication <span class=SpellE>plugins</span> -are SLURM <span class=SpellE>plugins</span> which implement the SLURM -authentication API described herein. They must conform to the SLURM <span -class=SpellE>Plugin</span> API with the following specifications:</p> - -<p style='margin-bottom:12.0pt'><span class=GramE><span style='font-family: -Courier'>const</span></span><span style='font-family:Courier'> char <span -class=SpellE>plugin_type</span>[]</span>- The major type must be -"auth". The minor type can be any recognizable abbreviation for -the type of authentication. We recommend, for example:</p> - -<p class=MsoNormal style='mso-margin-top-alt:auto;margin-left:0in;text-indent: --.25in;mso-list:l0 level1 lfo1;tab-stops:list .5in'><![if !supportLists]><span -style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol; -mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;color:black'><span -style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'> -</span></span></span><![endif]><span style='font-family:"Nimbus Roman"; -color:black'>"<span class=GramE>none</span>" - A <span class=SpellE>plugin</span> -which implements the API without providing any actual authentication service.<o:p></o:p></span></p> - -<p class=MsoNormal style='mso-margin-top-alt:auto;margin-left:0in;text-indent: --.25in;mso-list:l0 level1 lfo1;tab-stops:list .5in'><![if !supportLists]><span -style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol; -mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;color:black'><span -style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'> -</span></span></span><![endif]><span style='font-family:"Nimbus Roman"; -color:black'>"<span class=SpellE><span class=GramE>authd</span></span>" -- Brett Chun's Linux <span class=SpellE>authd</span>.<o:p></o:p></span></p> - -<p class=MsoNormal style='mso-margin-top-alt:auto;margin-left:0in;text-indent: --.25in;mso-list:l0 level1 lfo1;tab-stops:list .5in'><![if !supportLists]><span -style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol; -mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;color:black'><span -style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'> -</span></span></span><![endif]><span style='font-family:"Nimbus Roman"; -color:black'>"<span class=SpellE><span class=GramE>munged</span></span>" -- <span class=SpellE>LLNL's</span> <span class=SpellE>munge</span> protocol.<o:p></o:p></span></p> - -<p class=MsoNormal style='mso-margin-top-alt:auto;margin-bottom:12.0pt; -margin-left:0in;text-indent:-.25in;mso-list:l0 level1 lfo1;tab-stops:list .5in'><![if !supportLists]><span -style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol; -mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;color:black'><span -style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'> -</span></span></span><![endif]><span style='font-family:"Nimbus Roman"; -color:black'>"krb5" - Kerberos 5<o:p></o:p></span></p> - -<p style='margin-bottom:12.0pt'>The <span class=SpellE><span style='font-family: -Courier'>plugin_name</span></span> and <span class=SpellE><span -style='font-family:Courier'>plugin_version</span></span> symbols required by -the SLURM <span class=SpellE>Plugin</span> API require no specialization for -authentication, except note carefully the versioning discussion below.</p> - -<p style='margin-bottom:12.0pt'>The programmer is urged to study <span -class=SpellE><span style='font-family:Courier'>src/plugins/auth/auth_none.c</span></span> -for an example implementation of a SLURM authentication <span class=SpellE>plugin</span>.</p> - -<h2 style='margin-bottom:12.0pt'><span style='color:black'>Data objects<o:p></o:p></span></h2> - -<p style='margin-bottom:12.0pt'>The implementation must support an opaque -class, which it defines, to be used as an authentication <i>credential</i>. -This class must encapsulate all user-specific information necessary for the -operation of the API specification below. The <i>credential</i> is -referred to in SLURM code by an anonymous pointer (void *).</p> - -<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-family:"Nimbus Roman"; -color:black'>The implementation must maintain (though not necessarily directly -export) an enumerated <span class=SpellE><i>errno</i></span> to allow SLURM to -discover as practically as possible the reason for any failed API call. -The following enumerated integer values (declared in </span><span class=SpellE><span -style='font-family:Courier;color:black'>src/common/slurm_auth.h</span></span><span -style='font-family:"Nimbus Roman";color:black'>) must be used when appropriate. -<o:p></o:p></span></p> - -<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; -margin-left:.5in'><span style='font-family:"Nimbus Roman";color:black'>SLURM_AUTH_BADARG -- an argument to an API function <span class=GramE>was invalid</span> or -malformed.<br> -SLURM_AUTH_MEMORY - a request could not be satisfied because memory for it +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2><a name="top">SLURM Authentication Plugin API</a></h2> +<h3> Overview</h3> +<p> This document describes SLURM authentication plugins and the API that defines +them. It is intended as a resource to programmers wishing to write their own SLURM +authentication plugins. This is version 0 of the API.</p> +<p>SLURM authentication plugins are SLURM plugins that implement the SLURM authentication +API described herein. They must conform to the SLURM Plugin API with the following +specifications:</p> +<p><span class="commandline">const char plugin_type[]</span><br> +The major type must be "auth." The minor type can be any recognizable +abbreviation for the type of authentication. We recommend, for example:</p> +<ul> +<li><b>none</b>—A plugin that implements the API without providing any actual +authentication service.</li> +<li><b>authd</b>—Brett Chun's Linux authd.</li> +<li><b>munged</b>—LLNL's munge protocol.</li> +<li><b>krb5</b>—Kerberos 5</li> +</ul> +<p>The <span class="commandline">plugin_name</span> and <span class="commandline">plugin_version</span> +symbols required by the SLURM Plugin API require no specialization for authentication. +Note carefully, however, the versioning discussion below.</p> +<p>The programmer is urged to study <span class="commandline">src/plugins/auth/auth_none.c</span> +for an example implementation of a SLURM authentication plugin.</p> +<p class="footer"><a href="#top">top</a></p> +<h3>Data Objects</h3> +<p> The implementation must support an opaque class, which it defines, to be used +as an authentication "credential." This class must encapsulate all user-specific +information necessary for the operation of the API specification below. The credential +is referred to in SLURM code by an anonymous pointer (void *).</p> +<p>The implementation must maintain (though not necessarily directly export) an +enumerated <b>errno</b> to allow SLURM to discover as practically as possible +the reason for any failed API call. The following enumerated integer values (declared +in <span class="commandline">src/common/slurm_auth.h</span>) must be used when +appropriate.</p> +<p style="margin-left:.2in">SLURM_AUTH_BADARG—an argument to an API function +was invalid or malformed.<br> +SLURM_AUTH_MEMORY—a request could not be satisfied because memory for it could not be allocated.<br> -SLURM_AUTH_NOUSER - a <i>credential</i> is improper because it refers to an -unknown user.<br> -SLURM_AUTH_INVALID - a <i>credential</i> is improper because the validation of -it has failed. This is specifically distinct from the expiration of a <i>credential</i>.<br> -SLURM_AUTH_MISMATCH - a <i>credential</i> could not be properly unpacked -because it is of an incompatible type or version.<o:p></o:p></span></p> - -<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-family:"Nimbus Roman"; -color:black'>These values must not be used as return values in integer-valued -functions in the API. The proper error return value from integer-valued -functions is SLURM_ERROR. While it is most practical to associate a -different <span class=SpellE><i>errno</i></span> with each instance of a <i>credential</i>, -this is not necessarily enforced by the API. The implementation should -endeavor to provide useful and pertinent information by whatever means is -practical. In most cases this means an <span class=SpellE>errno</span> -for each <i>credential</i>, since <span class=SpellE>plugins</span> must be -re-entrant. If a <span class=SpellE>plugin</span> maintains a global <span -class=SpellE><i>errno</i></span> in place of or in addition to a per-<i>credential</i> -<span class=SpellE><i>errno</i></span>, it is not required to enforce mutual -exclusion on it. Successful API calls are not required to reset any <span -class=SpellE><i>errno</i></span> to a known value. However, the initial -value of any <span class=SpellE><i>errno</i></span>, prior to any error -condition arising, should be SLURM_SUCCESS. <br> -<br> -<span class=SpellE>Plugins</span> may assign implementation-specific values to <span -class=SpellE><i>errno</i></span> so long as they do not conflict with the -values assigned above. This is done programmatically by assigning <span -class=SpellE>plugin</span>-specific <span class=SpellE><i>errno</i></span> -values which are arithmetically greater than or equal to the symbol -SLURM_AUTH_FIRST_LOCAL_ERROR. <o:p></o:p></span></p> - -<h2 style='margin-bottom:12.0pt'><span style='color:black'>API functions<o:p></o:p></span></h2> - -<p style='margin-bottom:12.0pt'><span style='font-family:"Nimbus Sans"'>The -following functions must appear.<span style='mso-spacerun:yes'>Â -</span>Functions which are not implemented should be stubbed.<o:p></o:p></span></p> - -<p style='margin-bottom:12.0pt'><span class=GramE><span style='font-family: -Courier'>void</span></span><span style='font-family:Courier'> *<span -class=SpellE>slurm_auth_alloc</span> (void);</span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Description<br> -</b><span class=GramE>Allocates</span> from the free store an anonymous <i>credential</i> -object and returns a pointer to it. The pointer should be valid until -passed to <span class=SpellE><span style='font-family:Courier'>slurm_auth_<span -class=GramE>free</span></span></span><span class=GramE><span style='font-family: -Courier'>(</span></span><span style='font-family:Courier'>)</span> for -disposal. The credential is not expected to be in a usable state until it -is activated by <span class=SpellE><span style='font-family:Courier'>slurm_auth_<span -class=GramE>activate</span></span></span><span class=GramE><span -style='font-family:Courier'>(</span></span><span style='font-family:Courier'>)</span>. -SLURM will not pass <i>credentials</i> to the API which <span class=GramE>have</span> -not been allocated by this function.</p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Arguments<br> -</b>None.</span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Returns<br> -</b><span class=GramE>A</span> pointer to a newly allocated credential if -successful. On failure the <span class=SpellE>plugin</span> should return -NULL and set its <span class=SpellE><i>errno</i></span> to an appropriate value -to indicate the reason for failure.</p> - -<p class=MsoNormal style='margin-bottom:12.0pt'><span class=SpellE><span -class=GramE><span style='font-family:Courier;color:black'>int</span></span></span><span -style='font-family:Courier;color:black'> <span class=SpellE>slurm_auth_free</span> -(void *<span class=SpellE>cr</span>);</span><span style='font-family:"Nimbus Roman"; -color:black'><o:p></o:p></span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Description<br> -</b><span class=SpellE>Deallocates</span> a <i>credential</i> that was -allocated with <span class=SpellE><span style='font-family:Courier'>slurm_auth_<span -class=GramE>alloc</span></span></span><span class=GramE><span style='font-family: -Courier'>(</span></span><span style='font-family:Courier'>)</span> and any +SLURM_AUTH_NOUSER—a credential is improper because it refers to an unknown +user.<br> +SLURM_AUTH_INVALID—a credential is improper because the validation of it +has failed. This is specifically distinct from the expiration of a credential.<br> +SLURM_AUTH_MISMATCH—a credential could not be properly unpacked because it +is of an incompatible type or version.</p> +<p>These values must not be used as return values in integer-valued functions +in the API. The proper error return value from integer-valued functions is SLURM_ERROR. +While it is most practical to associate a different errno with each instance of +a credential, this is not necessarily enforced by the API. The implementation +should endeavor to provide useful and pertinent information by whatever means +is practical. In most cases, this means an errno for each credential, since plugins +must be re-entrant. If a plugin maintains a global errno in place of or in addition +to a per-credential errno, it is not required to enforce mutual exclusion on it. +Successful API calls are not required to reset any errno to a known value. However, +the initial value of any errno, prior to any error condition arising, should be +SLURM_SUCCESS. </p> +<p>Plugins may assign implementation-specific values to errno so long as they +do not conflict with the values assigned above. This is done programmatically +by assigning plugin-specific errno values which are arithmetically greater than +or equal to the symbol SLURM_AUTH_FIRST_LOCAL_ERROR.</p> +<p class="footer"><a href="#top">top</a></p> +<h3>API Functions</h3> +<p>The following functions must appear. Functions which are not implemented should +be stubbed.</p> +<p class="commandline">void *slurm_auth_alloc (void);</p> +<p style="margin-left:.2in"><b>Description</b>: Allocates from the free store +an anonymous credential object and returns a pointer to it. The pointer should +be valid until passed to <span class="commandline">slurm_auth_free()</span> for +disposal. The credential is not expected to be in a usable state until it is activated +by <span class="commandline">slurm_auth_activate()</span>. SLURM will not pass +credentials to the API which have not been allocated by this function.</p> +<p style="margin-left:.2in"><b>Arguments</b>: None.</p> +<p style="margin-left:.2in"><b>Returns</b>: A pointer to a newly allocated credential +if successful. On failure, the plugin should return NULL and set its errno to +an appropriate value to indicate the reason for failure.</p> +<p class="commandline">int slurm_auth_free (void *cr);</p> +<p style="margin-left:.2in"><b>Description</b>: Deallocates a credential that +was allocated with <span class="commandline">slurm_auth_alloc()</span> and any associated storage that has been allocated for it during its use.</p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Arguments<br> -</b><span class=SpellE><span style='font-family:Courier'>cr</span></span> - -(input) pointer to the <i>credential</i> which is to be <span class=SpellE>deallocated</span>.</span> -<span class=GramE>Cannot be NULL.</span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Returns<br> -</b>SLURM_SUCCESS if successful.</span><span style='mso-spacerun:yes'>Â -</span>On failure the <span class=SpellE>plugin</span> should return -SLURM_ERROR and set the <span class=SpellE><i style='mso-bidi-font-style:normal'>errno</i></span> -to an appropriate value to indicate the reason for failure.</p> - -<p class=MsoNormal style='margin-bottom:12.0pt'><span class=SpellE><span -class=GramE><span style='font-family:Courier;color:black'>int</span></span></span><span -style='font-family:Courier;color:black'> <span class=SpellE>slurm_auth_activate</span> -(void *<span class=SpellE>cr</span>);</span><span style='font-family:"Nimbus Roman"; -color:black'><o:p></o:p></span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Description<br> -</b><span class=GramE>Prepares</span> a <i>credential</i> for verification, -usually by some "signing" process. <span class=SpellE><span -style='font-family:Courier'>slurm_auth_<span class=GramE>activate</span></span></span><span -class=GramE><span style='font-family:Courier'>(</span></span><span -style='font-family:Courier'>) </span>and <span class=SpellE><span -style='font-family:Courier'>slurm_auth_verify</span></span><span -style='font-family:Courier'>()</span> are strictly sequential operations. -A <i>credential</i> which has been successfully activated should be -successfully verified without any further processing, provided it has not -expired. A <i>credential</i> must be activated before it can be -successfully verified. The return values of <span class=SpellE><span -style='font-family:Courier'>slurm_auth_get_<span class=GramE>uid</span></span></span><span -class=GramE><span style='font-family:Courier'>(</span></span><span -style='font-family:Courier'>)</span> and <span class=SpellE><span -style='font-family:Courier'>slurm_auth_get_gid</span></span><span -style='font-family:Courier'>()</span> may be meaningful after activation -(depending on <span class=SpellE>plugin</span> preference), but are not +<p style="margin-left:.2in"><b>Arguments</b>:<span class="commandline"> cr</span> + (input) pointer to the credential that is to be deallocated. Cannot +be NULL.</p> +<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure, +the plugin should return SLURM_ERROR and set the errno to an appropriate value +to indicate the reason for failure.</p> +<p class="commandline">int slurm_auth_activate (void *cr);</p> +<p style="margin-left:.2in"><b>Description</b>: Prepares a credential for verification, +usually by some "signing" process. <span class="commandline">slurm_auth_activate()</span> +and <span class="commandline">slurm_auth_verify()</span> are strictly sequential +operations. A credential that has been successfully activated should be successfully +verified without any further processing, provided it has not expired. A credential +must be activated before it can be successfully verified. The return values of +<span class="commandline">slurm_auth_get_uid()</span> and <span class="commandline">slurm_auth_get_gid()</span> +may be meaningful after activation (depending on plugin preference), but are not considered trustworthy by SLURM until verification.</p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Arguments<br> -</b><span class=SpellE><span style='font-family:Courier'>cr</span></span> - -(input) pointer to the <i>credential</i> which is to be activated.</span> -<span class=GramE>Cannot be NULL.</span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Returns<br> -</b>SLURM_SUCCESS if successful.</span> On failure the function should -return SLURM_ERROR and set its <span class=SpellE><i>errno</i></span> to an -appropriate value to indicate the reason for failure.</p> - -<p style='margin-bottom:12.0pt'><span class=SpellE><span class=GramE><span -style='font-family:Courier'>int</span></span></span><span style='font-family: -Courier'> <span class=SpellE>slurm_auth_verify</span> (void *<span -class=SpellE>cr</span> );</span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Description</b><br> -<span class=GramE>Verifies</span> that a <i>credential</i> is in order and -correctly identifies the associated user. It also verifies that the <i>credential</i> -has not expired. If verification is successful, the return values of <span -class=SpellE><span style='font-family:Courier'>slurm_auth_get_<span -class=GramE>uid</span></span></span><span class=GramE><span style='font-family: -Courier'>(</span></span><span style='font-family:Courier'>)</span> and <span -class=SpellE><span style='font-family:Courier'>slurm_auth_get_gid</span></span><span -style='font-family:Courier'>()</span> in subsequent calls must correspond to -the actual verified system UID and GID of the user associated with the <i>credential</i>. -Verification must fail if the <i>credential</i> has not previously been -activated, even if a <i>credential</i> implementation cannot exist in an <span -class=SpellE>unactivated</span> state. A <i>credential</i>'s valid term -is defined at activation and verification must fail if the <i>credential</i> -has expired, even if it would otherwise be valid.</p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Arguments<br> -</b><span class=SpellE><span style='font-family:Courier'>cr</span></span> - -(input) pointer to the <i>credential</i> which is to be verified.</span> <span -class=GramE>Cannot be NULL.</span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Returns<br> -</b>SLURM_SUCCESS if the <i>credential</i> is verified to be in order and has -not expired. If the <i>credential</i> cannot be verified, or if the <i>credential</i> -has expired, the function should return SLURM_ERROR and set its <span -class=SpellE><i>errno</i></span> to an appropriate value to indicate the reason -for failure.</p> - -<p class=MsoNormal style='margin-bottom:12.0pt'><span class=SpellE><span -style='font-family:Courier;color:black'>uid_t</span></span><span -style='font-family:Courier;color:black'> <span class=SpellE>slurm_auth_get_uid</span> -(void *<span class=SpellE>cr</span>)<span class=GramE>;</span></span><span -style='font-family:"Nimbus Roman";color:black'><br> -</span><span class=SpellE><span style='font-family:Courier;color:black'>gid_t</span></span><span -style='font-family:Courier;color:black'> <span class=SpellE>slurm_auth_get_gid</span> -(void *<span class=SpellE>cr</span>);</span><span style='font-family:"Nimbus Roman"; -color:black'><o:p></o:p></span></p> - -<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; -margin-left:.5in'><b><span style='font-family:"Nimbus Roman";color:black'>Description</span></b><span -style='font-family:"Nimbus Roman";color:black'><br> -<span class=GramE>Extracts</span> the numerical UID (GID) of the user -corresponding to the given <i>credential</i>. SLURM considers this value -trustworthy only if the credential has been successfully verified using</span><span -style='font-family:Courier;color:black'> <span class=SpellE>slurm_auth_<span -class=GramE>verify</span></span><span class=GramE>(</span>)</span><span -style='font-family:"Nimbus Roman";color:black'>. An unverified <i>credential</i> -does not immediately give rise to an error condition in these functions, since -this would require a <span class=SpellE>plugin</span> to distinguish between a -verified and an unverified <i>credential</i>, which may be computationally -expensive. A <span class=SpellE>plugin</span> may consider the lack of -verification as an error.<o:p></o:p></span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Arguments<br> -</b><span class=SpellE><span style='font-family:Courier'>cr</span></span> - -(input) pointer to the <i>credential</i> containing the desired identification.</span> -<span class=GramE>Cannot be NULL.</span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Returns<br> -</b><span class=GramE>If</span> successful, the Linux UID (GID) associated with -the <i>credential</i>. In case of error, SLURM_AUTH_NOBODY should be -returned and <span class=SpellE><i>errno</i></span> set appropriately to -indicate the cause of the failure.</p> - -<p style='margin-bottom:12.0pt'><span class=SpellE><span class=GramE><span -style='font-family:Courier'>int</span></span></span><span style='font-family: -Courier'> <span class=SpellE>slurm_auth_pack</span> (void *<span class=SpellE>cr</span>, -<span class=SpellE>Buf</span> <span class=SpellE>buf</span>);</span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Description<br> -</b>Marshals a <i>credential</i> into a buffer for transmission according to -the SLURM packing protocol. All authentication <span class=SpellE>plugins</span> -must first pack the <span class=SpellE><span style='font-family:Courier'>plugin_type</span></span> -and then the <span class=SpellE><span style='font-family:Courier'>plugin_version</span></span> -data before any <span class=SpellE>plugin</span>-specific data elements are -packed. <span class=SpellE><span style='font-family:Courier'>slurm_auth_<span -class=GramE>pack</span></span></span><span class=GramE><span style='font-family: -Courier'>(</span></span><span style='font-family:Courier'>)</span> and <span -class=SpellE><span style='font-family:Courier'>slurm_auth_pack</span></span><span -style='font-family:Courier'>()</span> are strictly reciprocal. The result -of a packing followed by an unpacking must be a functionally equivalent <i>credential</i>. -A <i>credential</i> is deemed appropriate for marshalling at any time after its -allocation and before its destruction.</p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Arguments<br> -</b><span class=SpellE><span style='font-family:Courier'>cr</span></span> - -(input) pointer to the <i>credential</i> to pack.</span><br> -<span class=SpellE><span class=GramE><span style='font-family:Courier'>buf</span></span></span> -- (input/output) the buffer into which the <i>credential</i> should be packed.</p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Returns<br> -</b>SLURM_SUCCESS if successful.</span><span style='mso-spacerun:yes'>Â -</span>On failure the <span class=SpellE>plugin</span> should return -SLURM_ERROR and set the <span class=SpellE><i style='mso-bidi-font-style:normal'>errno</i></span> -to indicate the reason for the failure.</p> - -<p style='margin-bottom:12.0pt'><span class=SpellE><span class=GramE><span -style='font-family:Courier;mso-bidi-font-family:"Courier New"'>int</span></span></span><span -style='font-family:Courier;mso-bidi-font-family:"Courier New"'> <span -class=SpellE>slurm_auth_unpack</span> (void *<span class=SpellE>cr</span>, <span -class=SpellE>Buf</span> <span class=SpellE>buf</span>);<o:p></o:p></span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Description<br> -</b><span class=SpellE>Unmarshals</span> a <i>credential</i> from a buffer -according to the SLURM packing protocol into a supplied (and presumed empty) <i>credential</i> -object. The <span class=SpellE>unmarshalled</span> credential is not -assumed to be activated or verified. The <span class=SpellE><span -style='font-family:Courier'>plugin_type</span></span> and <span class=SpellE><span -style='font-family:Courier'>plugin_version</span></span> data should first be -unpacked from the buffer and verified for applicability. The API does not -enforce that they must be equivalent, merely compatible. Compatibility is -implementation-dependent.</p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Arguments<br> -</b><span class=SpellE><span style='font-family:Courier'>cr</span></span> - -(output) pointer to the <i>credential</i> to pack.</span><br> -<span class=SpellE><span class=GramE><span style='font-family:Courier'>buf</span></span></span> -- (input/output) the buffer from which the <i>credential</i> should be -unpacked.</p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Returns<br> -</b>SLURM_SUCCESS if the <i>credential</i> was successfully unpacked.</span> -In case of failure, the function should return SLURM_ERROR and set <span -class=SpellE><i>errno</i></span> appropriately to indicate the cause of the -failure. If the function fails, no assumptions are made about the state -of the credential except its suitability for destruction via <span -class=SpellE><span style='font-family:Courier'>slurm_auth_<span class=GramE>free</span></span></span><span -class=GramE><span style='font-family:Courier'>(</span></span><span -style='font-family:Courier'>)</span>.</p> - -<p style='margin-bottom:12.0pt'><span class=SpellE><span class=GramE><span -style='font-family:Courier'>int</span></span></span><span style='font-family: -Courier'> <span class=SpellE>slurm_auth_print</span> (void *<span class=SpellE>cr</span>, -FILE *<span class=SpellE>fp</span>);</span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Description<br> -</b><span class=GramE>Writes</span> a human-readable representation of the -credential to a standard I/O stream. There are no strict API constraints -on the behavior of this <span class=GramE>function,</span> however it is -recommended that the information be as complete and as concise as -possible. For example, lengthy digital "signatures" need not be -printed bitwise, but may be represented by their checksum. The intent is -to provide a depiction of the <i>credential</i> for debugging purposes.</p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Arguments<br> -</b>None.</span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><span class=GramE><b>Returns<br> -</b>SLURM_SUCCESS if successful.</span><span style='mso-spacerun:yes'>Â -</span>On failure the <span class=SpellE>plugin</span> should return -SLURM_ERROR and set the <span class=SpellE><i style='mso-bidi-font-style:normal'>errno</i></span> -appropriately to indicate the cause of failure.</p> - -<p style='margin-bottom:12.0pt'><span class=SpellE><span class=GramE><span -style='font-family:Courier'>int</span></span></span><span style='font-family: -Courier'> <span class=SpellE>slurm_auth_errno</span> (void *<span class=SpellE>cr</span>);<o:p></o:p></span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Description<br> -</b>Returns the current value of <span class=SpellE><i>errno</i></span>. -Whether the value is associated with the given <i>credential</i> or with the <span -class=SpellE>plugin</span> as a whole is implementation-dependent. -Because this function can be used to discover the reason why a credential -allocation has failed, the argument is advisory. <span style='font-family:Courier'><o:p></o:p></span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Arguments<br> -</b><span class=SpellE><span style='font-family:Courier'>cr</span></span> - -(input) pointer to the <i>credential</i>, the status of whose most recently -executed API function is to be returned. This value may be NULL, -indicating that the most recent <span class=SpellE><i>errno</i></span> value -applicable to the <span class=SpellE>plugin</span> as a whole is to be -returned.</p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Returns<br> -</b><span class=GramE>The</span> current value of <span class=SpellE><i>errno</i></span> -or SLURM_SUCCESS if there is no error to report.</p> - -<p style='margin-bottom:12.0pt'><span class=GramE><span style='font-family: -Courier'>const</span></span><span style='font-family:Courier'> char *<span -class=SpellE>slurm_auth_errstr</span> (<span class=SpellE>int</span> <span -class=SpellE>errno</span>);<o:p></o:p></span></p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Description<br> -</b>Provides a human-readable string associated with the given <span -class=SpellE><i>errno</i></span>. The <span class=SpellE>plugin</span> -need only supply error strings for the <span class=SpellE><i>errno</i></span> -values it defines and not for <span class=SpellE><i>errno</i></span> values -listed above that are required by the API.</p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Arguments<br> -</b><span class=SpellE><span style='font-family:Courier'>errno</span></span> - -(input) the <span class=SpellE>plugin</span>-specific <span class=SpellE><i>errno</i></span> -for which a corresponding error message is desired.</p> - -<p style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left: -.5in'><b>Returns<br> -</b><span class=GramE>A</span> pointer to a static error message. This -function must always return a pointer to a string, even if the string is empty -or ambiguous such as "unknown error".</p> - -<h2 style='margin-bottom:12.0pt'><span style='color:black'>Versioning<o:p></o:p></span></h2> - -<p style='margin-bottom:12.0pt'>This document describes version 0 of the SLURM -Authentication API. Future releases of SLURM may revise this API. -An authentication <span class=SpellE>plugin</span> conveys its ability to -implement a particular API version using the mechanism outlined for SLURM <span -class=SpellE>plugins</span>. In addition, the <i>credential</i> is -transmitted along with the version number of the <span class=SpellE>plugin</span> -that transmitted it. It is at the discretion of the <span class=SpellE>plugin</span> -author whether to maintain data format compatibility across different versions -of the <span class=SpellE>plugin</span>.</p> - -</div> - -<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-family:"Nimbus Roman"; -color:black'><o:p> </o:p></span></p> - -</div> -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/authplugins.html -<p>UCRL-WEB-201790 -<p>Last Modified January 6, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> +<p style="margin-left:.2in"><b>Arguments</b>: <span class="commandline">cr</span> + (input) pointer to the credential which is to be activated. Cannot +be NULL.</p> +<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure +the function should return SLURM_ERROR and set its errno to an appropriate value +to indicate the reason for failure.</p> +<p class="footer"><a href="#top">top</a></p> +<p class="commandline">int slurm_auth_verify (void *cr );</p> +<p style="margin-left:.2in"><b>Description</b>: Verifies that a credential is +in order and correctly identifies the associated user. It also verifies that the +credential has not expired. If verification is successful, the return values of +<span class="commandline">slurm_auth_get_uid()</span> and <span class="commandline">slurm_auth_get_gid()</span> +in subsequent calls must correspond to the actual verified system UID and GID +of the user associated with the credential. Verification must fail if the credential +has not previously been activated, even if a credential implementation cannot +exist in an unactivated state. A credential's valid term is defined at activation +and verification must fail if the credential has expired, even if it would otherwise +be valid.</p> +<p style="margin-left:.2in"><b>Arguments</b>: <span class="commandline">cr</span> + (input) pointer to the credential which is to be verified. Cannot +be NULL.</p> +<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if the credential is +verified to be in order and has not expired. If the credential cannot be verified, +or if the credential has expired, the function should return SLURM_ERROR and set +its errno to an appropriate value to indicate the reason for failure.</p> +<p class="commandline">uid_t slurm_auth_get_uid (void *cr);<br> +gid_t slurm_auth_get_gid (void *cr);</p> +<p style="margin-left:.2in"><b>Description</b>: Extracts the numerical UID (GID) +of the user corresponding to the given credential. SLURM considers this value +trustworthy only if the credential has been successfully verified using <span class="commandline">slurm_auth_verify()</span>. +An unverified credential does not immediately give rise to an error condition +in these functions, since this would require a plugin to distinguish between a +verified and an unverified credential, which may be computationally expensive. +A plugin may consider the lack of verification as an error.</p> +<p style="margin-left:.2in"><b>Arguments</b>: <span class="commandline">cr</span> + (input) pointer to the credential containing the desired identification. +Cannot be NULL.</p> +<p style="margin-left:.2in"><b>Returns</b>: If successful, the Linux UID (GID) +associated with the credential. In case of error, SLURM_AUTH_NOBODY should be +returned and errno set appropriately to indicate the cause of the failure.</p> +<p class="footer"><a href="#top">top</a></p> +<p class="commandline">int slurm_auth_pack (void *cr, Buf buf);</p> +<p style="margin-left:.2in"><b>Description</b>: Marshals a credential into a buffer +for transmission according to the SLURM packing protocol. All authentication plugins +must first pack the plugin_type and then the plugin_version data before any plugin-specific +data elements are packed. slurm_auth_pack() and slurm_auth_pack() are strictly +reciprocal. The esult of a packing followed by an unpacking must be a functionally +equivalent credential. A credential is deemed appropriate for marshalling at any +time after its allocation and before its destruction.</p> +<p style="margin-left:.2in"><b>Arguments</b>:<br> +<span class="commandline">cr</span> (input) pointer to the credential +to pack.<br> +<span class="commandline">buf</span> (input/output) the buffer +into which the credential should be packed.</p> +<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure +the plugin should return SLURM_ERROR and set the errno to indicate the reason +for the failure.</p> +<p class="commandline">int slurm_auth_unpack (void *cr, Buf buf);</p> +<p style="margin-left:.2in"><b>Description</b>: Unmarshals a credential from a +buffer according to the SLURM packing protocol into a supplied (and presumed empty) +credential object. The unmarshalled credential is not assumed to be activated +or verified. The <span class="commandline">plugin_type</span> and <span class="commandline">plugin_version</span> +data should first be unpacked from the buffer and verified for applicability. +The API does not enforce that they must be equivalent, merely compatible. Compatibility +is implementation-dependent.</p> +<p style="margin-left:.2in"><b>Arguments</b>:<br> +<span class="commandline">cr</span> (output) pointer to the +credential to pack.<br> +<span class="commandline">buf</span> (input/output) the buffer +from which the credential should be unpacked.</p> +<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if the credential was +successfully unpacked. In case of failure, the function should return SLURM_ERROR +and set errno appropriately to indicate the cause of the failure. If the function +fails, no assumptions are made about the state of the credential except its suitability +for destruction via <span class="commandline">slurm_auth_free()</span>.</p> +<p class="commandline">int slurm_auth_print (void *cr, FILE *fp);</p> +<p style="margin-left:.2in"><b>Description</b>: Writes a human-readable representation +of the credential to a standard I/O stream. There are no strict API constraints +on the behavior of this function, however it is recommended that the information +be as complete and as concise as possible. For example, lengthy digital "signatures" +need not be printed bitwise, but may be represented by their checksum. The intent +is to provide a depiction of the credential for debugging purposes.</p> +<p style="margin-left:.2in"><b>Arguments</b>: None.</p> +<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure +the plugin should return SLURM_ERROR and set the errno appropriately to indicate +the cause of failure.</p> +<p class="footer"><a href="#top">top</a></p> +<p class="commandline">int slurm_auth_errno (void *cr);</p> +<p style="margin-left:.2in"><b>Description</b>: Returns the current value of errno. +Whether the value is associated with the given credential or with the plugin as +a whole is implementation-dependent. Because this function can be used to discover +the reason why a credential allocation has failed, the argument is advisory. </p> +<p style="margin-left:.2in"><b>Arguments</b>: <span class="commandline">cr</span> +(input) pointer to the credential, the status of whose most recently executed +API function is to be returned. This value may be NULL, indicating that the most +recent errno value applicable to the plugin as a whole is to be returned.</p> +<p style="margin-left:.2in"><b>Returns</b>: The current value of errno or SLURM_SUCCESS +if there is no error to report.</p> +<p class="commandline">const char *slurm_auth_errstr (int errno);</p> +<p style="margin-left:.2in"><b>Description</b>: Provides a human-readable string +associated with the given errno. The plugin need only supply error strings for +the errno values it defines and not for errno values listed above that are required +by the API.</p> +<p style="margin-left:.2in"><b>Arguments</b>: <span class="commandline">errno</span> +(input) the plugin-specific errno for which a corresponding error message is desired.</p> +<p style="margin-left:.2in"><b>Returns</b>: A pointer to a static error message. +This function must always return a pointer to a string, even if the string is +empty or ambiguous such as "unknown error."</p> +<h3>Versioning</h3> +<p> This document describes version 0 of the SLURM Authentication API. Future +releases of SLURM may revise this API. An authentication plugin conveys its ability +to implement a particular API version using the mechanism outlined for SLURM plugins. +In addition, the credential is transmitted along with the version number of the +plugin that transmitted it. It is at the discretion of the plugin author whether +to maintain data format compatibility across different versions of the plugin.</p> +<p class="footer"><a href="#top">top</a></p></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> </body> - </html> diff --git a/doc/html/coding_style.pdf b/doc/html/coding_style.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d7f5fdf2bce8d60e50983a7d1d4081aedd739ecf GIT binary patch literal 21725 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	tjy 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 MgWXCAQ?U5|02p2N8UO$Q literal 0 HcmV?d00001 diff --git a/doc/html/documentation.html b/doc/html/documentation.html index 39a9f30aa30..f2c4763fb01 100644 --- a/doc/html/documentation.html +++ b/doc/html/documentation.html @@ -1,30 +1,82 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + <html> + <head> -<title>SLURM: Documentation</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:Documentation</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> </head> -<body> -<h1>SLURM: Documentation</h1> - -<h2>Documentation for SLURM Users</h2> +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2> Documentation</h2> +<p>The SLURM <a href="quickstart.html">Quick Start User Guide</a> provides basic +introductory information for all SLURM users.</p> +<p>The following documents have been written to provide guidance and information +for SLURM administrators and developers.</p> <ul> -<li><a href="quickstart.html">Quick Start User Guide</a></li> -</ul> - -<h2>Documentation for SLURM Administrators and Developers</h2> -<ul> -<li><a href="quickstart.admin.html">Quick Start Administrator Guide</a></li> -<li><a href="programmer.guide.html">Programmer Guide</a></li> +<li><a href="quickstart_admin.html">Quick Start Administrator Guide</a></li> +<li><a href="programmer_guide.html">Programmer Guide</a></li> <li><a href="plugins.html">Plugin Programmer Guide</a></li> <li><a href="authplugins.html">Authentication Plugin Programmer Guide</a></li> -</ul> - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/documentation.html -<p>UCRL-WEB-201790 -<p>Last Modified January 8, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> +</ul></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> </body> </html> diff --git a/doc/html/download.html b/doc/html/download.html index d1f27c24b38..f349c17bdc6 100644 --- a/doc/html/download.html +++ b/doc/html/download.html @@ -1,54 +1,96 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + <html> + <head> -<title>SLURM: Download</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:Download</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> </head> -<body> -<h1>SLURM: Download</h1> - -We expect to post SLURM for download when version 0.3 -is completed and tested in the first quarter of 2004. -However, we will provide the code upon request (notify -<a href="mailto:jette@llnl.gov">jette@llnl.gov</a>). -The available components include: -<dl> -<dt><b>Source code</b> -<dd>Includes the code for all SLURM daemons, commands and libraries. -Man pages and other documents are included. -<dt><b>Test suite</b> -<dd>Includes a collection of about 100 functionality and stress tests -for SLURM. -Approximately 1000 SLURM jobs will be executed by this test suite. -Total execution time will vary by system type, but be on the order -of 40 minutes. -<dt><b>PAM module</b> -<dd>Pluggable Authentication Module (PAM) for restricting access to -compute nodes where SLURM performs resource management. -Access to the node is restricted to user root and users who have -been allocated resources on that node -<dt><b>MPICH patch</b> -<dd>MPICH normally uses the <b>rsh</b> program to initiate tasks. -Since these processes are not directly under the control of SLURM -daemons, SLURM functionality is restricted. -For example, SLURM has not reliable means of determining which processes -are associated with a given job. -This patch improves the integration of SLURM and MPICH. -</dl> - -<h2>SLURM version 0.3.0</h2> +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2>Download</h2> +<p>We expect to post SLURM for download when version 0.3 is completed and tested +in the first quarter of 2004. However, we will provide the code upon request (send +e-mail to <a href="mailto:jette@llnl.gov">jette@llnl.gov</a>). The available components +include: </p> <ul> -<li>Source code</li> -<li>Test suite</li> -<li>PAM module</li> -<li>MPICH patch</li> +<li><b>Source Code<br> +</b>Includes the code for all SLURM daemons, commands, and libraries. Man pages +and other documents are included. </li> +<li><b>Test Suite<br> +</b>Includes a collection of about 100 functionality and stress tests for SLURM. +Approximately 1000 SLURM jobs will be executed by this test suite. Total execution +time will vary by system type but will be on the order of 40 minutes. </li> +<li><b>PAM Module<br> +</b>Pluggable Authentication Module (PAM) for restricting access to compute nodes +where SLURM performs resource management. Access to the node is restricted to +user root and users who have been allocated resources on that node. </li> +<li><b>MPICH Patch<br> +</b>MPICH normally uses the <b>rsh</b> program to initiate tasks. Because these +processes are not directly under the control of SLURM daemons, SLURM functionality +is restricted. For example, SLURM has no reliable means of determining which processes +are associated with a given job. This patch improves the integration of SLURM +and MPICH. </li> </ul> - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/download.html -<p>UCRL-WEB-201790 -<p>Last Modified January 8, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> +</td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> </body> </html> diff --git a/doc/html/entities.gif b/doc/html/entities.gif new file mode 100644 index 0000000000000000000000000000000000000000..803dfa69d7c626f7b0cea45921f119e392a00e2c GIT binary patch literal 7899 zcmV<19wgyMNk%w1VIu+B0OkMyzwN(ub)haUF8ccVhNXtNxw@jFy;x~jKtMs_;^Jw1 zX?2Ztx#qc}qoZ|ob%utMiHWV1vXn+sM$ysHZf=|f1qFGNd6Sc~zrV$TfvG(`J%O5l zq|Br<Gc#3HR$+KyG(I%)^788H>R4D~m6fM#f@~BP7v0_Dd3mJE%gff*-9tlLZf<Up zt&uV^NpW$XtktY|c!rUYnW?G4eSM~CYIdESxnyKzetxEyn6`w3syaqGT3Uo)U}{E2 zWul_BuCBzatirL|v7N)6Nl8k@#mp`^E_ZjMfq{#LhOErY)3C6`R#tpwd1YL0Tbi1n zAt5DkhjC+eV?{+rW@ePBsl9u9r5hm|nVG8^8XqGoBaMx(I5;^$O+b#Rjd*y0C@3j^ ze}4)K3UF|AadCCy;^}g7c3D|u4i694*VkiuV{vhDs;aQh&(GP}+3xP{fPko`roJmH zFn@oimzSteU{Gsoo5S+MXnbgywV2}K>SktU%*@OH00960|FN;gA^8LV00000EC2ui z03!j~000O7fPI34goTEOh>41ejE#<ukdcy;l$Dm3kbjz+oSmMZprN9pq@|{(sHv); zeR;00u(7hUw6(UkxVgHpf~&s2z`?@9!>zl=wh<96%wEpU%q_~u)X2TW*xB0K+@HqP zu*-Pk3JQ4T=;-6??CtC6>F4I-(%`$--TC_a{NBhd<l?y-NU)$mg7E0slZCIJ!-o)o zeXAAlpv8+AGgid2uwlfHAVYSV7*3wXlPFWRD~BfnHIE`=%H&5f&pDMibE-6V4Cc(A zK#7smnX*Kb1yM@OBbxDEpP*2q2AjzA-GVz<vufSSwJTQ(QI_J=<<rvz8feq1UCXwu z+qZE4<I0^&x31m0X@jtWCHCZ1uYdy!4qW1-0<up>U7%p6vE#>(BTJr4xw7TUm@{kM z%-J!7y|4NnEHSvW>C;-HTs)ks>?R-qI?J9-ySDAym92nwC3@gr)WCxaR$Y)aF4vm2 z;9kzWxpUhAmiP;8khJjY*a0I%ENaP-=itMO4^JV^blwE5XJ5}gt2^VjkQ-n;zP|nY zn=hQt)4RQY|0{793IzBSXyAd3edftTqW$L}d+fkx3vx6dXyJw6>9Aj44|a%MgaUp7 z8-^s7SQ{K0vg6^3!GYLXVxQPx;*2zAMnj70u&ASHE*=M?Cj?fehaP1NY2=YeCaL8A zl1w(~<daZFDdm(%mJ!=yDBw8Gj$8)TV|+h$k^yA_6iMZoXr`&=nrt2kSpZt%(dC?6 zeK}#6oLDg#k!|+r=bwN|S;m{vjl`FVbS8R-owc}jC1iXCD(R$@wh7q_Gc0&$j*8OB zC@p2p@Iqu1m|5wmsHVE)9FI|8fTq-O+G&@c&Qg|)k*TWduBt+21FY!DI_r+LGK6Px zksZP7vdjVsnSO@Gy5+E378^@hN#xq>w%ndM=wk|U!XTp5>S!%5$Nr%MWTkfN?z>EW z>zIbo20LxJEG{Ksqv^r{DZBs&OeAC(0Lve__<C3vIU#nU=VPV{EOE2)Ha3U<!D1!M z;=<=N%n1sRMLhAyx>jt*jrATZti}!!*YS&>JZgs(B-hL<WV)rCG0Ppgyf3K7E+O-j zePECz27TD9w39MtsWZYn`?tV59%~}%V?-N`B+^l`F~-+mhb{KlWS3pGlwO;y_S$TZ z!DNMw9f2{z5qx0x-FWA%_uhQ-z2eji!|cg?SW8)S0bo=BMge*t&4m~bI5`F;lt?)_ z<&re{nA}eb`vK;XtY`t%f_H+eV<I<MG#GoRum>28_wj@bVw}+A<OqbJ`|iB=?)&e+ z^Dc<xedHee@yG{1Jd=;X+4;S9d~SU5)Kf3W-=zEa$ps-li9iv06kP%T;{{X@`w1uX z0X~zHhvCQj@W(Iz{Pfo!|MF0_Z~y-M?~lKd%`4O<#^t#_xUYW*OyKoA1h|)J4@li} z5*m=ufIcVz3^i~a?2tCQ+TG582@E0s{wFyQitvQ<BO#I=^8z3|Pfl6++yPNYLq9CA zLk;|yt&X)Wh&|~6Xb^+j5T`iCA*};qkU<G&Si=*lkbNd>q7#$0q>5qcg<6rJ6j6A? z2j#G8e;AVwb)~;8itvd`Dx(<{NJS-C(LCbX6!f&XMmAzEa1ZPR4kD;3HP&&2ZG4g+ z|7brn4$Lv-!D0-fNXSC=;f@Xj(<dH=x?K&jktq!15;5sNO&-brWUq>&v|xx8I&zYJ zU3AbFOZPE8rs|R>OhX?+XvieNQiQUkr6-MKvR{ePUZjj3BWajRJ2EhPlJo?~#@NSU zqOh0<tR<3e8A53G&yXg|fg(%k%vjFSm^eh{oj$Ql$2<uNeaJ%ORPY2f-BOlBsDK0f zzy|?TKmaN5!vyR(g;^$m3l*5c8yrbICdLn*@}#Fd@u^RK`V*i6C1@3&wM}6f6n+Su zXFczk&wU2;p#dFe{Zjd#RpyZs-zi*^ke~z^^kD*AOVd01P=E$hzz+g&KnNTl06%nq z1tMU<EN|d}0cc>JBi&^hyXgm6*7T-1-DyvM8q}c{^{5j6bt7c9P*GFL-WsZM$7 zQ=kgf4@5O8Qc?NHW8yKHok*!Uoz#N@oS+CN=s@w5(18kQKn0FNLpz~((f8#tmlc?R zK5v>>KeS<%To?oqvMNZX9(I<Eod9DM`&d6jRuGd-YP=v5E=>?{j+UJzVil`dKQy+p zpY20v*$PP=8tW4>o0*gPT7etHP7fm>!U?!g0}g%x3Lh+NQ&l_5sFJk<YY@R2X6b<& z44?r8pzJ2;cUiGY)u+*&t{<v<-Rz2XqK`>JS5v!O?>;xY)U_^l9a&p2=GG3WI}-Yy zpgykYRS*b3+6l^+-1>Dl1#-A2AN-Jl#A#rbZm_5S1`?p%0&|zS3{J2B7TjRJLRi8S zKCf0EL$3kKF_>OGD25TNU<Nz*!+s4hZQUBlaeCsu`8CoQl<<TK0JaY&Ai^0=AOkiS z7rBHzrHCu5+*4u`G9@<ciL=O5C$}}6Z?!Qegr+Sfp)(6gR6!PqfPutypa_9&fQ6MT zKWQF`nw+d9!PeX4IA7U|;^dbnM#QchM=7S;W%K=%sw6mLvX-NAOu>GsGSt@j(05j4 zo`L3xAl%muYy$L}1^qrZ>$u8xZj#JU#OR%I^U;kY=~nu{0j_W$(p)hqTsLvGWTA=; zWQgqas>f^K34#n{a1yR{-Roli?$^OqQaSDaaIsP&s%{`Cp0TIBJ3-hDFsybpthXX- zEz>&DU8WQnI<SXwoBQ18PPe+(&F(!AdPw7Lx4h>~Z>7S`Vv76#x#`XCew%ySSYh=L zv`_&p4B-y1Hi8&_!|h4$&=YY0cb_XohCT4%;uz1k#y8IKj(eOB@76=bKTh(Jn_Q`4 zYzz+aZE=&k{N)%2_#IfS1t&1T30gpS9|*7kF)*Mj-PUs_;y@qCL`qU4hq=;A9`d9w z{plQ6YPKAMG82!olr4w4)??0<9l&7b9H_v-hfo2X0{{Toj<v&Y+X=!^=IDTO`qs7H z^sLVv>V$qw&a4hhtlxd>uwJ+q`XGe=n%_L<ujaYWfxh-@;mPe}^0S)c{&%I<z4CZx zo@4ed<*P@}?wEf$tSu1458Pqk1wVMg#b5!i1f9}t&&-gDREFByzV<|tJd)z=@7~Y5 z>HGG*@YS7n$2g7ejfSDVhtGU;%N#qee|X!Aj++<IAPKW)60U*G{qB4J``{11__;6a z@tgnr=m)mu8*}{5_x%oa>zn-NPyf7OxyC~01mwX3_oexNa}^ae?cp<3Lv;1we+XzK z0O)KhBY^8cfUKkm5oaH|mw*7%JOSu{*#UtkWi=8P9u;VT?}C902t84A1$}S@t;YZa z5F8vhYaU2}BB(SZh<v6dfKed-1RFqjujYb{hc1<NY0eRXGsrCgRD!`2H3u*R00093 zU<7^Obw*GDAiw~x1_ENxf?UBdw&i$xCWOsFghkja&ErBg2sJ!2g%xlBI(G+kAOTP4 z1c_GySI`w)ST$T$A7VI$%hEi0afS`ZG7JC!1keXC(1TDY2s`j<06=zj_=B(D6JW?3 zd&q~o!a{%Oe#xhS(IW%|Pytrh2LR9obpQYx&;oN<hg%4Vt{{mrXo(WTLYV@HCde}= zcm*492Mk~W62JijX9S1X2Oxk3Uhs%nmVcZuiOW%mu$U^ch=iP28a)UY`T|CBB_7P! zjHkjvaHNSh7>!;rjb2gzjS;8`*9d}3k~VF#j_imw?D&pt<0P%pjel@j!4!Y>myi0m zBIMYCny_r>SZJUV3B)syk06hTM344JWd`X8D{?N8cq{<Pe@nG%)YfaBHYB)nk<%tk z^9YTLWRV<cJ<pdN5ZQ_nX&*_(Y4DSgdSGa&7IGg+izo(akoJ(Qm<K*VN#e1RENMd_ z_hvR3lL*-ut^$&$_LH4fk{^<jKCwp!xKyY{NG=JJR4J2)6iVKRFexTzs@5JSsguW& zay==PN(qz&b(S9a7+P76Q?^J``A1&~Ax_CdDruHVS(QV1l||VYZMl$esg_K69bxGc zK{6gXfR{h1mvLGDM{DUAzO<DE)R=2Dm+MiO$HG1Jfdh(JL)HXHX(>gY*-3qA2a)NP zo|lxO`AyL@n8JaXF=8LeB9N4MVY(EWO*EPnwnC3_nt-XAxyhQ><eDu~m!GhI;nA5Y z7Ec<rP#xt^e(+BrwVTR`QL>d#8^ur_)lbn0Q6j}wrRke*37lVboz2Nn4fRpoIh{#` zlg9{qoltAzkzX_QRPHrZW@S}sMV+*1U^Eq0&V`><g;rO!R+&_q+C-C7rd(hJRbwTf zXO&i1)t(*#o1Tz|^Vy%axmt_mTAT%0lEt64#9kcQTCWA7pe3Su02v7?nU3b4?Uh-Z z<ya^xTl7``p~i_@uQ*L4+FTC`UeXm`<)xxR$)Fe(pg<~K<TYPQ20)L|qNw?P<f&rq zg{06Gq~j%D<~3s-Vxh{kqeTj%xx``{=3*Y^2N4!yMEYq)+FoSJVK0WJAf}=erJ#Yi zp|kX+X8K@qs-_g$r8(*eJeiytx|l)9rh-|T(Bh&sS({sAnI;*io!~D~Iiij#MU0uK zn)4Wo8l{_fr-tgD_y?bz&_m-f2ZhR#nVOea=@^~*n-(RQqS}Q(_z6>o8GXP5k--Cf zU>OvUs+_i}hN`GY8LO;1t6=m8%8?nlx~siv84)vV(l(M9*$3*^B+@F9)OtL~wtkJl zRdx#hZPU7~BzbKQ;-#je8M(>?CeQ~azyx-{t65M1D?k|$!+Xuwe888l`C5FA0j`W% zO2Nmk!bhB^fv%h&pO%rUCg1{8-~uKPuYKSHK2QNvuqQ`Cd7*c5PNK0JOLG4DtswaU zp!cyL3#jiYeL7khP@t>1+6VB;1ii|uc0dKqYIGS}vL@?sm$$PVyChpRvO4Rt8)vXQ zBB>5z8T9G{eLw{b`>+wqs}yUo_G%;^OSBr-vslZs-f9P>1(+newI64+rGc=VK$eoR z0u@jJE?@`j>aOrAuk>0OrgF7n3vwMhw09e_UMsYB+i_$&7-qW(hdCK5AO>vfw(a`= zt`a-1_4;;JJFo=Xd;2=M1>3b>`<BaRxxN>;f-$(7a5{Q8By3;?rhB@mo4TsIx~$u} zrz>o(8@sYQyQbT<>J_ePkh{9OyS&@GzWckttGg&Wsw(@1_o0m=NMgkbj<1Qdop5iJ zio9f~ymrdGgz3DTP`LH+tF)Jm(t9Si+89v=tJVt~psNYUX&@+oeSmU%xQBa|NU8IJ zgh^PwWqZDV;2kwG9w;z--rFtEYX{?dVu5JCb@Cp`x(Um=zxMH~76_07JWB1L9tNBh z9D~5+*a>{bz;}s&xfQ{{gb)lDjSJ8l0g}O;uoxVCAOE{7AGm0YiV-C+!o#xv02hoA zv>K76a27Ox19LD3Z~zAxFvJ<414eAbNdN&#yu?i0#7?ZlTM)%j3;{`S#6t`Rb3g-D zU<D|E0!I)4FYp4?XB!C^88GarCY%xqK*Q}(!c{@MY$p|~00c8&05)&|TVTX+fCE+l z#+-qGCSwO@Y>#hT$c7BZUMR=gumo|C0}ucQDB#DH5di)d$b(G4hn&eek;5pd$o#;_ z7XSxf*uo`a#`LSnsI0~b91;(32Cn?dupG;>Jj=8^%RX>vsZ+YNyUVmYT983%F}x0S z00P8Z%*K4o$ehf|tjwvLvT+O)BhZkJU}=$&I+r8Oi{Q(T0nBJj5YdMJ&5O{?h+L~d z5zX34uE+KiD$GoucFySBJ5L4~%@)k#5N+=K&ehfj;>^in85PldsZG=i`m0i5%BtGz z81vlC0}*WiT|<Jf&#Md)|16lApuNEAm4p_^2~EiBz|evT(I_ku6V0j;NPQR0X7T(O z8;!~Jyq9vR&&|xw$RW`#?U;#yp_pc=nmS@CeabD}&@}YWF&)t#G17**3CniUN|w?H z?bCSR(X0y6{wNbht*S60zd6mLK+Q!N9T_Vv!5v-Gl?l_SEYs;C(qe5!_+YA8UC_hY zwRW&_G|3K7ZKzTWgELXp#3Y=6v<cy>)YZh-qzTt@P0vrA*7KwPn@M%o-u4rE{Y--G zNQ6t!h`O4$N!U(Z*Pa>Ki#^mK9TJaiSmvov=((LB6;Vkw*>k1U{>hxAt)0**ov00- zm_65FZKST9ozJPBvi+Tz#MsE_*r{coR+^s#x}T|yERMmxZe5<l{i9SBp#{pHSgmrI zJ=_2a-Nr4U2HIw1jml>2&pqm)9eSdk6{5-g2bw9qI*q5~ZK5A~-YMFoM{-|<t<dhE z*;HDhGYVVi%~rros>0o-xn!mAm8C<P-s{b5?VZ?13f%|3q+5EROESiBecc4^qu+I< zN~)!f6yU`>;9{Dm8V09lnx+#b*_x08de`9P>82&Vr!bcP;`BXxl2LW|-46O~oiN^F z9mc09E@Qv#*;5@8p}o{FBD(#{+6K+jkAdSH{nH;!<akZhh>fW*VgSwK;=!s^fqXI; zKILUi)DdyyR<;R{_X1pw(dY#kP|nhaz133$;?FD-4=@69Fs}IQYke>RBk%_XXp~2i zt$WU`)|zaebmONy%qV!zdoBpXJm#NW=90^~_4Wq}o3WK{>GHNqif-E=u<4x6Zr^># z;SJ4tE4ELeuyvd2TkGkO@#bI+0<Mm=rEbWl?%1_Xv`?|Y_+_=b?z6D&=BG^Se;aj@ zUgQ!T>^u7uINj>UUbIOvsEr}(A^g<LZnC#t$hn^X*V+EDi7_<59_?9MC6i(8$yd+c zzOmc>#@$ZUqCV=xrwQT?Z}Beg&S&nDao-#r>iAx7$zJ8G?B@hu@CJYI2%qo@U+|j1 zlP_Q<+n0V4Kk<mJfRgd5m^{qOyzw00@y8tSjqS-05x#9bF{CmF0+i$8yz&<D?jrvX zHZaEi`!4Vs83E9#hRyOikH0UU4@)qSju8NfnSJhC^pa=v?t64PaA_}K1s7n3FSPSg z&+|Rs4M9Ky0bt>?K>;ri09_2mTE7`y4+j@8i@TBTQ$O`CU-b?F%6n`DU!3&@LIDAA z1XeHyI<N&f5C>2{3Q?Z+I=}X89}+<j2L_P;16u$AMm)rGz{gyC1dt#3kskn*U-w6V z0#?w<tnkumu-j196b@s_^%Kzw&}V_^2Neq+j|}9`dRG`X90StPkE~4*Ryx4YEJ` znSA=U-}|@^=eke(lkWS(Uktz>{JUTK#lQTcfBeXg>&ovCtz660U;Wm92B$Fn*T4PT z{|kSw@g5)k;!o#^T+ZOU2&WLu=bs4P59i;!{)a&R<P6PvUg+?A)}CO__Rr_-4+wdJ z3V4Nvg&=(hVT_HAkC2g)j(vTHmzbHFm<ocPpP-e0qok##r>Lo_sUv-1ez38!v$VCg zvZAY{t*^Jfzqh%%sePY>nTfr?%gdGjo6pdkpwphh!`Illyv*Fc*4nP!;<ew|f5o21 zn91YqvCh%)&z;oM<>vU<+wSf6tl|8|`MZX0kS2Bk#le%u@Djaxp9bceh-zO#ZW2vd zyx6P{#dF3E0_51Sp-DpzAqvX)@#994zF3la3DcHLVj+=@tQpMGNs}p6-fW4FCeK+z zjUIjHkz&C->MkK%O3vp`hCv|?C7Mks)ucPA;%YkaY1Bhg#g4t&Fl)W7T(5a$mZlFz zvcu*st9$pOS&_=z@nyD<Z8W#k;Kl_PxZU86UBixh3`{Ypzd9RFwoBNmVQ7f$;ayBr zX<Z@}9QffQpn`xDekQb@VmAT*mkLwf^o*<-*6Gx%TfdGyyY}teyPf7-C)sx&)T&v# zhAkVnaooCXdd}460Hy=m=c$Z1nzYO2e(DxzP{EG?2O%5?@Y8{X2o`p4co?8TwRYaN zsK=gr@X1G?efasIAAkN;<=1jjp(kK_@5MJ?efQ<JUw=J8)7^LBZ4z22<(W5;X?F2d z!343jx1t|y*u_O9&m||9geltf;sh?T7^5FERzif0`C!IeZ|UXe$BsS1C?kzSYUkkr zb(qkH33cEB-W3&eaoBj(lxSj6I3`J;h4if<!WwpYaKiu%6hI_n0V-LcfgPyHrXOy? zDd&I6r2|-<X5M+Bo^8JW8E1#jbZ3GQQW#-^mVHPdK?O~K2Ifj)jtO8beDRfn9Io-< zM+#t6pn+X(w5CA<bFPA-nWL6^YO1UH(W<Jj0$LV?Xq71{sREdas;aEI+G|ysT;T*B z-F*lirA;*Pp?I5G=IKo6ebwnHdhw(!NP=dj7A=JxQo#-q^x?##kxmMprI>1(?YG;~ zdG1)B?hDJfMn;IFx0-ZOK?NY-QRS6cZrSCR_vTAcxHW+_@KOK+Ye-uAru&&DBa$aE zJ`ao_ha!`tta8egj4*;OC7-;=$~4#9^2<ePTn7kOpj`9MEcXFI!XJycX&&Q_IYI|} zH0|`$P)9BG)Ku^Pf$!2)XRY<t_~KM9T1;;(_SjB`SacyFhdHu2BkaM)+i=G%_uO>X zZ8slRyM6cGeDmEkDgh&+ci)5;{<hg?r_JfwT@7yd<9Fu``Q�eM;bXfZ#agoa22q z$VVq_V%wdUj<+_OoBp`vreLnQ>YO89wBks!zBcKwPcC`xklTKl#;^0f`sbO@F1mSG zldZhgSBJg)^HTdhitElpZ++9Ue{8(;`IhYR_uz*w{`lmV|2@p+r?39{F8}(qAv+H( z|NQjVZ~y)H%TK&C5i{=p{{Z9)=JrQG?S+ne0ZgC*B{skUI`AjkTc89dxWK32;Vci# zAXe~jKni;Q@Pi|JN**GBK@FM^WDz)8?Lf%F7A{7Ff{4HcPe{W<5F&*tT%ikh$U}3$ z@DnJhp##;CLy`6Hh)4w7(OQ7E84B?vgg8bEikKJ#Ch>{@{Nbh|z(lku;EN?3A{f=t z0vu9NC|1Ox8bf$SFm<tbV+7*`<M_o*OtFn^Jl-1jXdW%%@sEHE<aqSR$3hatkAh63 zBL7H8Lpm~Ni;Scs@z}^mT9P1>%%mp!cgapNaFd`6r4c<z$}u5Ql&B13B}>W5Q>OBj zXIv#KN$E;h+OmVQ%;h0($xBA2QJ1-_WiN+GB48R5lEh3Vm}CjeH~_(r!c^uknaRLP zpkWOEy7)m4{y+kcXp@`1`+*5a08L5K2n|jcj~D8YhYb{Co$ZWf9-@$iK3pLRlcZ+8 z`tSfGct8xg=;j~dPy=udw4m8QO&`cvNO^`X3Q>@N7{=qyJa{3U6}@N<P0)o6NWcX7 z{AB_?vV<=Hv<6l}!#2C=0S(j>3<7<rKxF`h3S<EZ;M9PsmOzRh*kGaMj3hdwFwp~` zp$}+ar#mG8f_iG9qE4--1-N8_62ub(2>XNt2#|*bR3M~$q){Kv@CPo`01Gv!062+& z1cAEMBLaoO6i9FeF$AHTHHbkUu+Tb&hSi)jVy6)fuz>@7)tx(tLPZx_jEY`i2OFsW zgBT*<PA6Dv1EAQz71#;bu#$iTKNv*}G=P8^f%BPfHK;)QAcH>yVXxg>!V-X53flfv zs2kV-SM!j$9T=gpeMli=<4N2;SRfBA=tFMNp<GWyph~o(qCU4ZnhMl_4jzDOQ@Z(s zw|3Vfa;2+X1$qv@PS3n+bZE9fQ2{4-6u5$LrxzGI-(oyAvSMgKMUjSCL3BY3O@Js^ z_c$64Q~(V`=mQ<dTZJshL7)wOut#XxhnpI-ynPMoB1L#9F?2z>`)z><o>~kMlQ<7k zy^>Y;+gw3ZK&%5kri_Q7UTMN|x--UNjcuGt9OpQRJLa({ef;Ai23g3UByy2Bd3a<b zYf`LGj<S@eOyw$D`N~+%vX-~Z<t}^q%U}+(n8WO^GMo9#Xil@5*UaWNyZOy<PDmgC F06RUDOc4M8 literal 0 HcmV?d00001 diff --git a/doc/html/entities.png b/doc/html/entities.png deleted file mode 100644 index 65e3a3cbbf4f8c272343ebecc86d67e682178c5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9900 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 bJ&>^n_^_=yKfK0lI0GojsmoT#n1}oaJ*;{K diff --git a/doc/html/faq.html b/doc/html/faq.html index 55a125cd553..b859751a30d 100644 --- a/doc/html/faq.html +++ b/doc/html/faq.html @@ -1,83 +1,121 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + <html> + <head> -<title>SLURM: Frequently Asked Questions</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:FAQ</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> </head> -<body> -<h1>SLURM: Frequently Asked Questions</h1> - +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2>Frequently Asked Questions</h2> <ol> -<li><a href="#comp">Why is my job/node in <i>completing</i> state?</a></li> -<li><a href="#rlimit">Why do I see the error "Can't propagate RLIMIT_..."?</a></li> +<li><a href="#comp">Why is my job/node in "completing" state?</a></li> +<li><a href="#rlimit">Why do I see the error "Can't propagate RLIMIT_..."?</a></li> <li><a href="#pending">Why is my job not running?</a></li> </ol> - -<p> -<a name="comp"> -<b>1. Why is my job/node in <i>completing</i> state?</b><br /> -When a job is terminating both the job and its nodes enter the state -<i>completing</i>. -As the SLURM daemon on each node determines that all processes associated -with the job have terminated, that node changes state to <i>idle</i> or -some other appropriate state. -When every node allocated to a job has determined that all processes -associated with it have terminated, the job changes state to <i>completed</i> -or some other appropriate state. -Normally this happens within a fraction of one second. -However if the job has processes which can not be terminated with a SIGKILL, -the job and one or more nodes can remain in the <i>completing</i> state for -an extended period of time. -This may be indicative of processes hung waiting for a core file to completed -I/O or operating system failure. -If this state persists, the system administrator should use the <b>scontrol</b> -command to change the node's state to <i>down</i>, reboot the node, then reset -the node's state to <i>idle</i>. -<p> -<a name="rlimit"> -<b>2. Why do I see the error "Can't propagate RLIMIT_..."?</b><br /> -When the <b>srun</b> command executes, it captures the resource limits in -effect at that time. -These limits are propagated to the allocated nodes before initiating the -user's job. -If the soft resource limits on the job submit host are higher than the -hard resource limits on the allocated host, SLURM will be unable to -propagate the resource limits and print an error of the type shown above. -It is recommended that the system administrator establish uniform hard -resource limits on all nodes within a cluster to prevent this from occurring. -<p> -<a name="pending"> -<b>3. Why is my job not running?</b><br /> -The answer to this question depends upon the scheduler used by SLURM. -Executing the command -<i>scontrol show config | grep SchedulerType</i> will supply this information. -If the scheduler type is <b>builtin</b>, then jobs will be executed in the -order of submission for a given partition. -Even if resources are available to initiate your job immediately, it will -be deferred until no previously submitted job is pending. -If the scheduler type is <b>backfill</b>, then jobs will generally be -executed in the order of submission for a given partition with one -exception: later submitted jobs will be initiated early if doing so does -not delay the expected execution time of an earlier submitted job. -In order for backfill scheduling to be effective, users jobs should specify -reasonable time limits. -If jobs do not specify time limits then all jobs will receive the same -time limit, that associated with the partition, and the ability to backfill -schedule jobs will be limited. -The backfill scheduler does not alter job specifications of required or -excluded nodes, so jobs which specify nodes will substantially reduce -the effectiveness of backfill scheduling. -If the scheduler type is <b>wiki</b>, this represents -<a href="http://supercluster.org/maui">The Maui Scheduler</a>. -Please refer to its documentation for help. -For any scheduler, you can check priorities of jobs using the command -<i>scontrol show job</i>. - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/faq.html -<p>UCRL-WEB-201790 -<p>Last Modified January 9, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> +<p><a name="comp"><b>1. Why is my job/node in "completing" state?</b></a><br> +When a job is terminating, both the job and its nodes enter the state "completing." +As the SLURM daemon on each node determines that all processes associated with +the job have terminated, that node changes state to "idle" or some other +appropriate state. When every node allocated to a job has determined that all +processes associated with it have terminated, the job changes state to "completed" +or some other appropriate state. Normally, this happens within a fraction of one +second. However, if the job has processes that cannot be terminated with a SIGKILL, +the job and one or more nodes can remain in the completing state for an extended +period of time. This may be indicative of processes hung waiting for a core file +to complete I/O or operating system failure. If this state persists, the system +administrator should use the <span class="commandline">scontrol</span> command +to change the node's state to "down," reboot the node, then reset the +node's state to idle.</p> +<p><a name="rlimit"><b>2. Why do I see the error "Can't propagate RLIMIT_..."?</b></a><br> +When the <span class="commandline">srun</span> command executes, it captures the +resource limits in effect at that time. These limits are propagated to the allocated +nodes before initiating the user's job. If the soft resource limits on the job +submit host are higher than the hard resource limits on the allocated host, SLURM +will be unable to propagate the resource limits and print an error of the type +shown above. It is recommended that the system administrator establish uniform +hard resource limits on all nodes within a cluster to prevent this from occurring.</p> +<p><a name="pending"><b>3. Why is my job not running?</b></a><br> +The answer to this question depends upon the scheduler used by SLURM. Executing +the command</p> +<blockquote> +<p> <span class="commandline">scontrol show config | grep SchedulerType</span></p> +</blockquote> +<p> will supply this information. If the scheduler type is <b>builtin</b>, then +jobs will be executed in the order of submission for a given partition. Even if +resources are available to initiate your job immediately, it will be deferred +until no previously submitted job is pending. If the scheduler type is <b>backfill</b>, +then jobs will generally be executed in the order of submission for a given partition +with one exception: later submitted jobs will be initiated early if doing so does +not delay the expected execution time of an earlier submitted job. In order for +backfill scheduling to be effective, users jobs should specify reasonable time +limits. If jobs do not specify time limits, then all jobs will receive the same +time limit (that associated with the partition), and the ability to backfill schedule +jobs will be limited. The backfill scheduler does not alter job specifications +of required or excluded nodes, so jobs which specify nodes will substantially +reduce the effectiveness of backfill scheduling. If the scheduler type is <b>wiki</b>, +this represents <a href="http://supercluster.org/maui">The Maui Scheduler</a>. +Please refer to its documentation for help. For any scheduler, you can check priorities +of jobs using the command <span class="commandline">scontrol show job</span>.</p></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> </body> </html> diff --git a/doc/html/help.html b/doc/html/help.html index 58e18df8c70..067dfa49d22 100644 --- a/doc/html/help.html +++ b/doc/html/help.html @@ -1,26 +1,80 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + <html> + <head> -<title>SLURM: Getting Help</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:Help</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> </head> -<body> -<h1>SLURM: Getting Help</h1> - +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2>Getting Help</h2> +<p>Try the following steps if you are having problems with SLURM:</p> <ol> -<li>Check the <a href="faq.html">SLURM FAQ</a>.</li> -<li>For run-time problems, try running the command or daemons in verbose -mode ("-v" option) and see if additional information helps you resolve the -problem.</li> -<li>Send a detailed description of the problem and logs to -<a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a></li> -</ol> - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/help.html -<p>UCRL-WEB-201790 -<p>Last Modified January 8, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> +<li>See if the problem is addressed in the <a href="faq.html">SLURM FAQ</a>.</li> +<li>For run-time problems, try running the command or daemons in verbose mode +(<span class="commandline">-v</span> option), and see if additional information +helps you resolve the problem.</li> +<li>Send a detailed description of the problem and logs to <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</li> +</ol></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> </body> </html> diff --git a/doc/html/index.html b/doc/html/index.html deleted file mode 100644 index 1a2ec7e9e48..00000000000 --- a/doc/html/index.html +++ /dev/null @@ -1,101 +0,0 @@ -<html> -<head> -<title>SLURM</title> - -<style type="text/css"> -body { margin: 0px; - background-color:#9f3; } - -#header { padding-left: 20px; - border: 3px solid black; - background-color:#f3f; - margin: 0px; } - -#content { padding: 1px 10px 1px 10px; - border: none; - float: right; - width: 70%; - background-color: #fff; } - -#nav { padding: 10px 10px 1px 10px; - border: none; - float: left; - width: 20%; - background-color:#9f3;} - -</style> -</head> - -<body> -<div id="header"> -<font size="7"><b>SLURM</b></font><br /> -<font size="6">Simple Linux Utility for Resource Management</font> -</div> - -<div id="content"> -<h2>SLURM: A Highly Scalable Resource Manager</h2> -<p>SLURM is an open-source resource manager designed for Linux Clusters -of all sizes. -It provides three key functions. -First it allocates exclusive and/or non-exclusive access to resources -(computer nodes) to users for some duration of time so they can perform work. -Second, it provides a framework for starting, executing, and monitoring work -(typically a parallel job) on a set of allocated nodes. -Finally, it arbitrates conflicting requests for resources by managing a -queue of pending work. </p> - -<p>SLURM is not a sophisticated batch system, but it does provide -an Applications Programming Interface (API) for integration -with external schedulers such as -<a href="http://supercluster.org/maui">The Maui Scheduler</a>. -While other resources managers do exist, SLURM is unique in -several respects: -<ul> -<li>It's source code is freely available under the -<a href="http://www.gnu.org/licenses/gpl.html">GNU General -Public License</a>.</li> -<li>It is designed to operate in a heterogeneous cluster with -up to thousands of nodes.</li> -<li>It is portable; written in C with a GNU <i>autoconf</i> -configuration engine. While initially written for Linux, other UNIX-like -operating systems should be easy porting targets. -A plugin mechanism exists to support various interconnects, -authentication mechanisms, schedulers, etc.</li> -<li>SLURM is highly tolerant of system failures including failure -of the node executing its control functions.</li> -<li>It is simple enough for the motivated end user to understand -its source and add functionality.</li> -</ul> - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/index.html -<p>UCRL-WEB-201790 -<p>Last Modified January 7, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> - -</div> - -<div id="nav"> -<font size="4"><b> -<big><i>About</i></big><br /> -<a href="overview.html" >Overview </a><br /> -<a href="news.html" >What's New </a><br /> -<a href="publications.html" >Publications </a><br /> -<a href="team.html" >SLURM Team </a><br /> -<br /> -<big><i>Using</i></big><br /> -<a href="documentation.html" >Documentation</a><br /> -<a href="faq.html" >FAQ </a><br /> -<a href="help.html" >Getting Help </a><br /> -<br /> -<big><i>Installing</i></big><br /> -<a href="platforms.html" >Platforms </a><br /> -<a href="download.html" >Download </a><br /> -<a href="quickstart.admin.html">Guide </a><br /> -</b></font> -</div> - -</body> -</html> diff --git a/doc/html/lll.gif b/doc/html/lll.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1227248e0ac713e2206273b4009d96d3f5184b3 GIT binary patch literal 1794 zcmeH`{ZA7I7=W*(A1BswM@xHr-#JjL3^*rBg=kx73-tpiY-*9MrMfYXIq=kU7FY{c zK+|mCPKQae;pRDYbP;9~W2{-RR5KZYhy)jPR+&~~25!zS*-Y2_C-&3cJbCi`_9k!g z>MM1{N(&00KokICu~;Y+^M|5-f6VWX`dH?DzL?K9@AbyK-l*3*?`5Kl_c6o77-pVf z9(z3V9#7o&JoIClo~K#gqv;vieb3D@<91KDse5i}hGLnZsE|F5ea3E|u-oI|x04g3 z-A~3%hDb6VK9UHLgr6Wn1Zy8bcnPcD%Hp$Hy;dt@HTg^|UXzJ28GR<B*JNajMz4{z z$7o=T29LquH5eEJ8?-^g7&IP@hS9L5H5#`@>Cq@@jnb`DdX!39$p)pwX(jH)aT;e$ z;kX@FxD^Uo!J1Mi><Y}Sz$gV44-&&D46|eLKqw5cV@Ny*1hFFsiNpi4BM^x|1O$-~ zYbykqAdrMW0s^fdNPw(OAV7iu0RmPKh_?{{2mr7GfC*sR0Q^7y?FI7Kb?h$yU<`l} zWRR)KP8aSMJ-F%`O;p+b>2uVS>61|1@zTJ^*p1Y6t-R!MNhAcgM42zcU+ejzwDoO3 z<>=hulswCiLmyckDqv+h?>16xwa6E*;_?qD%X-A9{&+<=(z+#+%jGsL%Aq5J8_YR5 zOV*s>xl@aF<)7V=yJ>45zfJbcL|1K>?|gNtn0UBUvaI%Qhx;Z898=|1i4%E(vxBOS z2OiDh-!GFDd{`z!k-DA-8yfP@L(}?#v4LX=pQ#_7p5XF?7ZwyJ`ugrJ!s(~@;y=FX zUv3;S=O^q_ckxF4epU_4RSo7Njn^$VAMv&6DhlD;!N=43ptQo+Y}$(6PIMyBZ05YT zB~4z~@&X(=cw}L9(`@kU8<x?of_6IUfDbuBYEg4<jX+db`eqPz?C5vNo1WDP1(Nc@ zP_w?m9L%;g!=0ig+jG9@Olp5{%iH&(x=fqd;pC?a_62$R2z*Vp^!kD;rFOcnOZ@Yz zBCTxi6R9vOqeb;vR(r;<6W)KZ#<gg*?Kw|U3~-KZ*<lX9l~xiC=s~Q>EI^%W0#2Bu zTN%-gJWH@vyOlF0PaJvPoyj?ljtcgmIzFf#hjr2wcO2Se-Of4Y;7Y^T1O3Xrmd?}; z@b~h>N*WVL@Y%^Atcp~ZEx|8b;)-$yVp{GZ?c7vn;_K(9o_wS2ea=5yB!Ve%@$}?q zVy*)i6{On+)xz}yc<+ItQ&>fo@$zKX;i`zE0U8^*G<tEBqk42`4TbfhP2uVg+F@3g zElD=ulvpov_QN{WEHCAq>egLphrmX?xOmPnc4_y5s!L)lbe@CN8Lj1#>NPk&rD6}~ z8u}?8EKgGA^y{-f$f?<vyeZ@4RdLY|_cf<)>^UFc6xdovGHu|}a`<)t>&dK_)=)<( zi+|;gpiSmLf;h+Ql&JY!FuP6KUk-1i`@1uD=Q+!DoBukWAbNOoAs|TI4yjW*MUC&G zZNO1VS|trra$@lDFkfb?!nKmkFVd+aD#+q8I)>`jWg9nR{9ru|cgyQ5KADr7+*7*r zJ=a_HcQ`Ktj~;F}*SJ!)nWtRxhPvV46oGTbqzCt6!mI;3+y87nVEyfotiBo6A=`^< z%9GYk7j`9P)-42*52Aw7yH`FByX1}ZtP5!XzM!D>r5iOuMO~l=y|VE;+W7wcZI;w; zhljgg)=E!41r;k`X|}!Tms=58@4Cx@s^*riFDK2alJT&Z94N~=w;bFsZCT41s(-@8 jgvwyR(Q&9O<H2O0BoatMOHSMxnkk9?bUKN{0ZRS_cnvjd literal 0 HcmV?d00001 diff --git a/doc/html/news.html b/doc/html/news.html index 31bb3f675a1..9fb697157c9 100644 --- a/doc/html/news.html +++ b/doc/html/news.html @@ -1,68 +1,111 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + <html> + <head> -<title>SLURM: What's New</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:What's New</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> </head> -<body> -<h1>SLURM: What's New</h1> - -<h2>Major Updates in SLURM Version 0.3</h2> -<p>We expect to make SLURM Version 0.3 available in the first -quarter of 2004. Major enhancements include: +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2>What's New</h2> +<h3>Major Updates in SLURM Version 0.3</h3> +<p>We expect to make SLURM Version 0.3 available in the first quarter of 2004. +Major enhancements include: <ul> -<li>Scheduler plugin developed for backfill scheduling and -<a href="http://supercluster.org/maui">The Maui Scheduler</a>.</li> -<li>I/O streams for all tasks on a node are transmitted through one pair of -sockets instead of distinct sockets for each task. This improves performance -and scalability.</li> +<li>Scheduler plugin developed for backfill scheduling and <a href="http://supercluster.org/maui">The +Maui Scheduler</a>.</li> +<li>I/O streams for all tasks on a node are transmitted through one pair of sockets +instead of distinct sockets for each task. This improves performance and scalability.</li> <li>Support for <a href="http://www.lam-mpi.org/">LAM/MPI</a> is provided.</li> <li>The interconnect/switch logic has been moved to a plugin.</li> <li>Load-leveling performed to distribute workload across shared nodes.</li> <li>Job completion plugin developed to log job details.</li> -<li>The <i>srun</i> command properly handles job step termination upon -node failure.</li> +<li>The <b>srun</b> command properly handles job step termination upon node failure.</li> <li>All commands will re-read the slurm configuration file when changed.</li> <li>An arbitrary signal may be sent to a batch script (and not its processes).</li> <li>Batch scripts can have arguments that are propagated.</li> </ul> -</p> - -<p>For a complete list of enhancements in SLURM version 0.3, please see -the NEWS file with the code distribution.</p> - -<h2>Major Updates in SLURM Version 0.4</h2> -<p> -We expect to make SLURM Version 0.4 available in the second -quarter of 2004. Major enhancements include: +<p>For a complete list of enhancements in SLURM version 0.3, please see the NEWS +file with the code distribution.</p> +<h3>Major Updates in SLURM Version 0.4</h3> +<p>We expect to make SLURM Version 0.4 available in the second quarter of 2004. +Major enhancements include: <ul> <li>Support for the AIX operating system.</li> <li>Support for the IBM Federation switch.</li> </ul> - -<h2>Major Updates in SLURM Version 0.5 and beyond</h2> -<p> -Detailed plans for release dates and contents of future SLURM releases -have not been finalized. Development planned in the immediate future includes: +<h3>Major Updates in SLURM Version 0.5 and beyond</h3> +<p> Detailed plans for release dates and contents of future SLURM releases have +not been finalized. Development planned in the immediate future includes: <ul> <li>Support of various MPI types via a plugin mechanism.</li> <li>Permit resource allocations (jobs) to change size.</li> -<li>Manage consumable resources on a per-node (e.g. memory, disk space) -and system-wide basis (e.g. licenses).</li> +<li>Manage consumable resources on a per-node (e.g,. memory, disk space) and system-wide +basis (e.g., licenses).</li> <li>Preempt/resume jobs per scheduler directives.</li> <li>Checkpoint/restart jobs per scheduler directives.</li> -<li>Support for the IBM <a href="http://www.research.ibm.com/bluegene/"> -IBM BlueGene/L</a> system.</li> - -</ul> -</p> - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/news.html -<p>UCRL-WEB-201790 -<p>Last Modified January 7, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> - +<li>Support for the IBM <a href="http://www.research.ibm.com/bluegene/">IBM BlueGene/L</a> +system.</li> +</ul></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> </body> </html> diff --git a/doc/html/overview.html b/doc/html/overview.html index 6aa0415481c..a79a369cbdf 100644 --- a/doc/html/overview.html +++ b/doc/html/overview.html @@ -1,97 +1,94 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + <html> + <head> -<title>SLURM: Overview</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:Overview</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> </head> -<body> -<h1>SLURM: Overview</h1> - -<p>SLURM is an open-source resource manager designed for Linux Clusters -of all sizes. -It was developed by the collaborative efforts of -<a href="http://www.llnl.gov/">Lawrence Livermore National Laboratory (LLNL)</a> -and <a href="http://www.lnxi.com/">Linux NetworX</a>. -It provides three key functions. -First it allocates exclusive and/or non-exclusive access to resources -(computer nodes) to users for some duration of time so they can perform work. -Second, it provides a framework for starting, executing, and monitoring work -(typically a parallel job) on a set of allocated nodes. -Finally, it arbitrates conflicting requests for resources by managing a -queue of pending work. </p> - -<p>SLURM is not a sophisticated batch system, but it does provide -an Applications Programming Interface (API) for integration -with external schedulers such as -<a href="http://supercluster.org/maui">The Maui Scheduler</a>. -While other resources managers do exist, SLURM is unique in -several respects: -<ul> -<li>It's source code is freely available under the -<a href="http://www.gnu.org/licenses/gpl.html">GNU General -Public License</a>.</li> -<li>It is designed to operate in a heterogeneous cluster with -up to thousands of nodes.</li> -<li>It is portable; written in C with a GNU <i>autoconf</i> -configuration engine. While initially written for Linux, other UNIX-like -operating systems should be easy porting targets. -A plugin mechanism exists to support various interconnects, -authentication mechanisms, schedulers, etc.</li> -<li>SLURM is highly tolerant of system failures including failure -of the node executing its control functions.</li> -<li>It is simple enough for the motivated end user to understand -its source and add functionality.</li> -</ul> -</p> -<h2>Architecture</h2> - -<p>SLURM has a centralized manager, <i>slurmctld</i>, to monitor -resources and work. -There may also be a backup manager to assume those responsibilities -in the event of failure. -Each compute server (node) has a <i>slurmd</i> daemon, which can be -compared to a remote shell: it waits for work, executes that work, -returns status, and waits for more work. -User tools include <i>srun</i> to initiate jobs, -<i>scancel</i> to terminate queued or running jobs, -<i>sinfo</i> to report system status, and -<i>squeue</i> to report the status of jobs. -There is also an administrative tool <i>scontrol</i> available to -monitor and/or modify configuration and state information. -APIs are available for all functions. </p> -<p align=center> -<img src="arch.png"> -</p> - -<p>SLURM has a general-purpose plugin mechanism available to easily -support various infrastructure. -These plugins presently include: +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2><a name="top">Overview</a></h2> +<p>SLURM is an open-source resource manager designed for Linux clusters of all +sizes. It was developed by the collaborative efforts of <a href="http://www.llnl.gov/">Lawrence +Livermore National Laboratory (LLNL)</a> and <a href="http://www.lnxi.com/">Linux +NetworX</a>.</p> +<h3>Architecture</h3> +<p>SLURM has a centralized manager, <b>slurmctld</b>, to monitor resources and +work. There may also be a backup manager to assume those responsibilities in the +event of failure. Each compute server (node) has a <b>slurmd</b> daemon, which +can be compared to a remote shell: it waits for work, executes that work, returns +status, and waits for more work. User tools include <b>srun</b> to initiate jobs, +<b>scancel</b> to terminate queued or running jobs, <b>sinfo</b> to report system +status, and <b>squeue</b> to report the status of jobs. There is also an administrative +tool <b>scontrol</b> available to monitor and/or modify configuration and state +information. APIs are available for all functions.</p> +<p><img src="arch.gif" width="552" height="432"></p> +<p>SLURM has a general-purpose plugin mechanism available to easily support various +infrastructure. These plugins presently include: <ul> -<li>Authentication of communications: -<a href=http://www.cs.berkeley.edu/~bnc/authd>authd</a>, -<a href=http://www.llnl.gov/linux/munge/>munge</a>, or none (default). </li> +<li>Authentication of communications: <a href="http://www.cs.berkeley.edu/~bnc/authd">authd</a>, +munge, or none (default).</li> <li>Job logging: text file or none (default).</li> -<li>Scheduler: -<a href="http://supercluster.org/maui">The Maui Scheduler</a>, +<li>Scheduler: <a href="http://supercluster.org/maui">The Maui Scheduler</a>, backfill, or FIFO (default).</li> -<li>Switch or interconnect: -<a href="http://www.quadrics.com/">Quadrics</a> Elan3 or Elan4 or -none (actually means nothing requiring special handling, default).</li> +<li>Switch or interconnect: <a href="http://www.quadrics.com/">Quadrics</a> Elan3 +or Elan4 or none (actually means nothing requiring special handling, default).</li> </ul> -</p> - -<h2>Configurability</h2> -Node state monitored include: count of processors, size of real memory, -size of temporary disk space, and state (UP, DOWN, etc.). -Additional node information includes weight (preference in being allocated -work) and features (arbitrary information such as processor speed or type). -Nodes are grouped into disjoint partitions. -Partition information includes: name, list of associated nodes, -state (UP or DOWN), maximum job time limit, maximum node count per job, -group access list, and shared node access (YES, NO or FORCE). -Bit maps are used to represent nodes and scheduling decisions can be made -by performing a small number of comparisons and a series of fast bit map -manipulations. -A sample (partial) SLURM configuration file follows. +<p class="footer"><a href="#top">top</a></p> +<h3>Configurability</h3> +<p>Node state monitored include: count of processors, size of real memory, size +of temporary disk space, and state (UP, DOWN, etc.). Additional node information +includes weight (preference in being allocated work) and features (arbitrary information +such as processor speed or type). Nodes are grouped into disjoint partitions. +Partition information includes: name, list of associated nodes, state (UP or DOWN), +maximum job time limit, maximum node count per job, group access list, and shared +node access (YES, NO or FORCE). Bit maps are used to represent nodes and scheduling +decisions can be made by performing a small number of comparisons and a series +of fast bit map manipulations. A sample (partial) SLURM configuration file follows.</p> <pre> # # Sample /etc/slurm.conf @@ -128,22 +125,28 @@ PartitionName=debug Nodes=lx[0003-0030] State=UP Default=YES PartitionName=class Nodes=lx[0031-0040] AllowGroups=students PartitionName=batch Nodes=lx[0041-9999] MaxTime=UNLIMITED MaxNodes=4096 </pre> - -<h2>Status</h2> -SLURM has been deployed on all LLNL Linux clusters having Quadrics Elan -switches since the summer of 2003. -This includes IA32 and IA64 clusters having over 1000 nodes. -Fault-tolerance has been excellent. -Parallel job performance has also been excellent. -The throughput rate of simple 2000 task jobs across 1000 nodes is over -12 per minute or under five seconds per job. - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/overview.html -<p>UCRL-WEB-201790 -<p>Last Modified January 7, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> +<h3>Status</h3> +<p>SLURM has been deployed on all LLNL Linux clusters having Quadrics Elan switches +since the summer of 2003. This includes IA32 and IA64 clusters having over 1000 +nodes. Fault-tolerance has been excellent. Parallel job performance has also been +excellent. The throughput rate of simple 2000 task jobs across 1000 nodes is over +12 per minute or under 5 seconds per job.</p> +<p class="footer"><a href="#top">top</a></p></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> </body> </html> diff --git a/doc/html/platforms.html b/doc/html/platforms.html index 00b3e5ecbac..60c78aa1e2e 100644 --- a/doc/html/platforms.html +++ b/doc/html/platforms.html @@ -1,76 +1,95 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + <html> + <head> -<title>SLURM: Platforms</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:Platforms</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> </head> -<body> -<h1>SLURM: Platforms</h1> - -<h2>Operating Systems</h2> +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2>Platforms</h2> +<h3>Operating Systems</h3> <ul> -<li><a href="#aix">AIX</a></li> -<li><a href="#linux">Linux</a></li> -<li><a href="#other">Other</a></li> +<li><b>AIX</b>—SLURM support for AIX is anticipated in the second quarter +of 2004.</li> +<li><b>Linux</b>—SLURM has been thoroughly tested on Red Hat Linux using +both IA32 and IA64. We anticipate SLURM functioning properly on other Linux distributions +as well.</li> +<li><b>Other</b>—SLURM ports to other systems will be gratefully accepted.</li> </ul> - -<h2>Interconnects</h2> +<h3>Interconnects</h3> <ul> -<li><a href="#ethernet">Ethernet</a></li> -<li><a href="#federation">IBM Federation</a></li> -<li><a href="#infiniband">Infiniband</a></li> -<li><a href="#myrinet">Myrinet</a></li> -<li><a href="#other">Other</a></li> -<li><a href="#elan">Quadrics Elan</a></li> -</ul> - -<h2>Operating System Details</h2> -<p> -<a name="aix"> -<b>AIX</b><br /> -SLURM support for AIX is anticipated in the second quarter of 2004. -<p> -<a name="linux"> -<b>Linux</b><br /> -SLURM has been thoroughly tested on Red Hat Linux using both IA32 and IA64. -We anticipate SLURM functioning properly on other Linux distributions as well. - -<h2>Interconnect Details</h2> -<p> -<a name="ethernet"> -<b>Ethernet</b><br /> -Ethernet requires no special support from SLURM and has been -thoroughly tested. -<p> -<a name="federation"> -<b>IBM Federation</b><br /> -SLURM support for IBM's Federation Switch is anticipated in -the second quarter of 2004. -<p> -<a name="infiniband"> -<b>Infiniband</b><br /> -Infiniband has not been tested with SLURM, but we expect this work -to be completed sometime in 2004 with minimal effort. -<p> -<a name="myrinet"> -<b>Myrinet</b><br /> -Myrinet requires no special support from SLURM and has been -thoroughly tested. -<p> -<a name="other"> -<b>Other</b><br /> -SLURM ports to other systems will be gratefully accepted. -<p> -<a name="elan"> -<b>Quadrics Elan</b><br /> -SLURM support for Quadrics Elan 3 and Elan 4 switches have been -thoroughly tested. - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/platforms.html -<p>UCRL-WEB-201790 -<p>Last Modified January 8, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> +<li><b>Ethernet</b>—Ethernet requires no special support from SLURM and has +been thoroughly tested.</li> +<li><b>IBM Federation</b>—SLURM support for IBM's Federation Switch is anticipated +in the second quarter of 2004.</li> +<li><b>Infiniband</b>—Infiniband has not been tested with SLURM, but we expect +this work to be completed sometime in 2004 with minimal effort.</li> +<li><b>Myrinet</b>—Myrinet requires no special support from SLURM and has +been thoroughly tested.</li> +<li><b>Quadrics Elan</b>—SLURM support for Quadrics Elan 3 and Elan 4 switches +have been thoroughly tested.</li> +<li><b>Other</b>—SLURM ports to other systems will be gratefully accepted.</li> +</ul></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> </body> </html> diff --git a/doc/html/plugins.html b/doc/html/plugins.html index 5078e147228..5df93de2313 100644 --- a/doc/html/plugins.html +++ b/doc/html/plugins.html @@ -1,469 +1,171 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> -<!-- ================================================================================ --> - -<!-- This HTML file was created by AbiWord. --> - -<!-- AbiWord is a free, Open Source word processor. --> - -<!-- You may obtain more information about AbiWord at www.abisource.com --> - -<!-- ================================================================================ --> -<html xmlns:v="urn:schemas-microsoft-com:vml" -xmlns:o="urn:schemas-microsoft-com:office:office" -xmlns:w="urn:schemas-microsoft-com:office:word" -xmlns:st1="urn:schemas-microsoft-com:office:smarttags" -xmlns="http://www.w3.org/TR/REC-html40"> +<html> <head> -<meta http-equiv=Content-Type content="text/html; charset=utf-8"> -<meta name=ProgId content=Word.Document> -<meta name=Generator content="Microsoft Word 10"> -<meta name=Originator content="Microsoft Word 10"> -<link rel=File-List href="plugins_files/filelist.xml"> -<title>/home/jwindley/slurm/docs/plugins.html</title> -<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags" - name="place"/> -<!--[if gte mso 9]><xml> - <o:DocumentProperties> - <o:Author>Jay Windley</o:Author> - <o:Template>Normal</o:Template> - <o:LastAuthor>Jay Windley</o:LastAuthor> - <o:Revision>2</o:Revision> - <o:TotalTime>2</o:TotalTime> - <o:Created>2003-03-21T21:09:00Z</o:Created> - <o:LastSaved>2003-03-21T21:11:00Z</o:LastSaved> - <o:Pages>1</o:Pages> - <o:Words>781</o:Words> - <o:Characters>4453</o:Characters> - <o:Company> </o:Company> - <o:Lines>37</o:Lines> - <o:Paragraphs>10</o:Paragraphs> - <o:CharactersWithSpaces>5224</o:CharactersWithSpaces> - <o:Version>10.3501</o:Version> - </o:DocumentProperties> -</xml><![endif]--><!--[if gte mso 9]><xml> - <w:WordDocument> - <w:SpellingState>Clean</w:SpellingState> - <w:GrammarState>Clean</w:GrammarState> - <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> - </w:WordDocument> -</xml><![endif]--><!--[if !mso]><object - classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object> -<style> -st1\:*{behavior:url(#ieooui) } -</style> -<![endif]--> -<style> -<!-- -@media print - -{ - - body - - { - - padding-top: 1in; padding-bottom: 1in; - - padding-left: 1in; padding-right: 1in; - - } - -} -body - {widows: 2; - font-stretch: normal;} -p - {widows: 2; - font-stretch: normal;} -.NORMAL - {widows: 2; - font-stretch: normal;} - - /* Font Definitions */ - @font-face - {font-family:Courier; - panose-1:2 7 4 9 2 2 5 2 4 4; - mso-font-alt:"Courier New"; - mso-font-charset:0; - mso-generic-font-family:modern; - mso-font-format:other; - mso-font-pitch:fixed; - mso-font-signature:3 0 0 0 1 0;} -@font-face - {font-family:Wingdings; - panose-1:5 0 0 0 0 0 0 0 0 0; - mso-font-charset:2; - mso-generic-font-family:auto; - mso-font-pitch:variable; - mso-font-signature:0 268435456 0 0 -2147483648 0;} -@font-face - {font-family:"Nimbus Roman"; - panose-1:0 0 0 0 0 0 0 0 0 0; - mso-font-alt:"Times New Roman"; - mso-font-charset:0; - mso-generic-font-family:roman; - mso-font-format:other; - mso-font-pitch:auto; - mso-font-signature:0 0 0 0 0 0;} -@font-face - {font-family:"Nimbus Sans"; - panose-1:0 0 0 0 0 0 0 0 0 0; - mso-font-alt:"Times New Roman"; - mso-font-charset:0; - mso-generic-font-family:roman; - mso-font-format:other; - mso-font-pitch:auto; - mso-font-signature:0 0 0 0 0 0;} - /* Style Definitions */ - p.MsoNormal, li.MsoNormal, div.MsoNormal - {mso-style-parent:""; - margin:0in; - margin-bottom:.0001pt; - mso-pagination:widow-orphan; - font-size:12.0pt; - font-family:"Times New Roman"; - mso-fareast-font-family:"Times New Roman"; - color:windowtext;} -h1 - {margin-top:21.95pt; - margin-right:0in; - margin-bottom:2.95pt; - margin-left:0in; - mso-pagination:widow-orphan; - mso-outline-level:1; - font-size:17.0pt; - font-family:"Nimbus Sans"; - color:windowtext; - font-weight:bold;} -h2 - {margin-top:21.95pt; - margin-right:0in; - margin-bottom:2.95pt; - margin-left:0in; - mso-pagination:widow-orphan; - mso-outline-level:2; - font-size:14.0pt; - font-family:"Nimbus Sans"; - color:windowtext; - font-weight:bold;} -p - {margin-top:0in; - margin-right:0in; - margin-bottom:11.95pt; - margin-left:0in; - mso-pagination:widow-orphan; - font-size:12.0pt; - font-family:"Nimbus Roman"; - mso-fareast-font-family:"Times New Roman"; - mso-bidi-font-family:"Times New Roman"; - color:black;} -p.heading1, li.heading1, div.heading1 - {mso-style-name:heading1; - margin-top:21.95pt; - margin-right:0in; - margin-bottom:2.95pt; - margin-left:0in; - mso-pagination:widow-orphan; - font-size:17.0pt; - font-family:"Nimbus Sans"; - mso-fareast-font-family:"Times New Roman"; - mso-bidi-font-family:"Times New Roman"; - color:black; - font-weight:bold;} -p.heading2, li.heading2, div.heading2 - {mso-style-name:heading2; - margin-top:21.95pt; - margin-right:0in; - margin-bottom:2.95pt; - margin-left:0in; - mso-pagination:widow-orphan; - font-size:14.0pt; - font-family:"Nimbus Sans"; - mso-fareast-font-family:"Times New Roman"; - mso-bidi-font-family:"Times New Roman"; - color:black; - font-weight:bold;} -p.normal, li.normal, div.normal - {mso-style-name:normal; - margin-top:0in; - margin-right:0in; - margin-bottom:11.95pt; - margin-left:0in; - mso-pagination:widow-orphan; - font-size:12.0pt; - font-family:"Nimbus Roman"; - mso-fareast-font-family:"Times New Roman"; - mso-bidi-font-family:"Times New Roman"; - color:black;} -span.SpellE - {mso-style-name:""; - mso-spl-e:yes;} -span.GramE - {mso-style-name:""; - mso-gram-e:yes;} -@page Section1 - {size:8.5in 11.0in; - margin:1.0in 1.25in 1.0in 1.25in; - mso-header-margin:.5in; - mso-footer-margin:.5in; - mso-paper-source:0;} -div.Section1 - {page:Section1;} - /* List Definitions */ - @list l0 - {mso-list-id:707607956; - mso-list-template-ids:1380595402;} -@list l0:level1 - {mso-level-number-format:bullet; - mso-level-text:ï‚·; - mso-level-tab-stop:.5in; - mso-level-number-position:left; - text-indent:-.25in; - mso-ansi-font-size:10.0pt; - font-family:Symbol;} -@list l1 - {mso-list-id:1984656118; - mso-list-template-ids:1095771388;} -@list l1:level1 - {mso-level-number-format:bullet; - mso-level-text:ï‚·; - mso-level-tab-stop:.5in; - mso-level-number-position:left; - text-indent:-.25in; - mso-ansi-font-size:10.0pt; - font-family:Symbol;} -ol - {margin-bottom:0in;} -ul - {margin-bottom:0in;} ---> -</style> -<!--[if gte mso 10]> -<style> - /* Style Definitions */ - table.MsoNormalTable - {mso-style-name:"Table Normal"; - mso-tstyle-rowband-size:0; - mso-tstyle-colband-size:0; - mso-style-noshow:yes; - mso-style-parent:""; - mso-padding-alt:0in 5.4pt 0in 5.4pt; - mso-para-margin:0in; - mso-para-margin-bottom:.0001pt; - mso-pagination:widow-orphan; - font-size:10.0pt; - font-family:"Times New Roman";} -</style> -<![endif]--><!--[if gte mso 9]><xml> - <o:shapedefaults v:ext="edit" spidmax="2050"/> -</xml><![endif]--><!--[if gte mso 9]><xml> - <o:shapelayout v:ext="edit"> - <o:idmap v:ext="edit" data="1"/> - </o:shapelayout></xml><![endif]--> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:Plugins</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> </head> -<body bgcolor=white lang=EN-US style='tab-interval:.5in'> - -<div class=Section1> - -<div> - -<h1><span style='color:black'>SLURM <span class=SpellE>Plugin</span> API<o:p></o:p></span></h1> - -<h2><span style='color:black'>Overview<o:p></o:p></span></h2> - -<p>A SLURM <span class=SpellE>plugin</span> is a dynamically linked code object -which is loaded explicitly at runtime by the SLURM libraries. A <span -class=SpellE>plugin</span> provides a customized implementation of a -well-defined API connected to tasks such as authentication, interconnect +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2><a name="top">SLURM Plugin API</a></h2> +<h3>Overview</h3> +<p>A SLURM plugin is a dynamically linked code object which is loaded explicitly +at run time by the SLURM libraries. A plugin provides a customized implementation +of a well-defined API connected to tasks such as authentication, interconnect fabric, and task scheduling.</p> - -<h2><span style='color:black'>Identification<o:p></o:p></span></h2> - -<p>A SLURM <span class=SpellE>plugin</span> identifies itself by a short -character string formatted similarly to a MIME type: <i><major>/<minor></i>. -The major type identifies which API the <span class=SpellE>plugin</span> -implements. The minor type uniquely distinguishes a <span class=SpellE>plugin</span> -from other <span class=SpellE>plugins</span> that implement that same API, by -such means as the intended platform or the internal algorithm. For -example, a <span class=SpellE>plugin</span> to interface to the <st1:place>Maui</st1:place> -scheduler would give its type as "<span class=SpellE>sched/maui</span>". -It would implement the SLURM Scheduler API.</p> - -<h2><span style='color:black'>Versioning<o:p></o:p></span></h2> - -<p style='margin-bottom:0in;margin-bottom:.0001pt'><span style='text-position: '>SLURM -<span class=SpellE>plugin</span> version numbers comprise a major and minor -revision number. As SLURM evolves, changes to the individual <span -class=SpellE>plugin</span> APIs may be necessary to implement new features. -The major number identifies the version of the applicable API that the <span -class=SpellE>plugin</span> implements. Incrementing the major version -number denotes that the API has changed significantly and possibly incompatibly -over prior versions.</span></p> - -<p style='margin-bottom:0in;margin-bottom:.0001pt'><o:p> </o:p></p> - -<p style='margin-bottom:0in;margin-bottom:.0001pt'><span style='text-position: '>Because -<span class=SpellE>plugins</span> are separate code objects and perhaps under -the control of third parties, version skew may occur in a SLURM installation. -SLURM may support multiple versions of each API in a backward-compatible -fashion to provide time for <span class=SpellE>plugin</span> authors to update -their <span class=SpellE>plugins</span>. Conversely the <span -class=SpellE>plugin</span> may support multiple versions of the API in order to -be transparently portable across different SLURM installations. The -version of the API spoken in an installation will be the highest-numbered -version which is common to both SLURM and the <span class=SpellE>plugin</span>. -Each SLURM release will document which API versions it supports. From -time to time ancient API versions will be deprecated.</span></p> - -<p style='margin-bottom:0in;margin-bottom:.0001pt'><o:p> </o:p></p> - -<p style='margin-bottom:0in;margin-bottom:.0001pt'><span style='text-position: '>The -minor version number is incremented at the discretion of the <span -class=SpellE>plugin</span> author and denotes revisions or upgrades particular -to that implementation. If two or more <span class=SpellE>plugins</span> -of the same type are provided in an installation, the <span class=SpellE>plugin</span> -with the highest minor revision will be selected.</span></p> - -<h2><span style='color:black'>Data objects<o:p></o:p></span></h2> - -<p>A <span class=SpellE>plugin</span> must define and export the following -symbols:<o:p></o:p></p> - -<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; -margin-left:.5in'><span class=GramE></span><span style='font-family:Courier; -color:black'><span style='text-position: '>const</span></span><span -style='font-family:Courier;color:black'> char <span class=SpellE>plugin_type</span>[]</span><span -style='font-family:"Nimbus Roman";color:black'> - a unique, short, formatted string -to identify the <span class=SpellE>plugin's</span> purpose as described above. -A "null" <span class=SpellE>plugin</span> (i.e., one which implements -the desired API as stubs) should have a minor type of "none".<o:p></o:p></span></p> - -<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; -margin-left:.5in'><span class=GramE></span><span style='font-family:Courier; -color:black'><span style='text-position: '>const</span></span><span -style='font-family:Courier;color:black'> char <span class=SpellE>plugin_name</span>[] -</span><span style='font-family:"Nimbus Roman";color:black'>- a free-form -string which identifies the <span class=SpellE>plugin</span> in human-readable -terms, such as "Kerberos authentication". SLURM will use this -string to identify the <span class=SpellE>plugin</span> to end users.<o:p></o:p></span></p> - -<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; -margin-left:.5in'><span class=GramE></span><span style='font-family:Courier; -color:black'><span style='text-position: '>const</span></span><span -style='font-family:Courier;color:black'> uint32_t <span class=SpellE>plugin_version</span></span><span -style='font-family:"Nimbus Roman";color:black'> - a 32-bit unsigned integer -giving the version of the <span class=SpellE>plugin</span> as described above. -The major revision number is multiplied by 1,000 and added to the minor -revision number to produce the integer value. Thus a <span class=SpellE>plugin</span> -with a major revision number of 2 and a minor revision number of 35 will have a -</span><span class=SpellE><span style='font-family:Courier;color:black'>plugin_version</span></span><span -style='font-family:"Nimbus Roman";color:black'> value of 2035.<o:p></o:p></span></p> - -<p>A <span class=SpellE>plugin</span> may optionally define and export the -following symbols:<o:p></o:p></p> - -<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; -margin-left:.5in'><span class=GramE></span><span style='font-family:Courier; -color:black'><span style='text-position: '>const</span></span><span -style='font-family:Courier;color:black'> uint32_t <span class=SpellE>plugin_legacy</span></span><span -style='font-family:"Nimbus Roman";color:black'> - a 32-bit unsigned integer -formatted the same as </span><span class=SpellE><span style='font-family:Courier; -color:black'>plugin_version</span></span><span style='font-family:"Nimbus Roman"; -color:black'> giving the lowest API version number with which this <span -class=SpellE>plugin</span> is compatible. If this symbol is omitted its -value is assumed to be equivalent to the </span><span class=SpellE><span -style='font-family:Courier;color:black'>plugin_version</span></span><span -style='font-family:"Nimbus Roman";color:black'> rounded to the next lowest -1,000. Only the major version number of this symbol is significant.<o:p></o:p></span></p> - -<h2><span style='color:black'>API functions<o:p></o:p></span></h2> - -<p><span class=SpellE><span class=GramE><span style='font-family:Courier'>int</span></span></span><span -style='font-family:Courier'> init (void);</span><o:p></o:p></p> - -<p style='margin-left:.5in'><span style='text-position: '><b>Description<br> -</b></span><span style='text-position: '>If present, this function is called -just after the <span class=SpellE>plugin</span> is loaded. This allows -the <span class=SpellE>plugin</span> to perform any global initialization prior -to any actual API calls.</span><o:p></o:p></p> - -<p style='margin-left:.5in'><span style='text-position: '><span class=GramE><b>Arguments<br> -</b></span><span style='text-position: '>None.</span></span><o:p></o:p></p> - -<p style='margin-left:.5in'><span style='text-position: '><span class=GramE><b>Returns<br> -</b></span><span style='text-position: '>SLURM_SUCCESS if the <span -class=SpellE>plugin's</span> initialization was successful.</span> Any -other return value indicates to SLURM that the <span class=SpellE>plugin</span> -should be unloaded and not used.</span></p> - -<p><span class=GramE><span style='font-family:Courier'>void</span></span><span -style='font-family:Courier'> <span class=SpellE>fini</span> (void);</span><o:p></o:p></p> - -<p style='margin-left:.5in'><span style='text-position: '><b>Description<br> -</b></span><span style='text-position: '>If present, this function is called -just before the <span class=SpellE>plugin</span> is unloaded. This allows -the <span class=SpellE>plugin</span> to do any finalization after the last <span -class=SpellE>plugin</span>-specific API call is made.</span><o:p></o:p></p> - -<p style='margin-left:.5in'><span style='text-position: '><span class=GramE><b>Arguments<br> -</b></span><span style='text-position: '>None.</span></span><o:p></o:p></p> - -<p style='margin-left:.5in'><span style='text-position: '><span class=GramE><b>Returns<br> -</b></span><span style='text-position: '>None.</span></span></p> - -<p>N.B. these functions are not the same as those described in the <span -class=SpellE><span class=GramE><span style='font-family:Courier'>dlopen</span></span></span><span -class=GramE><span style='font-family:Courier'>(</span></span><span -style='font-family:Courier'>3)</span> system library. The C runtime -system co-opts those symbols for its own initialization. The system <span -class=GramE><span style='font-family:Courier'>init(</span></span><span -style='font-family:Courier'>)</span> is called before the SLURM <span -class=SpellE>plugin</span> <span style='font-family:Courier'>init()</span>, and -the <span style='font-family:Courier'>SLURM <span class=SpellE>fini</span>()</span> -is called before the system's <span class=SpellE><span style='font-family:Courier'>fini</span></span><span -style='font-family:Courier'>()</span>.</p> - -<p>The functions need not appear. The <span class=SpellE>plugin</span> -may provide either <span class=GramE><span style='font-family:Courier'>init(</span></span><span -style='font-family:Courier'>)</span> or <span class=SpellE><span -style='font-family:Courier'>fini</span></span><span style='font-family:Courier'>()</span> -or both.</p> - -<h2><span style='color:black'>Thread safety<o:p></o:p></span></h2> - -<p>SLURM is a multithreaded application. The SLURM <span class=SpellE>plugin</span> -library may exercise the <span class=SpellE>plugin</span> functions in a re-entrant -fashion. It is the responsibility of the <span class=SpellE>plugin</span> -author to provide the necessarily mutual exclusion and synchronization in order -to avoid the pitfalls of re-entrant code.</p> - -<h2><span style='color:black'>Runtime support<o:p></o:p></span></h2> - -<p>The standard system libraries are available to the <span class=SpellE>plugin</span>. -The SLURM libraries are also available and <span class=SpellE>plugin</span> -authors are encouraged to make use of them rather than develop their own -substitutes. <span class=SpellE>Plugins</span> should use the SLURM log -to print error messages.</p> - -<p>The <span class=SpellE>plugin</span> author is responsible for specifying -any specific non-standard libraries needed for correct operation. <span -class=SpellE>Plugins</span> will not load if their dependent libraries are not -available, so it is the installer's job to make sure the specified libraries +<h3>Identification</h3> +<p>A SLURM plugin identifies itself by a short character string formatted similarly +to a MIME type: <i><major>/<minor></i>. The major type identifies +which API the plugin implements. The minor type uniquely distinguishes a plugin +from other plugins that implement that same API, by such means as the intended +platform or the internal algorithm. For example, a plugin to interface to the +Maui scheduler would give its type as "sched/maui." It would implement +the SLURM Scheduler API.</p> +<h3>Versioning</h3> +<p>SLURM plugin version numbers comprise a major and minor revision number. As +SLURM evolves, changes to the individual plugin APIs may be necessary to implement +new features. The major number identifies the version of the applicable API that +the plugin implements. Incrementing the major version number denotes that the +API has changed significantly and possibly incompatibly over prior versions.</p> +<p>Because plugins are separate code objects and perhaps under the control of +third parties, version skew may occur in a SLURM installation. SLURM may support +multiple versions of each API in a backward-compatible fashion to provide time +for plugin authors to update their plugins. Conversely, the plugin may support +multiple versions of the API in order to be transparently portable across different +SLURM installations. The version of the API spoken in an installation will be +the highest-numbered version which is common to both SLURM and the plugin. Each +SLURM release will document which API versions it supports. From time to time +ancient API versions will be deprecated.</p> +<p>The minor version number is incremented at the discretion of the plugin author +and denotes revisions or upgrades particular to that implementation. If two or +more plugins of the same type are provided in an installation, the plugin with +the highest minor revision will be selected.</p> +<p class="footer"><a href="#top">top</a></p> +<h3>Data Objects</h3> +<p>A plugin must define and export the following symbols:</p> +<ul> +<li><span class="commandline">char plugin_type[]<br> +</span> a unique, short, formatted string to identify the plugin's purpose as +described above. A "null" plugin (i.e., one that implements the desired +API as stubs) should have a minor type of "none."</li> +<li><span class="commandline">char plugin_name[]<br> +</span> a free-form string that identifies the plugin in human-readable terms, +such as "Kerberos authentication." SLURM will use this string to identify +the plugin to end users.</li> +<li><span class="commandline">const uint32_t plugin_version</span><br> +a 32-bit unsigned integer giving the version of the plugin as described above. +The major revision number is multiplied by 1,000 and added to the minor revision +number to produce the integer value. Thus, a plugin with a major revision number +of 2 and a minor revision number of 35 will have a <span class="commandline">plugin_version</span> +value of 2035.</li> +</ul> +<p>A plugin may optionally define and export the following symbols:</p> +<ul> +<li>const uint32_t plugin_legacy<br> +a 32-bit unsigned integer formatted the same as <span class="commandline">plugin_version</span> +giving the lowest API version number with which this plugin is compatible. If +this symbol is omitted, its value is assumed to be equivalent to the <span class="commandline">plugin_version</span> +rounded to the next lowest 1,000. Only the major version number of this symbol +is significant.</li> +</ul> +<p class="footer"><a href="#top">top</a></p> +<h3>API Functions</h3> +<p class="commandline">int init (void);</p> +<p style="margin-left:.2in"><b>Description</b>: If present, this function is called +just after the plugin is loaded. This allows the plugin to perform any global +initialization prior to any actual API calls.</p> +<p style="margin-left:.2in"><b>Arguments</b>: None.</p> +<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if the plugin's initialization +was successful. Any other return value indicates to SLURM that the plugin should +be unloaded and not used.</p> +<p class="commandline">void fini (void);</p> +<p style="margin-left:.2in"><b>Description</b>: If present, this function is called +just before the plugin is unloaded. This allows the plugin to do any finalization +after the last plugin-specific API call is made.</p> +<p style="margin-left:.2in"><b>Arguments</b>: None.</p> +<p style="margin-left:.2in"><b>Returns</b>: None.</p> +<p><b>Note</b>: These functions are not the same as those described in the <span class="commandline">dlopen +(3)</span> system library. The C run-time system co-opts those symbols for its +own initialization. The system <span class="commandline">init()</span> is called +before the SLURM <span class="commandline">plugininit()</span>, and the SLURM +<span class="commandline">fini()</span> is called before the system's <span class="commandline">fini()</span>.</p> +<p>The functions need not appear. The plugin may provide either <span class="commandline">init()</span> +or <span class="commandline">fini()</span> or both.</p> +<p class="footer"><a href="#top">top</a></p> +<h3>Thread Safety</h3> +<p>SLURM is a multithreaded application. The SLURM plugin library may exercise +the plugin functions in a re-entrant fashion. It is the responsibility of the +plugin author to provide the necessarily mutual exclusion and synchronization +in order to avoid the pitfalls of re-entrant code.</p> +<h3>Run-time Support</h3> +<p>The standard system libraries are available to the plugin. The SLURM libraries +are also available and plugin authors are encouraged to make use of them rather +than develop their own substitutes. Plugins should use the SLURM log to print +error messages.</p> +<p>The plugin author is responsible for specifying any specific non-standard libraries +needed for correct operation. Plugins will not load if their dependent libraries +are not available, so it is the installer's job to make sure the specified libraries are available.</p> - -</div> - -</div> -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/plugins.html -<p>UCRL-WEB-201790 -<p>Last Modified January 6, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> +<p class="footer"><a href="#top">top</a></p></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> </body> - </html> diff --git a/doc/html/programmer.guide.html b/doc/html/programmer.guide.html deleted file mode 100644 index 40bf80e42f2..00000000000 --- a/doc/html/programmer.guide.html +++ /dev/null @@ -1,187 +0,0 @@ -<html> -<head> -<title>SLURM Programmer's Guide</title> -</head> -<body> -<h1>SLURM Programmer's Guide</h1> - -<h2>Overview</h2> - -Simple Linux Utility for Resource Management (SLURM) is an open source, -fault-tolerant, and highly scalable cluster management and job -scheduling system for Linux clusters large and small. -Components include machine status, partition -management, job management, scheduling and stream copy modules. -SLURM requires no kernel modifications for it operation and is -relatively self-contained. -<p> -There is an overview the components and their interactions available -in a separate document, -<a href="slurm_design.pdf"> SLURM: Simple Linux Utility for Resource Management</a>. -<p> -SLURM is written in the C language and uses a GNU <i>autoconf</i> -configuration engine. -While initially written for Linux, other UNIX-like operating systems -should be easy porting targets. -Code should adhere to the -<a href="http://libros.es.gnome.org/guias/programming-guidelines/CodingStyle.html"> -Linux kernel coding style</a>. -<p> -Many of these modules have been built and tested on a variety of -Unix computers including Red Hat Linux, IBM's AIX, Sun's Solaris, -and Compaq's Tru-64. The only module at this time which is operating -system dependent is <i>src/slurmd/read_proc.c</i>. -We will be porting and testing on additional platforms in future releases. - -<h2>Plugins</h2> - -In order to make the use of different infrastructures possible, -SLURM uses a general purpose plugin mechanism. -A SLURM plugin is a dynamically linked code object which is -loaded explicitly at run time by the SLURM libraries. -It provides a customized implementation of a well-defined -API connected to tasks such as authentication, interconnect fabric, -task scheduling, etc. -A set of functions is defined for use by all of the different -infrastructures of a particular variety. -When a SLURM daemon is initiated, it reads the configuration -file to determine which of the available plugins should be used. -A <a href="plugins.html">plugin developer's guide</a> and an -<a href="authplugins.html">authentication plugin developer's guide</a> -are available with details. - -<h2>Directory Structure</h2> - -The contents of the SLURM directory structure will be described below in -increasing detail as the structure is descended. The top level directory -contains the scripts and tools required to build the entire SLURM system. -It also contains a variety of subdirectories for each type of file. -<p> -General build tools/files include: <i>acinclude.m4</i>, <i>autogen.sh</i>, -<i>configure.ac</i>, <i>Makefile.am</i>, <i>Make-rpm.mk</i>, <i>META</i>, -<i>README</i>, <i>slurm.spec.in</i>, and the contents of the <i>auxdir</i> -directory. -<i>autoconf</i> and <i>make</i> commands are used to build and install -SLURM in an automated fashion. NOTE: <i>autoconf</i> version 2.52 -or higher is required to build SLURM. Execute "autoconf -V" to check -your version number. The build process is described in the <i>README</i> -file. -<p> -Copyright and disclaimer information are in the files <i>COPYING</i> and <i>DISCLAIMER</i>. - -All of the top-level subdirectories are described below. -<dl> - -<dt>auxdir -<dd>Used for building SLURM. - -<dt>doc -<dd>Documentation including man pages. - -<dt>etc -<dd>Sample configuration files. - -<dt>slurm -<dd>Header files for API use. These files must be installed. -Placing these header files in this location makes for better code portability. - -<dt>src -<dd>Contains all source code and header files not in the "slurm" subdirectory -described above. - -<dt>testsuite -<dd>DejaGnu is used as a testing framework and all of its files are here. - -</dl> - -<h2>Documentation</h2> - -All of the documentation is in the subdirectory <i>doc</i>. -Man pages for the APIs, configuration file, commands, and daemons -are in <i>doc/man</i>. -Various documents suitable for public consumption are in <i>doc/html</i>. -Overall SLURM design documents including various figures are in <i>doc/pubdesign</i>. -Various design documents (many of which are dated) can be found in -<i>doc/slides</i> and <i>doc/txt</i>. -A survey of available resource managers as of 2001 is in -<i>doc/survey</i>. - -<h2>Source Code</h2> - -Functions are divided into several categories, each in its own -subdirectory. The details of each directory's contents are proved -below. The directories are as follows: - -<dl> -<dt>api -<dd>Application Program Interfaces into the SLURM code. -Used to send and get SLURM information from the central manager. -These are the functions user applications might utilize. - -<dt>common -<dd>General purpose functions for widespread use throughout SLURM. - -<dt>plugins -<dd>Plugin functions for various infrastructure. -A separate subdirectory is used for each plugin class: -<i>auth</i> for user authentication, -<i>jobcomp</i> for job completion logging, -<i>sched</i> for job scheduler, -<i>switch</i> for switch (interconnect) specific functions, -etc. - -<dt>scancel -<dd>User command to cancel (or signal) a job or job step. - -<dt>scontrol -<dd>Administrator tool to manage SLURM. - -<dt>sinfo -<dd>User command to get information on SLURM nodes and partitions. - -<dt>slurmctld -<dd>SLURM central manager daemon code. - -<dt>slurmd -<dd>SLURM daemon code to manage the compute server nodes including the -execution of user applications. - -<dt>squeue -<dd>User command to get information on SLURM jobs and job steps. - -<dt>srun -<dd>User command to submit a job, get an allocation, and/or initiation -a parallel job step. - -</dl> - -<h2>Configuration</h2> - -Configuration files are included in the <i>etc</i> subdirectory. -<i>slurm.conf.example</i> includes a description of all configuration -options and default settings. See <i>doc/man/man5/slurm.conf.5</i> for -more details. -<i>init.d.slurm</i> is a script that determines which SLURM daemon(s) -should execute on any node based upon the configuration file contents. -It will also manage these daemons: starting, signalling, restarting, -and stopping them. - -<h2>Test Suite</h2> - -The <i>testsuite</i> files use a DejaGnu framework for testing. -These tests are very limited in scope. - -We also have a set of Expect SLURM tests available as a separate -distribution. These tests are executed after SLURM has been installed -and the daemons initiated. About 100 test scripts exercise all SLURM -commands and options including stress tests. - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/programmer.guide.html -<p>UCRL-WEB-201790 -<p>Last Modified January 8, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> -</body> -</html> diff --git a/doc/html/programmer_guide.html b/doc/html/programmer_guide.html new file mode 100644 index 00000000000..dc675d3c8f3 --- /dev/null +++ b/doc/html/programmer_guide.html @@ -0,0 +1,170 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:Programmers Guide</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> +</head> + +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2><a name="top">SLURM Programmer's Guide</a></h2> +<h3>Overview</h3> +Simple Linux Utility for Resource Management (SLURM) is an open source, fault-tolerant, +and highly scalable cluster management and job scheduling system for large and +small Linux clusters. Components include machine status, partition management, +job management, scheduling, and stream copy modules. SLURM requires no kernel +modifications for it operation and is relatively self-contained. +<p>There is an overview of the components and their interactions available in +a separate document, <a href="slurm_design.pdf"> SLURM: Simple Linux Utility for +Resource Management</a> [PDF]. +<p>SLURM is written in the C language and uses a GNU <b>autoconf</b> configuration +engine. While initially written for Linux, other UNIX-like operating systems should +be easy porting targets. Code should adhere to the <a href="coding_style.pdf"> +Linux kernel coding style</a>. +<p>Many of these modules have been built and tested on a variety of Unix computers +including Red Hat Linux, IBM's AIX, Sun's Solaris, and Compaq's Tru-64. The only +module at this time that is operating system dependent is <span class="commandline">src/slurmd/read_proc.c</span>. +We will be porting and testing on additional platforms in future releases. +<h3>Plugins</h3> +<p>To make the use of different infrastructures possible, SLURM uses a general +purpose plugin mechanism. A SLURM plugin is a dynamically linked code object that +is loaded explicitly at run time by the SLURM libraries. It provides a customized +implementation of a well-defined API connected to tasks such as authentication, +interconnect fabric, task scheduling, etc. A set of functions is defined for use +by all of the different infrastructures of a particular variety. When a SLURM +daemon is initiated, it reads the configuration file to determine which of the +available plugins should be used. A <a href="plugins.html">plugin developer's +guide</a> and an <a href="authplugins.html">authentication plugin developer's +guide</a> are available with details.</p> +<p class="footer"><a href="#top">top</a></p> +<h3>Directory Structure</h3> +<p>The contents of the SLURM directory structure will be described below in increasing +detail as the structure is descended. The top level directory contains the scripts +and tools required to build the entire SLURM system. It also contains a variety +of subdirectories for each type of file.</p> +<p>General build tools/files include: <b>acinclude.m4</b>, <b>autogen.sh</b>, +<b>configure.ac</b>, <b>Makefile.am</b>, <b>Make-rpm.mk</b>, <b>META</b>, <b>README</b>, +<b>slurm.spec.in</b>, and the contents of the <b>auxdir</b> directory. <span class="commandline">autoconf</span> +and <span class="commandline">make</span> commands are used to build and install +SLURM in an automated fashion. NOTE: <span class="commandline">autoconf</span> +version 2.52 or higher is required to build SLURM. Execute <span class="commandline">autoconf +-V</span> to check your version number. The build process is described in the +README file. +<p>Copyright and disclaimer information are in the files COPYING and DISCLAIMER. +All of the top-level subdirectories are described below.</p> +<p style="margin-left:.2in"><b>auxdir</b>—Used for building SLURM.<br> +<b>doc</b>—Documentation including man pages. <br> +<b>etc</b>—Sample configuration files.<br> +<b>slurm</b>—Header files for API use. These files must be installed. Placing +these header files in this location makes for better code portability.<br> +<b>src</b>—Contains all source code and header files not in the "slurm" subdirectory +described above.<br> +<b>testsuite</b>—DejaGnu is used as a testing framework and all of its files +are here.</p> +<p class="footer"><a href="#top">top</a></p> +<h3>Documentation</h3> +All of the documentation is in the subdirectory <b>doc</b>. Man pages for the +APIs, configuration file, commands, and daemons are in <b>doc/man</b>. Various +documents suitable for public consumption are in <b>doc/html</b>. Overall SLURM +design documents including various figures are in <b>doc/pubdesign</b>. Various +design documents (many of which are dated) can be found in <b>doc/slides</b> and +<b>doc/txt</b>. A survey of available resource managers as of 2001 is in <b>doc/survey</b>. +<h3>Source Code</h3> +<p>Functions are divided into several categories, each in its own subdirectory. +The details of each directory's contents are proved below. The directories are +as follows: </p> +<p style="margin-left:.2in"><b>api</b>—Application Program Interfaces into +the SLURM code. Used to send and get SLURM information from the central manager. +These are the functions user applications might utilize.<br> +<b>common</b>—General purpose functions for widespread use throughout SLURM.<br> +<b>plugins</b>—Plugin functions for various infrastructure. A separate subdirectory +is used for each plugin class: <span class="commandline">auth</span> for user +authentication, <span class="commandline">jobcomp</span> for job completion logging, +<span class="commandline">sched</span> for job scheduler, <span class="commandline">switch</span> +for switch (interconnect) specific functions, etc.<br> +<b>scancel</b>—User command to cancel (or signal) a job or job step.<br> +<b>scontrol</b>—Administrator tool to manage SLURM.<br> +<b>sinfo</b>—User command to get information on SLURM nodes and partitions.<br> +<b>slurmctld</b>—SLURM central manager daemon code.<br> +<b>slurmd</b>—SLURM daemon code to manage the compute server nodes including +the execution of user applications.<br> +<b>squeue</b>—User command to get information on SLURM jobs and job steps.<br> +<b>srun</b>—User command to submit a job, get an allocation, and/or initiation +a parallel job step.</p> +<p class="footer"><a href="#top">top</a></p> +<h3>Configuration</h3> +Configuration files are included in the <b>etc</b> subdirectory. <b>slurm.conf.example</b> +includes a description of all configuration options and default settings. See +<b>doc/man/man5/slurm.conf.5</b> for more details.<span class="commandline"> </span><b>init.d.slurm</b> +is a script that determines which SLURM daemon(s) should execute on any node based +upon the configuration file contents. It will also manage these daemons: starting, +signalling, restarting, and stopping them. +<h3>Test Suite</h3> +<p>The <b>testsuite</b> files use a DejaGnu framework for testing. These tests +are very limited in scope. We also have a set of Expect SLURM tests available +as a separate distribution. These tests are executed after SLURM has been installed +and the daemons initiated. About 100 test scripts exercise all SLURM commands +and options including stress tests.</p> +<p class="footer"><a href="#top">top</a></p></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> +</body> +</html> diff --git a/doc/html/publications.html b/doc/html/publications.html index 525431bd055..c66f7d5bd0e 100644 --- a/doc/html/publications.html +++ b/doc/html/publications.html @@ -1,22 +1,75 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + <html> + <head> -<title>SLURM: Publications</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:Publications</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> </head> -<body> -<h1>SLURM: Publications</h1> - -<ul> -<li>ClusterWorld Conference and Expo 2003: -<a href="slurm_design.pdf">SLURM: Simple Linux Utility For Resource Management</a></li> -</ul> - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/publications.html -<p>UCRL-WEB-201790 -<p>Last Modified January 6, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2>Publications</h2> +<p><a href="slurm_design.pdf">SLURM: Simple Linux Utility for Resource Management</a> +[PDF] submitted to the ClusterWorld Conference and Expo held in San Jose, California, +June 23-26, 2003 (UCRL-MA-147996, Rev. 3, June 2003).</p></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> </body> </html> diff --git a/doc/html/quickstart.admin.html b/doc/html/quickstart.admin.html deleted file mode 100644 index 846a4973217..00000000000 --- a/doc/html/quickstart.admin.html +++ /dev/null @@ -1,360 +0,0 @@ -<html> -<head> -<title>SLURM Quick Start Administrator Guide</title> -</head> -<body> -<h1>SLURM Quick Start Administrator Guide</h1> - -<h2>Overview</h2> - -Please see the <a href="quickstart.html">Quick Start User Guide</a> -for a general overview. - -<h2>Daemons</h2> - -<b>slurmctld</b> is sometimes called the <i>controller</i> daemon. -It orchestrates SLURM activities including: queuing of job, -monitoring node state, and allocating resources (nodes) to jobs. -There is an optional backup controller that automatically assumes -control in the event the primary controller fails. -The primary controller resumes control whenever -it is restored to service. The controller saves its state to disk -whenever there is a change. This state can be recovered by the controller -at startup time. <b>slurmctld</b> would typically execute as a -special user specifically for this purpose (not user root). -State changes are saved so that jobs and other state can be -preserved when slurmctld moves or is restarted. -<p> -The <b>slurmd</b> daemon executes on every compute node. -It resembles a remote shell daemon to export control to SLURM. -Since slurmd initiates and manages user jobs, it must execute as -the user root. -<p> -<b>slurmctld</b> and/or <b>slurmd</b> should be initiated at node startup time -per the SLURM configuration. - -<h2>Infrastructure</h2> -<p> -All communications between SLURM components are authenticated. -The authentication infrastructure used is specified in the SLURM -configuration file and options include: -<a href="http://www.theether.org/authd/">authd</a>, munged and none. -<p> -Quadrics MPI works directly with SLURM on systems having Quadrics -interconnects. For non-Quadrics interconnect systems, -<a href="http://www.lam-mpi.org/">LAM/MPI</a> is the preferred -MPI infrastructure. LAM/MPI uses the command <i>lamboot</i> to -initiate job-specific daemons on each node using SLURM's -<i>srun</i> command. This places all MPI processes in a -process-tree under the control of the <b>slurmd</b> daemon. -LAM/MPI version 7.0.4 or higher contains support for SLURM. -<p> -SLURM's default scheduler is FIFO (First-In First-Out). -A backfill scheduler plugin is also available. -Backfill scheduling will initiate a lower-priority job -if doing so does not delay the expected initiation time -of higher priority jobs; essentially using smaller jobs -to fill holes in the resource allocation plan. -<a href="http://supercluster.org/maui">The Maui Scheduler</a> -offers sophisticated scheduling algorithms to control -SLURM's workload. -Motivated users can even develop their own scheduler plugin -if so desired. -<p> -SLURM uses the syslog function to record events. It uses a -range of importance levels for these messages. Be certain -that your system's syslog functionality is operational. -<p> -There is no necessity for synchronized clocks on the nodes. -Events occur either in real-time or based upon message traffic. -However, synchronized clocks will permit easier analysis of -SLURM logs from multiple nodes. - - -<h2>Building and Installing</h2> - -Basic instructions to build and install SLURM are shown below. -See the <i>INSTALL</i> file for more details. - -<ol> -<li>cd to the directory containing the SLURM source and type -<i>./configure</i> with appropriate options. -<li>Type <i>make</i> to compile SLURM -<li> Type <i>make install</i> to install the programs, documentation, -libaries, header files, etc. -</ol> - -The most commonly used arguments to the <i>configure</i> command include: -<dl> -<dt>--enable-debug -<dd>Enable debugging of individual modules -<dt>--prefix=<i>PREFIX</i> -<dd>Install architecture-independent files in PREFIX, default -value is <i>/usr/local</i> -<dt>--sysconfdir=<i>DIR</i> -<dd>Specify location of SLURM configuration file -<dt>--with-totalview -<dd>compile with support for the TotalView debugger (see -<a href="http://www.etnus.com/">http://www.etnus.com</a>) -</dl> - - -<h2>Configuration</h2> - -The SLURM configuration file includes a wide variety of -parameters. A full description of the parameters is included in the -<i>slurm.conf</i> man page. Rather than duplicate that information, -a sample configuration file is shown below. Any text following a -"#" is considered a comment. The keywords in the file are not case -sensitive, although the argument typically is (e.g. "SlurmUser=slurm" -might be specified as "slurmuser=slurm"). The control machine, like -all other machine specifications can include both the host name and -the name used for communications. In this case, the host's name is -"mcri" and the name "emcri" is used for communications. The "e" prefix -identifies this as an ethernet address at this site. Port numbers to be -used for communications are specified as well as various timer values. -<p> -A description of the nodes and their grouping into non-overlapping -partitions is required. -Partition and node specifications use node range expressions to identify -nodes in a concise fashion. This configuration file defines a 1154 node -cluster for SLURM, but might be used for a much larger cluster by just -changing a few node range expressions. -Specify the minimum processor count (<i>Procs</i>), real memory space -(<i>RealMemory</i>, megabytes), and temporary disk space (<i>TmpDisk</i>, -megabytes) that a node should have to be considered available for use. -Any node lacking these minimum configuration values will be considered -<i>DOWN</i> and not scheduled. - -<pre> -# -# Sample /etc/slurm.conf for mcr.llnl.gov -# -ControlMachine=mcri ControlAddr=emcri -# -AuthType=auth/authd -Epilog=/usr/local/slurm/etc/epilog -FastSchedule=1 -JobCompLoc=/var/tmp/jette/slurm.job.log -JobCompType=jobcomp/filetxt -JobCredPrivateKey=/usr/local/etc/slurm.key -JobCredPublicKey=/usr/local/etc/slurm.cert -PluginDir=/usr/local/slurm/lib/slurm -Prolog=/usr/local/slurm/etc/prolog -SchedulerType=sched/backfill -SlurmUser=slurm -SlurmctldPort=7002 -SlurmctldTimeout=300 -SlurmdPort=7003 -SlurmdSpoolDir=/var/tmp/slurmd.spool -SlurmdTimeout=300 -StateSaveLocation=/tmp/slurm.state -SwitchType=switch/elan -# -# Node Configurations -# -NodeName=DEFAULT Procs=2 RealMemory=2000 TmpDisk=64000 State=UNKNOWN -NodeName=mcr[0-1151] NodeAddr=emcr[0-1151] -# -# Partition Configurations -# -PartitionName=DEFAULT State=UP -PartitionName=pdebug Nodes=mcr[0-191] MaxTime=30 MaxNodes=32 Default=YES -PartitionName=pbatch Nodes=mcr[192-1151] -</pre> - -<p> -You will should create unique job credential keys for your site using -the program <a href="http://www.openssl.org">openssl</a>. -An example of how to do this is shown below. -Specify file names that match the values of JobCredentialPrivateKey and -JobCredentialPublicCertificate in your configuration file. -The JobCredentialPrivateKey file must be readable only by SlurmUser. -The JobCredentialPublicCertificate file must be readable by all users. -<pre> -openssl genrsa -out /usr/local/etc/slurm.key 1024 -openssl rsa -in /usr/local/etc/slurm.key -pubout -out /usr/local/etc/slurm.cert -</pre> - -<p> -SLURM does not use reserved ports to authenticate communication -between components. You will need to have at least one "auth" -plugin. Currently, only three authentication plugins are supported: -<i>auth/none</i>, <i>auth/authd</i>, and <i>auth/munge</i>. -The <i>auth/none</i> plugin is built and used by default, but either -Brent Chun's <a href="http://www.theether.org/authd/">authd</a>, or Chris -Dunlap's Munge should be installed in order to get properly authenticated -communications. The configure script in the top-level directory of this -distribution will determine which authentication plugins may be built. -The configuration file specifies which of the available plugins will -be utilized. -<p> -A Portable Authentication Manager (PAM) module is available for SLURM -that can prevent a user from accessing a node which he has not been -allocated, if that mode of operation is desired. - -<h2>Starting the Daemons</h2> - -For testing purposes you may want to start by just running -slurmctld and slurmd on one node. By default, they execute -in the background. Use the "-D" option for each daemon to -execute them in the foreground and logging will be done to -your terminal. The "-v" option will log events in more detail -with more v's increasing the level of detail (e.g. "-vvvvvv"). -You can use one window to execute "slurmctld -D -vvvvvv", -a second window to execute "slurmd -D -vvvvv", and a third -window to execute commands such as "srun -N1 /bin/hostname" -to confirm basic functionality. -<p> -Another important option for the daemons is "-c" to clear -previous state information. -Without the "-c" option, the daemons will restore any previously -saved state information: node state, job state, etc. -With the "-c" option all previously running jobs will be purged -and node state will be restored to the values specified in -the configuration file. -This means that a node configured down manually using the <i>scontrol</i> -command will be returned to service unless also noted as being down -in the configuration file. -In practice, SLURM restarts with preservation consistently. -<p> -A thorough battery of <a href="tests.html">tests</a> written in -the "expect" language is also available. - -<h2>Administration Examples</h2> - -<i>scontrol</i> can be used to print all system information and -modify most of it. Only a few examples are shown below. -Please see the scontrol man page for full details. -The commands and options are all case insensitive. -<p> -Print detailed state of all jobs in the system. -<pre> -adev0: scontrol -scontrol: show job -JobId=475 UserId=bob(6885) Name=sleep JobState=COMPLETED - Priority=4294901286 Partition=batch BatchFlag=0 - AllocNode:Sid=adevi:21432 TimeLimit=UNLIMITED - StartTime=03/19-12:53:41 EndTime=03/19-12:53:59 - NodeList=adev8 NodeListIndecies=-1 - ReqProcs=0 MinNodes=0 Shared=0 Contiguous=0 - MinProcs=0 MinMemory=0 Features=(null) MinTmpDisk=0 - ReqNodeList=(null) ReqNodeListIndecies=-1 - -JobId=476 UserId=bob(6885) Name=sleep JobState=RUNNING - Priority=4294901285 Partition=batch BatchFlag=0 - AllocNode:Sid=adevi:21432 TimeLimit=UNLIMITED - StartTime=03/19-12:54:01 EndTime=NONE - NodeList=adev8 NodeListIndecies=8,8,-1 - ReqProcs=0 MinNodes=0 Shared=0 Contiguous=0 - MinProcs=0 MinMemory=0 Features=(null) MinTmpDisk=0 - ReqNodeList=(null) ReqNodeListIndecies=-1 -</pre> -<p> -Print the detailed state of job 477 and change its priority to zero. -A priority of zero prevents a job from being initiated (it is held -in <i>pending</i> state). -<pre> -adev0: scontrol -scontrol: show job 477 -JobId=477 UserId=bob(6885) Name=sleep JobState=PENDING - Priority=4294901286 Partition=batch BatchFlag=0 - <i>more data removed....</i> -scontrol: update JobId=477 Priority=0 -</pre> -<p> -Print the state of node <i>adev13</i> and drain it. -To drain a node specify a new state of "DRAIN", "DRAINED", or "DRAINING". -SLURM will automatically set it to the appropriate value of either "DRAINING" -or "DRAINED" depending if the node is allocated or not. -Return it to service later. -<pre> -adev0: scontrol -scontrol: show node adev13 -NodeName=adev13 State=ALLOCATED CPUs=2 RealMemory=3448 TmpDisk=32000 - Weight=16 Partition=debug Features=(null) -scontrol: update NodeName=adev13 State=DRAIN -scontrol: show node adev13 -NodeName=adev13 State=DRAINING CPUs=2 RealMemory=3448 TmpDisk=32000 - Weight=16 Partition=debug Features=(null) -scontrol: quit -<i>Later</i> -adev0: scontrol -scontrol: show node adev13 -NodeName=adev13 State=DRAINED CPUs=2 RealMemory=3448 TmpDisk=32000 - Weight=16 Partition=debug Features=(null) -scontrol: update NodeName=adev13 State=IDLE -</pre> -<p> -Reconfigure all slurm daemons on all nodes. -This should be done after changing the SLURM configuration file. -<pre> -adev0: scontrol reconfig -</pre> -<p> -Print the current slurm configuration. -This also reports if the primary and secondary controllers (slurmctld -daemons) are responding. -To just see the state of the controllers, use the command "ping". -<pre> -adev0: scontrol show config -Configuration data as of 03/19-13:04:12 -AuthType = auth/munge -BackupAddr = eadevj -BackupController = adevj -ControlAddr = eadevi -ControlMachine = adevi -Epilog = (null) -FastSchedule = 1 -FirstJobId = 1 -NodeHashBase = 10 -HeartbeatInterval = 60 -InactiveLimit = 0 -JobCompLoc = /var/tmp/jette/slurm.job.log -JobCompType = jobcomp/filetxt -JobCredPrivateKey = /etc/slurm/slurm.key -JobCredPublicKey = /etc/slurm/slurm.cert -KillWait = 30 -MaxJobCnt = 2000 -MinJobAge = 300 -PluginDir = /usr/lib/slurm -Prolog = (null) -ReturnToService = 1 -SchedulerAuth = (null) -SchedulerPort = 65534 -SchedulerType = sched/backfill -SlurmUser = slurm(97) -SlurmctldDebug = 4 -SlurmctldLogFile = /tmp/slurmctld.log -SlurmctldPidFile = /tmp/slurmctld.pid -SlurmctldPort = 7002 -SlurmctldTimeout = 300 -SlurmdDebug = 65534 -SlurmdLogFile = /tmp/slurmd.log -SlurmdPidFile = /tmp/slurmd.pid -SlurmdPort = 7003 -SlurmdSpoolDir = /tmp/slurmd -SlurmdTimeout = 300 -SLURM_CONFIG_FILE = /etc/slurm/slurm.conf -StateSaveLocation = /usr/local/tmp/slurm/adev -SwitchType = switch/elan -TmpFS = /tmp -WaitTime = 0 - -Slurmctld(primary/backup) at adevi/adevj are UP/UP -</pre> -<p> -Shutdown all SLURM daemons on all nodes. -<pre> -adev0: scontrol shutdown -</pre> - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/quickstart.admin.html -<p>UCRL-WEB-201790 -<p>Last Modified January 26, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> -</body> -</html> diff --git a/doc/html/quickstart.html b/doc/html/quickstart.html index 4f5a870dc90..a3bf630c3a5 100644 --- a/doc/html/quickstart.html +++ b/doc/html/quickstart.html @@ -1,129 +1,146 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + <html> + <head> -<title>SLURM Quick Start User Guide</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:Quick Start User Guide</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> </head> -<body> -<h1>SLURM Quick Start User Guide</h1> - -<h2>Overview</h2> - -The Simple Linux Utility for Resource Management (SLURM) is an open -source, fault-tolerant, and highly scalable cluster management and job -scheduling system for Linux clusters large and small. SLURM requires -no kernel modifications for it operation and is relatively self-contained. - -As a cluster resource manager, SLURM has three key functions. First, -it allocates exclusive and/or non-exclusive access to resources (compute -nodes) to users for some duration of time so they can perform work. -Second, it provides a framework for starting, executing, and monitoring -work (normally a parallel job) on the set of allocated nodes. Finally, -it arbitrates conflicting requests for resources by managing a queue of -pending work. - -<h2>Architecture</h2> - -As depicted in Figure 1, SLURM consists of a <b>slurmd</b> daemon -running on each compute node, a central <b>slurmctld</b> daemon running on -a management node (with optional fail-over twin), and five command line -utilities: <b>srun</b>, <b>scancel</b>, <b>sinfo</b>, <b>squeue</b>, and -<b>scontrol</b>, which can run anywhere in the cluster. -<p align=center> -<img src="arch.png"> -<p align=center> -Figure 1: SLURM components -</p> -<p> -The entities managed by these SLURM daemons are shown in Figure 2 -and include -<b>nodes</b>, the compute resource in SLURM, -<b>partitions</b>, which group nodes into logical disjoint sets, -<b>jobs</b>, or allocations of resources assigned to a user for a -specified amount of time, and -<b>job steps</b>, which are sets of (possibly parallel) tasks within a job. -Priority-ordered jobs are allocated nodes within a partition until the -resources (nodes) within that partition are exhausted. -Once a job is assigned a set of nodes, the user is able to initiate -parallel work in the form of job steps in any configuration within the -allocation. For instance a single job step may be started which utilizes -all nodes allocated to the job, or several job steps may independently -use a portion of the allocation. -<p align=center> -<img src="entities.png"> -<p align=center> -Figure 2: SLURM entities -</p> -<h2>Commands</h2> - -Man pages exist for all SLURM daemons, commands, and API functions. -The command option "--help" also provides a brief summary of options. -Note that the command options are all case insensitive. -<p> -<b>srun</b> is used to submit a job for execution, allocate resources, -attach to an existing allocation, or initiate job steps. -Jobs can be submitted for immediate or later execution (e.g. batch). -srun has a wide variety of options to specify resource requirements -including: minimum and maximum node count, processor count, specific -nodes to use or not use, and specific node characteristics (so much -memory, disk space, certain required features, etc). -Besides securing a resource allocation, srun is used to initiate -job steps. -These job steps can execute sequentially or in parallel on independent -or shared nodes within the job's node allocation. -<p> -<b>scancel</b> is used to cancel a pending or running job or job step. -It can also be used to send an arbitrary signal to all processes -associated with a running job or job step. -<p> -<b>scontrol</b> is the administrative tool used to view and/or modify -SLURM state. -Note that many scontrol commands can only be executed as user root. -<p> -<b>sinfo</b> reports the state of partitions and nodes managed by SLURM. -It has a wide variety of filtering, sorting, and formatting options. -<p> -<b>squeue</b> reports the state of jobs or job steps. -It has a wide variety of filtering, sorting, and formatting options. -By default, it reports the running jobs in priority order and then the -pending jobs in priority order. - -<h2>Examples</h2> - -Execute <i>/bin/hostname</i> on four nodes (<i>-N4</i>). -Include task numbers on the output (<i>-l</i>). -The default partition will be used. -One task per node will be used by default. +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2>Quick Start User Guide</h2> +<h3>Overview</h3> +<p>The Simple Linux Utility for Resource Management (SLURM) is an open source, +fault-tolerant, and highly scalable cluster management and job scheduling system +for large and small Linux clusters. SLURM requires no kernel modifications for +its operation and is relatively self-contained. As a cluster resource manager, +SLURM has three key functions. First, it allocates exclusive and/or non-exclusive +access to resources (compute nodes) to users for some duration of time so they +can perform work. Second, it provides a framework for starting, executing, and +monitoring work (normally a parallel job) on the set of allocated nodes. Finally, +it arbitrates conflicting requests for resources by managing a queue of pending +work.</p> +<h3>Architecture</h3> +<p>As depicted in Figure 1, SLURM consists of a <b>slurmd</b> daemon running on +each compute node, a central <b>slurmctld</b> daemon running on a management node +(with optional fail-over twin), and five command line utilities: <b>srun</b>, +<b>scancel</b>, <b>sinfo</b>, <b>squeue</b>, and <b>scontrol</b>, which can run +anywhere in the cluster.</p> +<p><img src="arch.gif" width="552" height="432"> +<p><b>Figure 1. SLURM components</b></p> +<p>The entities managed by these SLURM daemons, shown in Figure 2, include <b>nodes</b>, +the compute resource in SLURM, <b>partitions</b>, which group nodes into logical +disjoint sets, <b>jobs</b>, or allocations of resources assigned to a user for +a specified amount of time, and <b>job steps</b>, which are sets of (possibly +parallel) tasks within a job. Priority-ordered jobs are allocated nodes within +a partition until the resources (nodes) within that partition are exhausted. Once +a job is assigned a set of nodes, the user is able to initiate parallel work in +the form of job steps in any configuration within the allocation. For instance, +a single job step may be started that utilizes all nodes allocated to the job, +or several job steps may independently use a portion of the allocation.</p> +<p><img src="entities.gif" width="291" height="218"> +<p><b>Figure 2. SLURM entities</b></p> +<p class="footer"><a href="#top">top</a></p> +<h3>Commands</h3> +<p>Man pages exist for all SLURM daemons, commands, and API functions. The command +option <span class="commandline">--help</span> also provides a brief summary of +options. Note that the command options are all case insensitive.</p> +<p><span class="commandline"><b>srun</b></span> is used to submit a job for execution, +allocate resources, attach to an existing allocation, or initiate job steps. Jobs +can be submitted for immediate or later execution (e.g., batch). <span class="commandline">srun</span> +has a wide variety of options to specify resource requirements, including: minimum +and maximum node count, processor count, specific nodes to use or not use, and +specific node characteristics (so much memory, disk space, certain required features, +etc.). Besides securing a resource allocation, <span class="commandline">srun</span> +is used to initiate job steps. These job steps can execute sequentially or in +parallel on independent or shared nodes within the job's node allocation.</p> +<p><span class="commandline"><b>scancel</b></span> is used to cancel a pending +or running job or job step. It can also be used to send an arbitrary signal to +all processes associated with a running job or job step.</p> +<p><span class="commandline"><b>scontrol</b></span> is the administrative tool +used to view and/or modify SLURM state. Note that many <span class="commandline">scontrol</span> +commands can only be executed as user root.</p> +<p><span class="commandline"><b>sinfo</b></span> reports the state of partitions +and nodes managed by SLURM. It has a wide variety of filtering, sorting, and formatting +options.</p> +<p><span class="commandline"><b>squeue</b></span> reports the state of jobs or +job steps. It has a wide variety of filtering, sorting, and formatting options. +By default, it reports the running jobs in priority order and then the pending +jobs in priority order.</p> +<p class="footer"><a href="#top">top</a></p> +<h3>Examples</h3> +<p>Execute <span class="commandline">/bin/hostname</span> on four nodes (<span class="commandline">-N4</span>). +Include task numbers on the output (<span class="commandline">-l</span>). The +default partition will be used. One task per node will be used by default. </p> <pre> adev0: srun -N4 -l /bin/hostname 0: adev9 1: adev10 2: adev11 3: adev12 -</pre> -<p> -Execute <i>/bin/hostname</i> in four tasks (<i>-n4</i>). -Include task numbers on the output (<i>-l</i>). -The default partition will be used. -One processor per task will be used by default -(note that we don't specify a node count). +</pre> <p>Execute <span class="commandline">/bin/hostname</span> in four +tasks (<span class="commandline">-n4</span>). Include task numbers on the output +(<span class="commandline">-l</span>). The default partition will be used. One +processor per task will be used by default (note that we don't specify a node +count).</p> <pre> adev0: srun -n4 -l /bin/hostname 0: adev9 1: adev9 2: adev10 3: adev10 -</pre> -<p> -Submit the script <i>my.script</i> for later execution (<i>-b</i>). -Explicitly use the nodes adev9 and adev10 (<i>-w "adev[9-10]"</i>, -note the use of a node range expression). -One processor per task will be used by default -The output will appear in the file <i>my.stdout</i> (<i>-o my.stdout</i>). -By default, one task will be initiated per processor on the nodes. -Note that <i>my.script</i> contains the command <i>/bin/hostname</i> -which executed on the first node in the allocation (where the script -runs) plus two job steps -initiated using the <i>srun</i> command and executed sequentially. +</pre> <p>Submit the script my.script for later execution (<span class="commandline">-b</span>). +Explicitly use the nodes adev9 and adev10 (<span class="commandline">-w "adev[9-10]"</span>; +note the use of a node range expression). One processor per task will be used +by default. The output will appear in the file my.stdout (<span class="commandline">-o +my.stdout</span>). By default, one task will be initiated per processor on the +nodes. Note that my.script contains the command <span class="commandline">/bin/hostname</span> +that executed on the first node in the allocation (where the script runs) plus +two job steps initiated using the <span class="commandline">srun</span> command +and executed sequentially.</p> <pre> adev0: cat my.script #!/bin/sh @@ -131,7 +148,7 @@ adev0: cat my.script srun -l /bin/hostname srun -l /bin/pwd -adev0: srun -w "adev[9-10]" -o my.stdout -b my.script +adev0: srun -w "adev[9-10]" -o my.stdout -b my.script srun: jobid 469 submitted adev0: cat my.stdout @@ -144,9 +161,7 @@ adev9 1: /home/jette 2: /home/jette 3: /home/jette -</pre> -<p> -Submit a job, get its status and cancel it. +</pre> <p>Submit a job, get its status, and cancel it. </p> <pre> adev0: srun -b my.sleeper srun: jobid 473 submitted @@ -159,9 +174,7 @@ adev0: scancel 473 adev0: squeue JobId Partition Name User St TimeLim Prio Nodes -</pre> -<p> -Get the SLURM partition and node status. +</pre> <p>Get the SLURM partition and node status.</p> <pre> adev0: sinfo PARTITION NODES STATE CPUS MEMORY TMP_DISK NODES @@ -169,24 +182,21 @@ PARTITION NODES STATE CPUS MEMORY TMP_DISK NODES debug 8 IDLE 2 3448 82306 adev[0-7] batch 1 DOWN 2 3448 82306 adev8 7 IDLE 2 3448-3458 82306 adev[9-15] -</pre> - -<h2>MPI</h2> - -MPI use depends upon the type of MPI being used. -<a href="http://www.quadrics.com/">Quadrics</a> MPI relies upon SLURM -to allocate resources for the job and <i>srun</i> to initiate the tasks. -One would build the MPI program in the normal manner then initiate it -using a command line of this sort: <br /> -<i>srun [OPTIONS] <program> [program args]</i>. - -<p> <a href="http://www.lam-mpi.org/">LAM/MPI</a> relies upon the SLURM -<i>srun</i> command to allocate resources using either the <i>--allocate</i> -or the <i>--batch</i> option. In either case, specify the maximum -number of tasks required for the job. Then execute the <i>lamboot</i> -command to start <i>lamd</i> daemons. <i>lamboot</i> utilizes SLURM's -<i>srun</i> command to launch these daemons. Do not directly execute -the <i>srun</i> command to launch LAM/MPI tasks. For example: +</pre> <p class="footer"><a href="#top">top</a></p> +<h3>MPI</h3> +<p>MPI use depends upon the type of MPI being used. <a href="http://www.quadrics.com/">Quadrics</a> +MPI relies upon SLURM to allocate resources for the job and <span class="commandline">srun</span> +to initiate the tasks. One would build the MPI program in the normal manner then +initiate it using a command line of this sort:</p> +<p class="commandline"> srun [OPTIONS] <program> [program args]</p> +<p> <a href="http://www.lam-mpi.org/">LAM/MPI</a> relies upon the SLURM <span class="commandline">srun</span> +command to allocate resources using either the <span class="commandline">--allocate</span> +or the <span class="commandline">--batch</span> option. In either case, specify +the maximum number of tasks required for the job. Then execute the <span class="commandline">lamboot</span> +command to start lamd daemons. <span class="commandline">lamboot</span> utilizes +SLURM's <span class="commandline">srun</span> command to launch these daemons. +Do not directly execute the <span class="commandline">srun</span> command to launch +LAM/MPI tasks. For example: <pre> adev0: srun -n16 -A # allocates resources and spawns shell for job adev0: lamboot @@ -197,14 +207,22 @@ etc. adev0: lamclean adev0: lamhalt adev0: exit # exits shell spawned by initial srun command -</pre> - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/quickstart.html -<p>UCRL-WEB-201790 -<p>Last Modified January 8, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> +</pre> <p class="footer"><a href="#top">top</a></p></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> </body> </html> diff --git a/doc/html/quickstart_admin.html b/doc/html/quickstart_admin.html new file mode 100644 index 00000000000..693c1ee66b8 --- /dev/null +++ b/doc/html/quickstart_admin.html @@ -0,0 +1,353 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:Quick Start Administrator Guide</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> +</head> + +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2>Quick Start Administrator Guide</h2> +<h3>Overview</h3> +Please see the <a href="quickstart.html">Quick Start User Guide</a> for a general +overview. +<h3>Daemons</h3> +<p><b>slurmctld</b> is sometimes called the "controller" daemon. It +orchestrates SLURM activities, including queuing of job, monitoring node state, +and allocating resources (nodes) to jobs. There is an optional backup controller +that automatically assumes control in the event the primary controller fails. +The primary controller resumes control whenever it is restored to service. The +controller saves its state to disk whenever there is a change. This state can +be recovered by the controller at startup time. <b>slurmctld</b> would typically +execute as a special user specifically for this purpose (not user root). State +changes are saved so that jobs and other state can be preserved when slurmctld +moves or is restarted.</p> +<p>The <b>slurmd</b> daemon executes on every compute node. It resembles a remote +shell daemon to export control to SLURM. Because slurmd initiates and manages +user jobs, it must execute as the user root.</p> +<p><b>slurmctld</b> and/or <b>slurmd</b> should be initiated at node startup time +per the SLURM configuration.</p> +<h3>Infrastructure</h3> +<p>All communications between SLURM components are authenticated. The authentication +infrastructure used is specified in the SLURM configuration file and options include: +<a href="http://www.theether.org/authd/">authd</a>, munged and none.</p> +<p>Quadrics MPI works directly with SLURM on systems having Quadrics interconnects. +For non-Quadrics interconnect systems, <a href="http://www.lam-mpi.org/">LAM/MPI</a> +is the preferred MPI infrastructure. LAM/MPI uses the command <i>lamboot</i> to +initiate job-specific daemons on each node using SLURM's <span class="commandline">srun</span> +command. This places all MPI processes in a process-tree under the control of +the <b>slurmd</b> daemon. LAM/MPI version 7.0.4 or higher contains support for +SLURM.</p> +<p>SLURM's default scheduler is FIFO (First-In First-Out). A backfill scheduler +plugin is also available. Backfill scheduling will initiate a lower-priority job +if doing so does not delay the expected initiation time of higher priority jobs; +essentially using smaller jobs to fill holes in the resource allocation plan. +<a href="http://supercluster.org/maui">The Maui Scheduler</a> offers sophisticated +scheduling algorithms to control SLURM's workload. Motivated users can even develop +their own scheduler plugin if so desired. </p> +<p>SLURM uses the syslog function to record events. It uses a range of importance +levels for these messages. Be certain that your system's syslog functionality +is operational. </p> +<p>There is no necessity for synchronized clocks on the nodes. Events occur either +in real-time or based upon message traffic. However, synchronized clocks will +permit easier analysis of SLURM logs from multiple nodes.</p> +<p class="footer"><a href="#top">top</a></p> +<h3>Building and Installing</h3> +<p>Basic instructions to build and install SLURM are shown below. See the INSTALL +file for more details. </p> +<ol> +<li><span class="commandline">cd</span> to the directory containing the SLURM +source and type <i>.</i><span class="commandline">/configure</span> with appropriate +options.</li> +<li>Type <span class="commandline">make</span> to compile SLURM.</li> +<li> Type <span class="commandline">make install</span> to install the programs, +documentation, libaries, header files, etc.</li> +</ol> +<p>The most commonly used arguments to the <span class="commandline">configure</span> +command include: </p> +<p style="margin-left:.2in"><span class="commandline">--enable-debug</span><br> +Enable debugging of individual modules.</p> +<p style="margin-left:.2in"><span class="commandline">--prefix=<i>PREFIX</i></span><br> +</i> +Install architecture-independent files in PREFIX; default value is /usr/local.</p> +<p style="margin-left:.2in"><span class="commandline">--sysconfdir=<i>DIR</i></span><br> +</i> +Specify location of SLURM configuration file.</p> +<p style="margin-left:.2in"><span class="commandline">--with-totalview</span><br> +Compile with support for the TotalView debugger (see <a href="http://www.etnus.com/">http://www.etnus.com</a>).</p> +<p class="footer"><a href="#top">top</a></p> +<h3>Configuration</h3> +<p>The SLURM configuration file includes a wide variety of parameters. A full +description of the parameters is included in the slurm.conf man page. Rather than +duplicate that information, a sample configuration file is shown below. Any text +following a "#" is considered a comment. The keywords in the file are +not case sensitive, although the argument typically is (e.g., "SlurmUser=slurm" +might be specified as "slurmuser=slurm"). The control machine, like +all other machine specifications, can include both the host name and the name +used for communications. In this case, the host's name is "mcri" and +the name "emcri" is used for communications. The "e" prefix +identifies this as an ethernet address at this site. Port numbers to be used for +communications are specified as well as various timer values.</p> +<p>A description of the nodes and their grouping into non-overlapping partitions +is required. Partition and node specifications use node range expressions to identify +nodes in a concise fashion. This configuration file defines a 1154-node cluster +for SLURM, but it might be used for a much larger cluster by just changing a few +node range expressions. Specify the minimum processor count (Procs), real memory +space (RealMemory, megabytes), and temporary disk space (TmpDisk, megabytes) that +a node should have to be considered available for use. Any node lacking these +minimum configuration values will be considered DOWN and not scheduled.</p> +<pre> +# +# Sample /etc/slurm.conf for mcr.llnl.gov +# +ControlMachine=mcri ControlAddr=emcri +# +AuthType=auth/authd +Epilog=/usr/local/slurm/etc/epilog +FastSchedule=1 +JobCompLoc=/var/tmp/jette/slurm.job.log +JobCompType=jobcomp/filetxt +JobCredPrivateKey=/usr/local/etc/slurm.key +JobCredPublicKey=/usr/local/etc/slurm.cert +PluginDir=/usr/local/slurm/lib/slurm +Prolog=/usr/local/slurm/etc/prolog +SchedulerType=sched/backfill +SlurmUser=slurm +SlurmctldPort=7002 +SlurmctldTimeout=300 +SlurmdPort=7003 +SlurmdSpoolDir=/var/tmp/slurmd.spool +SlurmdTimeout=300 +StateSaveLocation=/tmp/slurm.state +SwitchType=switch/elan +# +# Node Configurations +# +NodeName=DEFAULT Procs=2 RealMemory=2000 TmpDisk=64000 State=UNKNOWN +NodeName=mcr[0-1151] NodeAddr=emcr[0-1151] +# +# Partition Configurations +# +PartitionName=DEFAULT State=UP +PartitionName=pdebug Nodes=mcr[0-191] MaxTime=30 MaxNodes=32 Default=YES +PartitionName=pbatch Nodes=mcr[192-1151] </pre> <p>You will should create unique job credential keys for your site +using the program <a href="http://www.openssl.org/">openssl</a>. An example of +how to do this is shown below. Specify file names that match the values of JobCredentialPrivateKey +and JobCredentialPublicCertificate in your configuration file. The JobCredentialPrivateKey +file must be readable only by SlurmUser. The JobCredentialPublicCertificate file +must be readable by all users. </p> +<p class="commandline" style="margin-left:.2in">openssl genrsa -out /usr/local/etc/slurm.key +1024<br> +openssl rsa -in /usr/local/etc/slurm.key -pubout -out /usr/local/etc/slurm.cert +</p> +<p>SLURM does not use reserved ports to authenticate communication between components. +You will need to have at least one "auth" plugin. Currently, only three +authentication plugins are supported: <b>auth/none</b>, <b>auth/authd</b>, and +<b>auth/munge</b>. The auth/none plugin is built and used by default, but either +Brent Chun's <a href="http://www.theether.org/authd/">authd</a>, or Chris Dunlap's +Munge should be installed in order to get properly authenticated communications. +The configure script in the top-level directory of this distribution will determine +which authentication plugins may be built. The configuration file specifies which +of the available plugins will be utilized. </p> +<p>A Portable Authentication Manager (PAM) module is available for SLURM that +can prevent a user from accessing a node which he has not been allocated, if that +mode of operation is desired.</p> +<p class="footer"><a href="#top">top</a></p> +<h3>Starting the Daemons</h3> +<p>For testing purposes you may want to start by just running slurmctld and slurmd +on one node. By default, they execute in the background. Use the <span class="commandline">-D</span> +option for each daemon to execute them in the foreground and logging will be done +to your terminal. The <span class="commandline">-v</span> option will log events +in more detail with more v's increasing the level of detail (e.g. <span class="commandline">-vvvvvv</span>). +You can use one window to execute <span class="commandline">slurmctld -D -vvvvvv</span>, +a second window to execute <span class="commandline">slurmd -D -vvvvv</span>, +and a third window to execute commands such as <span class="commandline">srun +-N1 /bin/hostname</span> to confirm basic functionality.</p> +<p>Another important option for the daemons is <span class="commandline">-c</span> +to clear previous state information. Without the <span class="commandline">-c</span> +option, the daemons will restore any previously saved state information: node +state, job state, etc. With the <span class="commandline">-c</span> option all +previously running jobs will be purged and node state will be restored to the +values specified in the configuration file. This means that a node configured +down manually using the <span class="commandline">scontrol</span> command will +be returned to service unless also noted as being down in the configuration file. +In practice, SLURM restarts with preservation consistently.</p> +<p>A thorough battery of tests written in the "expect" language is also +available. </p> +<p class="footer"><a href="#top">top</a></p> +<h3>Administration Examples</h3> +<p><span class="commandline">scontrol</span> can be used to print all system information +and modify most of it. Only a few examples are shown below. Please see the scontrol +man page for full details. The commands and options are all case insensitive.</p> +<p>Print detailed state of all jobs in the system.</p> +<pre> +adev0: scontrol +scontrol: show job +JobId=475 UserId=bob(6885) Name=sleep JobState=COMPLETED + Priority=4294901286 Partition=batch BatchFlag=0 + AllocNode:Sid=adevi:21432 TimeLimit=UNLIMITED + StartTime=03/19-12:53:41 EndTime=03/19-12:53:59 + NodeList=adev8 NodeListIndecies=-1 + ReqProcs=0 MinNodes=0 Shared=0 Contiguous=0 + MinProcs=0 MinMemory=0 Features=(null) MinTmpDisk=0 + ReqNodeList=(null) ReqNodeListIndecies=-1 + +JobId=476 UserId=bob(6885) Name=sleep JobState=RUNNING + Priority=4294901285 Partition=batch BatchFlag=0 + AllocNode:Sid=adevi:21432 TimeLimit=UNLIMITED + StartTime=03/19-12:54:01 EndTime=NONE + NodeList=adev8 NodeListIndecies=8,8,-1 + ReqProcs=0 MinNodes=0 Shared=0 Contiguous=0 + MinProcs=0 MinMemory=0 Features=(null) MinTmpDisk=0 + ReqNodeList=(null) ReqNodeListIndecies=-1 +</pre> <p>Print the detailed state of job 477 and change its priority to +zero. A priority of zero prevents a job from being initiated (it is held in "pending" +state).</p> +<pre> +adev0: scontrol +scontrol: show job 477 +JobId=477 UserId=bob(6885) Name=sleep JobState=PENDING + Priority=4294901286 Partition=batch BatchFlag=0 + <i>more data removed....</i> +scontrol: update JobId=477 Priority=0 +</pre> +<p class="footer"><a href="#top">top</a></p> +<p>Print the state of node adev13 and drain it. To drain a node specify a new +state of DRAIN, DRAINED, or DRAINING. SLURM will automatically set it to the appropriate +value of either DRAINING or DRAINED depending on whether the node is allocated +or not. Return it to service later.</p> +<pre> +adev0: scontrol +scontrol: show node adev13 +NodeName=adev13 State=ALLOCATED CPUs=2 RealMemory=3448 TmpDisk=32000 + Weight=16 Partition=debug Features=(null) +scontrol: update NodeName=adev13 State=DRAIN +scontrol: show node adev13 +NodeName=adev13 State=DRAINING CPUs=2 RealMemory=3448 TmpDisk=32000 + Weight=16 Partition=debug Features=(null) +scontrol: quit +<i>Later</i> +adev0: scontrol +scontrol: show node adev13 +NodeName=adev13 State=DRAINED CPUs=2 RealMemory=3448 TmpDisk=32000 + Weight=16 Partition=debug Features=(null) +scontrol: update NodeName=adev13 State=IDLE +</pre> <p>Reconfigure all SLURM daemons on all nodes. This should +be done after changing the SLURM configuration file.</p> +<pre> +adev0: scontrol reconfig +</pre> <p>Print the current SLURM configuration. This also reports if the +primary and secondary controllers (slurmctld daemons) are responding. To just +see the state of the controllers, use the command <span class="commandline">ping</span>.</p> +<pre> +adev0: scontrol show config +Configuration data as of 03/19-13:04:12 +AuthType = auth/munge +BackupAddr = eadevj +BackupController = adevj +ControlAddr = eadevi +ControlMachine = adevi +Epilog = (null) +FastSchedule = 1 +FirstJobId = 1 +NodeHashBase = 10 +HeartbeatInterval = 60 +InactiveLimit = 0 +JobCompLoc = /var/tmp/jette/slurm.job.log +JobCompType = jobcomp/filetxt +JobCredPrivateKey = /etc/slurm/slurm.key +JobCredPublicKey = /etc/slurm/slurm.cert +KillWait = 30 +MaxJobCnt = 2000 +MinJobAge = 300 +PluginDir = /usr/lib/slurm +Prolog = (null) +ReturnToService = 1 +SchedulerAuth = (null) +SchedulerPort = 65534 +SchedulerType = sched/backfill +SlurmUser = slurm(97) +SlurmctldDebug = 4 +SlurmctldLogFile = /tmp/slurmctld.log +SlurmctldPidFile = /tmp/slurmctld.pid +SlurmctldPort = 7002 +SlurmctldTimeout = 300 +SlurmdDebug = 65534 +SlurmdLogFile = /tmp/slurmd.log +SlurmdPidFile = /tmp/slurmd.pid +SlurmdPort = 7003 +SlurmdSpoolDir = /tmp/slurmd +SlurmdTimeout = 300 +SLURM_CONFIG_FILE = /etc/slurm/slurm.conf +StateSaveLocation = /usr/local/tmp/slurm/adev +SwitchType = switch/elan +TmpFS = /tmp +WaitTime = 0 + +Slurmctld(primary/backup) at adevi/adevj are UP/UP +</pre> <p>Shutdown all SLURM daemons on all nodes.</p> +<pre> +adev0: scontrol shutdown +</pre> <p class="footer"><a href="#top">top</a></p></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> +</body> +</html> diff --git a/doc/html/slurm.html b/doc/html/slurm.html new file mode 100644 index 00000000000..46b80d90649 --- /dev/null +++ b/doc/html/slurm.html @@ -0,0 +1,99 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> +</head> + +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1"></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a></b><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"> +<h2><br> +SLURM: A Highly Scalable Resource Manager</h2> +<p>SLURM is an open-source resource manager designed for Linux clusters of all +sizes. It provides three key functions. First it allocates exclusive and/or non-exclusive +access to resources (computer nodes) to users for some duration of time so they +can perform work. Second, it provides a framework for starting, executing, and +monitoring work (typically a parallel job) on a set of allocated nodes. Finally, +it arbitrates conflicting requests for resources by managing a queue of pending +work. </p> +<p>SLURM is not a sophisticated batch system, but it does provide an Applications +Programming Interface (API) for integration with external schedulers such as <a href="http://supercluster.org/maui">The +Maui Scheduler</a>. While other resource managers do exist, SLURM is unique in +several respects: +<ul> +<li>Its source code is freely available under the <a href="http://www.gnu.org/licenses/gpl.html">GNU +General Public License</a>.</li> +<li>It is designed to operate in a heterogeneous cluster with up to thousands +of nodes.</li> +<li>It is portable; written in C with a GNU autoconf configuration engine. While +initially written for Linux, other UNIX-like operating systems should be easy +porting targets. A plugin mechanism exists to support various interconnects, authentication +mechanisms, schedulers, etc.</li> +<li>SLURM is highly tolerant of system failures, including failure of the node +executing its control functions.</li> +<li>It is simple enough for the motivated end user to understand its source and +add functionality.</li> +</ul> +</td> +</tr> +<tr> +<td colspan="3"><hr> +<p>For information about this page, contact <a href="mailto:jette@llnl.gov"> </a><a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> + <area shape="rect" coords="616,4,762,97" href="../"> + <area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +</map> +</body> +</html> diff --git a/doc/html/slurm_banner.jpg b/doc/html/slurm_banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9d459f858c18532966930f2c346e7c46eaed7e9 GIT binary patch literal 18651 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 VWGL`xC1mG6^;-U$Rg&Dz{a+17SUdm# literal 0 HcmV?d00001 diff --git a/doc/html/slurmstyles.css b/doc/html/slurmstyles.css new file mode 100644 index 00000000000..0c16844f4f9 --- /dev/null +++ b/doc/html/slurmstyles.css @@ -0,0 +1,16 @@ +h2 { font-family: Arial, Verdana, sans-serif; font-size: 16px; font-weight: bold; color: #6699CC; text-align: center; } +h3 { font-family: Arial, Verdana, sans-serif; font-size: 14px; font-weight: bold; color: #6699CC} +p,ol,ul,li,td { font-family: Arial, Verdana, sans-serif; font-size: 12px; color: #000000} +pre { font-family: "Courier New", Courier, mono; font-size: 12px; color: #000000} +.whitetext { font-family: Arial, Verdana, sans-serif; font-size: 12px; font-weight: bold; color: #FFFFFF} +.footer { font-family: Arial, Verdana, sans-serif; font-size: 10px; color: #000000} +a:link { font-family: Arial, Verdana, sans-serif; color: #6699CC; text-decoration: underline} +a:visited { font-family: Arial, Verdana, sans-serif; color: #6699CC; text-decoration: underline} +a:active { font-family: Arial, Helvetica, sans-serif; color: #6699CC; text-decoration: none } +a:hover { font-family: Arial, Verdana, sans-serif; color: #6699CC; text-decoration: none} +a.nav:link { font-family: Arial, Verdana, sans-serif; color: #6699CC; font-weight: bold; text-decoration: none} +a.nav:visited { font-family: Arial, Verdana, sans-serif; color: #6699CC; font-weight: bold; text-decoration: none} +a.nav:active { font-family: Arial, Helvetica, sans-serif; font-weight: bold; color: #6699CC; text-decoration: none } +a.nav:hover { font-family: Arial, Verdana, sans-serif; color: #6699CC; font-weight: bold; text-decoration: underline}.commandline { + font-family: "Courier New", Courier, mono; +} diff --git a/doc/html/spacer.gif b/doc/html/spacer.gif new file mode 100644 index 0000000000000000000000000000000000000000..35d42e808f0a8017b8d52a06be2f8fec0b466a66 GIT binary patch literal 43 scmZ?wbhEHbWMp7uXkcLY|NlP&1B2pE7Dgb&paUX6G7L;iE{qJ;0LZEa`2YX_ literal 0 HcmV?d00001 diff --git a/doc/html/team.html b/doc/html/team.html index dc67af2bb4b..26315c1a520 100644 --- a/doc/html/team.html +++ b/doc/html/team.html @@ -1,33 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" + "http://www.w3.org/TR/REC-html40/loose.dtd"> + <html> + <head> -<title>SLURM: Team</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta http-equiv="Pragma" content="no-cache"> +<meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, +Linux clusters, high-performance computing, Livermore Computing"> +<meta name="LLNLRandR" content="UCRL-WEB-201790"> +<meta name="LLNLRandRdate" content="12 January 2004"> +<meta name="distribution" content="global"> +<meta name="description" content="Simple Linux Utility for Resource Management"> +<meta name="copyright" +content="This document is copyrighted U.S. +Department of Energy under Contract W-7405-Eng-48"> +<meta name="Author" content="Moe Jette"> +<meta name="email" content="jette@llnl.gov"> +<meta name="Classification" +content="DOE:DOE Web sites via organizational +structure:Laboratories and Other Field Facilities"> +<title>Simple Linux Utility for Resource Management:SLURM Team</title> +<link href="slurmstyles.css" rel="stylesheet" type="text/css"> </head> -<body> -<h1>SLURM: Team</h1> - -SLURM development has been a joint effort of -<a href="http://www.llnl.gov/">Lawrence Livermore National Laboratory</a> and -<a href="http://www.lnxi.com/">Linux NetworX</a>. -The current SLURM development staff includes: +<body bgcolor="#000000" text="#000000" leftmargin="0" topmargin="0"> +<table width="770" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td><img src="slurm_banner.jpg" width="770" height="145" usemap="#Map" border="0" alt="Simple Linux Utility for Resource Management"></td> +</tr> +</table> +<table width="770" border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF"> +<tr> +<td width="100%"> +<table width="760" border="0" cellspacing="0" cellpadding="4" align="right"> +<tr> +<td valign="top" bgcolor="#000000"><p><img src="spacer.gif" width="110" height="1" alt=""></p> +<p><a href="slurm.html" class="nav" align="center">Home</a></p> +<p><span class="whitetext">About</span><br> +<a href="overview.html" class="nav">Overview</a><br> +<a href="news.html" class="nav">What's New</a><br> +<a href="publications.html" class="nav">Publications</a><br> +<a href="team.html" class="nav">SLURM Team</a></p> +<p><span class="whitetext">Using</span><br> +<a href="documentation.html" class="nav">Documentation</a><br> +<a href="faq.html" class="nav">FAQ</a><br> +<a href="help.html" class="nav">Getting Help</a></p> +<p><span class="whitetext">Installing</span><br> +<a href="platforms.html" class="nav">Platforms</a><br> +<a href="download.html" class="nav">Download</a><br> +<a href="quickstart_admin.html" class="nav">Guide</a></p></td> +<td><img src="spacer.gif" width="10" height="1" alt=""></td> +<td valign="top"><h2>SLURM Team</h2> +<p>SLURM development has been a joint effort of <a href="http://www.llnl.gov/">Lawrence +Livermore National Laboratory</a> and <a href="http://www.lnxi.com/">Linux NetworX</a>. +The current SLURM development staff includes: </p> <ul> <li>Mark Grondona (LLNL)</li> <li>Moe Jette (LLNL)</li> <li>Jay Windley (LNXI)</li> </ul> -<p> -SLURM development alumni include: +<p> SLURM development alumni include: <ul> <li>Joey Eckstrom (LLNL/BYU)</li> <li>Kevin Tew (LLNL/BYU)</li> -</ul> - -<hr> -<a href="http://www.llnl.gov/disclaimer.html">Privacy and Legal Notice</a> -<p>URL = http://www.llnl.gov/linux/slurm/team.html -<p>UCRL-WEB-201790 -<p>Last Modified January 8, 2004</p> -<address>Maintained by <a href="mailto:slurm-dev@lists.llnl.gov"> -slurm-dev@lists.llnl.gov</a></address> +</ul></td> +</tr> +<tr> +<td colspan="3"><hr> <p>For information about this page, contact <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>.</p> +<p><a href="http://www.llnl.gov/"><img align=middle src="lll.gif" width="32" height="32" border="0"></a></p> +<p class="footer">UCRL-WEB-201790<br> +Last modified January 15, 2004</p></td> +</tr> +</table> +</td> + </tr> +</table> +<map name="Map"> +<area shape="rect" coords="616,4,762,97" href="../"> +<area shape="rect" coords="330,1,468,11" href="http://www.llnl.gov/disclaimer.html"> +<area shape="rect" coords="11,23,213,115" href="slurm.html"> +</map> </body> </html> -- GitLab