/usr/share/doc/slurm-wlm-doc/html/plugins.html is in slurm-wlm-doc 15.08.7-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | <!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">
<meta name="description" content="Simple Linux Utility for Resource Management">
<title>Simple Linux Utility for Resource Management</title>
<link href="linuxstyles.css" rel="stylesheet" type="text/css">
<link href="slurmstyles.css" rel="stylesheet" type="text/css">
<script type="text/javascript">
function window_check ()
{
obj = document.getElementById('navigation');
if ((window.innerWidth>=800) && (window.innerHeight>=700) &&
(screen.width>=800) && (screen.height>=700)) {
obj.style.position = 'fixed';
} else {
obj.style.position = 'absolute';
}
}
window.onload = window_check;
window.onresize = window_check;
</script>
</head>
<body><div id="container"><div id="row">
<div id="navigation">
<a href="slurm.html"><img class="displayed" src="slurm_logo.png" width="130" usemap="#Map"></a>
<div id="version">Version 15.08</div>
<p></p>
<div id="slurmh2">About</div>
<ul>
<li><a href="overview.html" class="nav">Overview</a></li>
<li><a href="news.html" class="nav">What's New</a></li>
<li><a href="team.html" class="nav">Slurm Team</a></li>
<li><a href="meetings.html" class="nav">Meetings</a></li>
<li><a href="testimonials.html" class="nav">Testimonials</a></li>
<li><a href="disclaimer.html" class="nav">Legal Notices</a></li>
</ul>
<div id="slurmh2">Using</div>
<ul>
<li><a href="tutorials.html" class="nav">Tutorials</a></li>
<li><a href="documentation.html" class="nav">Documentation</a></li>
<li><a href="faq.html" class="nav">FAQ</a></li>
<li><a href="publications.html" class="nav">Publications</a></li>
</ul>
<div id="slurmh2">Installing</div>
<ul>
<li><a href="download.html" class="nav">Download</a></li>
<li><a href="quickstart_admin.html" class="nav">Installation Guide</a></li>
</ul>
<div id="slurmh2">Getting Help</div>
<ul>
<li><a href="http://www.schedmd.com/#services" class="nav">Support</a></li>
<li><a href="mail.html" class="nav">Mailing Lists</a></li>
<li><a href="http://www.schedmd.com/#services" class="nav">Training</a></li>
<li><a href="troubleshoot.html" class="nav">Troubleshooting</a></li>
</ul>
<a href="http://www.schedmd.com"><img class="displayed" src="schedmd.png" width="130" usemap="#Map"></a>
</div>
<div id="content">
<div id="cse"></div>
<h1><a name="top">Slurm Plugin API</a></h1>
<h2>Overview</h2>
<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>Identification</h2>
<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>
<h2>Versioning</h2>
<p>Slurm plugin version numbers comprise a major, minor and micro revision number.
If the major and/or minor revision number changes, this indicates major changes
to the Slurm functionality including changes to APIs, command options, and
plugins.
These plugin changes may include new functions and/or function arguments.
If only the micro revision number changes, this is indicative of bug fixes
and possibly minor enhancements which should not adversely impact users.
In all cases, rebuilding and installing all Slurm plugins is recommended
at upgrade time.
Not all compute nodes in a cluster need be updated at the same time, but
all Slurm APIs, commands, plugins, etc. on a compute node should represent
the same version of Slurm.</p>
<p class="footer"><a href="#top">top</a></p>
<h2>Data Objects</h2>
<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>
</ul>
<p>A plugin may optionally define and export the following symbols:</p>
<ul>
<li>const uint32_t plugin_version<br>
If specified, identifies the version of Slurm used to build this plugin and
any attempt to load the plugin from a different version of Slurm will result
in an error.
If not specified, then the plugin may be loadeed by Slurm commands and
daemons from any version, however this may result in difficult to diagnose
failures due to changes in the arguments to plugin functions or changes
in other Slurm functions used by the plugin.</p>
</ul>
<p class="footer"><a href="#top">top</a></p>
<h2>API Functions in All Plugins</h2>
<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 init and fini 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">init()</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>
<h2>Thread Safety</h2>
<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>
<h2>Run-time Support</h2>
<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>
<h2>Performance</h2>
<p>All plugin functions are expected to execute very quickly. If any function
entails delays (e.g. transactions with other systems), it should be written to
utilize a thread for that functionality. This thread may be created by the
<span class="commandline">init()</span> function and deleted by the
<span class="commandline">fini()</span> functions. See <b>plugins/sched/backfill</b>
for an example of how to do this.</p>
<p class="footer"><a href="#top">top</a></p>
<p style="text-align:center;">Last modified 27 March 2015</p>
</div> <!-- closes "row" -->
</div> <!-- closes "content" -->
<div id="row">
<div id="footer">
<div id="left"> <a href="disclaimer.html" target="_blank" class="privacy">Legal Notices</a></div>
<div id="right"><span class="ucrlnum"></span></div>
</div>
<div id="footer2">
<div style="clear:both;"></div>
</div>
</div> <!-- closes "row" -->
</div> <!-- closes "container" -->
</body>
</html>
|