Upgrade macos

This commit is contained in:
Bassem Girgis
2025-03-19 08:52:56 -05:00
parent 53580cb51f
commit d29ef955f5
8041 changed files with 1936720 additions and 130842 deletions

View File

@@ -0,0 +1,128 @@
PRRTE DVM Configuration
=======================
The PMIx Reference RunTime Environment (PRRTE) can be instantiated
as a Distributed Virtual Machine (DVM) in two ways. First, the
``prte`` command can be executed at a shell prompt. This will discover
the available resources (either from hostfile or as allocated by a
resource manager) and start a PRRTE shepherd daemon (:ref:`prted(1)
<man1-prted>`) on each of the indicated nodes.
The other method, however, is to bootstrap the DVM at time of cluster
startup. Bootstrapping PRRTE allows the DVM to serve as the system-level
runtime, providing a full-service PMIx environment to sessions under
its purview. Integration to an appropriately enabled scheduler can
provide a full workload managed environment for users.
Establishing the DVM using the bootstrap method requires that a PRRTE
configuration file be created and made available on every node of the
cluster at node startup. The configuration file provides necessary
information for establishing the communication infrastructure between
the DVM controller and the compute node daemons. It also provides a
means for easily defining DVM behavior for options such as logging,
system-level prolog and epilog scripts for each session, and other
PRRTE features.
The configuration file can be manually created or can be created using
the `PRRTE configuration tool <configurator.html>`_.
Manual creation can best be done
by editing the example configuration file (``<source-location>/src/etc/prte.conf``).
This file contains all the supported configuration options, with all
entries commented out. Simply uncomment the options of interest and
set them to appropriate values. The file will be installed into the
final ``<install-location>/etc`` when ``make install`` is performed.
Configuration Options
---------------------
The following options are supported by PRRTE |prte_ver|.
While we make every effort to maintain compatibility with prior versions,
we recommend that you check options when installing new versions to
see what may have changed and/or been added. We also recommend that
you use the `PRRTE DVM configurator <configurator.html>`_ for the
version you are using to ensure that it is fully compatible.
Bootstrap Options
^^^^^^^^^^^^^^^^^
``ClusterName=<string> (default: "cluster")`` is the name of the cluster upon
which the DVM is executing. This is used by PRRTE to form the namespace
for the DVM daemons, which is taken as ``<clustername>-prte-dvm``.
Using different names for each of your clusters is important if you use a single
database to record information from multiple PRRTE-managed clusters.
``DVMControllerHost=<hostname>`` is the host upon which the DVM controller
will be executing. The ``prted`` that finds itself booting onto this host
will declare itself to be the system controller and will initialize itself
accordingly.
``DVMControllerPort=<number> (default: 7817)`` is the TCP port upon which the
DVM controller will be listening for connections from its ``prted`` daemons
on the remaining system nodes.
``PRTEDPort=<number (default: 7818)`` is the TCP port upon which each
``prted`` daemon will be listening for connections from its peer daemons
on the other system nodes.
``DVMNodes=<regex of DVM nodes> (default: none)`` provides a regular expression
identifying the nodes that upon which user applications can run. IP addresses can
be provided in place of hostnames if desired.The regular expression can consist of
a simple comma-delimited list of hostnames, or a comma-delimited list of hostname
ranges (e.g., "linux0,linux[2-10]"), or a PMIx "native" regular expression.
Operational Options
^^^^^^^^^^^^^^^^^^^
``DVMTempDir=<path> (default: /tmp)`` is the temporary directory that the
DVM daemons and controller are to use as the base for their session directories.
Working files/directories for the DVM will be placed under this location.
``SessionTmpDir=<path> (default: DVMTempDir)`` is the temporary directory that
the DVM daemons are to use as the base for session directories for all
application sessions. Working files for each session will be placed under
this location, separated out into a directory for each session.
Logging Options
^^^^^^^^^^^^^^^
``ControllerLogJobState=<true|false> (default: false)`` directs the DVM
controller to log each DVM-launched job state transition. Log entry includes
the namespace of the job, the state to which it is transitioning, and the
date/time stamp when the transition was ordered.
``ControllerLogProcState=<true|false> (default: false)`` directs the DVM
controller to log each process (in a DVM-launched job) state transition.
Log entry includes the namespace and rank of the process, the state to
which it is transitioning, and the date/time stamp when the transition was
ordered.
``ControllerLogPath=<path> (default: DVMTempDir)`` is the path to where the logs are to
be written. If a relative path is provided,
then the directory will be created under the ``DVMTempDir`` location. The
path defaults to the specified SessionTmpDir in the absence of any input
to this field. The log filename is formatted as ``prtectrlr-<hostname>-log<``.
``PRTEDLogJobState=<true|false> (default: false)`` directs each ``prted``
in the DVM to log each DVM-launched job state transition. Log entry includes
the namespace of the job, the state to which it is transitioning, and the
date/time stamp when the transition was ordered.
``PRTEDLogProcState=<true|false> (default: false)`` directs each ``prted``
in the DVM to log each process (in a DVM-launched job) state transition.
Log entry includes the namespace and rank of the process, the state to
which it is transitioning, and the date/time stamp when the transition was
ordered.
``PRRTEDLogPath=<path> (default: DVMTempDir)`` is the path to where the logs are to
be written. If a relative path is provided,
then the directory will be created under the ``DVMTempDir`` location. The
path defaults to the specified SessionTmpDir in the absence of any input
to this field. The log filename is formatted as ``prted-<hostname>-log<``.
Configurator Tool
-----------------
The `PRRTE configuration tool <configurator.html>`_ contains all the supported options in an
easy-to-use form. Once you have filled out the desired entries, the
"submit" button will show the resulting configuration file on the
browser window |mdash| a simple "copy/paste" operation into your target
configuration file will yield the final result.

View File

@@ -0,0 +1,79 @@
Contributing to PRRTE
=====================
Open source contributions
-------------------------
All code contributions are submitted as pull requests on the `PRRTE
GitHub repository <https://github.com/openpmix/prrte/>`_.
.. important:: All commits must include a ``Signed-off-by:`` line,
indicating the submitter's agreement to the :ref:`PRRTE
Contributor's Declaration
<contributing-contributors-declaration-label>`.
.. _contributing-contributors-declaration-label:
Contributor's Declaration
^^^^^^^^^^^^^^^^^^^^^^^^^
In order to ensure that we can keep distributing PRRTE under our
:doc:`open source license </license>`, we need to ensure that
all contributions are compatible with that license. Put differently:
we need to have an established intellectual property pedigree of the
code in PRRTE. This means being able to ensure that all code
included in PRRTE is free, open source, and able to be distributed
under :doc:`the BSD license </license>`.
PRRTE has therefore adopted requirements based on the signed-off-by
process as described in Section 11 of the Linux kernel document on
`Submitting Patches
<https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin>`_.
Each proposed contribution to the PRRTE code base must include the
text ``Signed-off-by:`` followed by the contributor's name and email
address. This is a developer's certification that he or she has the
right to submit the patch for inclusion into the project, and
indicates agreement to the Developer's Certificate of Origin:
By making a contribution to this project, I certify that:
#. The contribution was created in whole or in part by me and I
have the right to submit it under the :doc:`PRRTE open
source license </license>`; or
#. The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part by
me, under the :doc:`PRRTE open source license
</license>` (unless I am permitted to submit under a
different license); or
#. The contribution was provided directly to me by some other
person who certified (1) or (2) and I have not modified it.
#. I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off)
is maintained indefinitely and may be redistributed consistent
with this project and the open source license(s) involved.
Proposed contributions failing to include the ``Signed-off-by:``
certification will not be accepted into any PRRTE code
repository. The community reserves the right to revert any commit
inadvertently made without the required certification.
.. note:: This policy prevents a situation where intellectual property
gets into the PRRTE code base and then someone later
claims that we owe them money for it. PRRTE is a free,
open source code base. We intend it to remain that way.
If you have not already done so, please ensure that *every* commit in
your pull request contains the ``Signed-off-by:`` line.
.. admonition:: Pro tip
:class: tip
You can use the ``-s`` flag to the ``git commit`` command (i.e.,
``git commit -s ...``) to automatically add the appropriate
``Signed-off-by:`` line to your commit message.

View File

@@ -0,0 +1,59 @@
GitHub, Git, and related topics
===============================
GitHub
------
PRRTE's Git repositories are `hosted at GitHub
<https://github.com/openpmix/prrte>`_.
#. First, you will need a Git client. We recommend getting the latest
version available. If you do not have the command ``git`` in your
path, you will likely need to download and install Git.
#. `prrte <https://github.com/openpmix/prrte/>`_ is the main PRRTE
repository where most active development is done. Git clone this
repository. Note that the use of the ``--recursive`` CLI option is
necessary because PRRTE uses Git submodules::
shell$ git clone --recursive https://github.com/openpmix/prrte.git
Note that Git is natively capable of using many forms of web
proxies. If your network setup requires the user of a web proxy,
`consult the Git documentation for more details
<https://git-scm.com/>`_.
Git commits: open source / contributor's declaration
----------------------------------------------------
In order to remain open source, all new commits to the PRRTE
repository must include a ``Signed-off-by:`` line, indicating the
submitter's agreement to the :ref:`PRRTE Contributor's Declaration
<contributing-contributors-declaration-label>`.
.. tip:: You can use the ``-s`` option to ``git commit`` to
automatically add the ``Signed-off-by:`` line to your commit
message.
.. _git-github-branch-scheme-label:
Git branch scheme
-----------------
Generally, PRRTE has two types of branches in its Git repository:
#. ``main``:
* All active development occurs on the ``main`` branch (new features,
bug fixes, etc.).
#. Release branches of the form ``vMAJOR.MINOR.x`` (e.g., ``v4.0.x``,
``v4.1.x``, ``v5.0.x``).
* The ``.x`` suffix indicates that this branch is used to create
all releases in the PRRTE vMAJOR.MINOR series.
* Periodically, the PRRTE community will make a new release
branch, typically from ``main``.
* A Git tag of the form ``vMAJOR.MINOR.RELEASE`` is used to
indicate the specific commit on a release branch from where
official PRRTE release tarball was created (e.g., ``v4.1.0``,
``v4.1.1``, ``v4.1.2``, etc.).

View File

@@ -0,0 +1,319 @@
.. _developers-installing-autotools-label:
Manually installing the GNU Autootools
======================================
There is enough detail in building the GNU Autotools that it warrants
its own section.
.. note:: As noted above, you only need to read/care about this
section if you are building PRRTE from a Git clone. End
users installing an PRRTE distribution tarball do *not*
need to have the GNU Autotools installed.
Use a package manager
---------------------
It is recommended that you use your Linux distribution's package
manager, or Homebrew or MacPorts on macOS to install recent versions
of GNU Autoconf, Automake, and Libtool.
If you cannot, keep reading in this section to see how to build and
install these applications manually (i.e., download the source from
the internet and build/install it yourself).
Autotools versions
------------------
The following tools are required for developers to compile PRRTE
from its repository sources (users who download PRRTE tarballs do
not need these tools - they are only required for developers working
on the internals of PRRTE itself):
.. list-table::
:header-rows: 1
* - Software package
- Notes
- URL
* - GNU m4
- See version chart below
- https://ftp.gnu.org/gnu/m4/
* - GNU Autoconf
- See version chart below
- https://ftp.gnu.org/gnu/autoconf/
* - GNU Automake
- See version chart below
- https://ftp.gnu.org/gnu/automake/
* - GNU Libtool
- See version chart below
- https://ftp.gnu.org/gnu/libtool/
The table below lists the versions that are used to make nightly
snapshot and official release PRRTE tarballs. Other versions of the
tools *may* work for some (but almost certainly not all) platforms;
the ones listed below are the versions that we know work across an
extremely wide variety of platforms and environments.
To strengthen the above point: the core PRRTE developers typically
use very, very recent versions of the GNU tools. There are known bugs
in older versions of the GNU tools that PRRTE no longer compensates
for (it seemed senseless to indefinitely support patches for ancient
versions of Autoconf, for example).
.. warning:: You **will** have problems if you do not use recent
versions of the GNU Autotools.
That being said, ``autogen.pl`` and ``configure.ac`` scripts tend to
be a bit lenient and enforce slightly older minimum versions than the
ones listed below. This is because such older versions still make
usable PRRTE builds on many platforms - especially Linux on x86_64
with GNU compilers - and are convenient for developers whose Linux
distribution may not have as recent as the versions listed below (but are
recent enough to produce a working version for their platform).
To be clear: the versions listed below are required to support a wide
variety of platforms and environments, and are used to make nightly
and official release tarballs. When building PRRTE, YMMV when using
versions older than those listed below |mdash| especially if you are
not building on Linux x86_64 with the GNU compilers.
Using older versions is unsupported. If you run into problems, upgrade
to at least the versions listed below.
.. note:: You may need to scroll right in the following table.
.. admonition:: PRRTE Docs TODO
:class: error
The table below is almost certainly wrong; it has all the values
from Open MPI. Need to update the table below with the appropriate
values for PRRTE.
.. list-table::
:header-rows: 1
* - PRRTE
- M4
- Autoconf
- Automake
- Libtool
- Flex
- Sphinx
* - v1.0.x
- NA
- 2.58 - 2.59
- 1.7 - 1.9.6
- 1.5.16 - 1.5.22
- 2.5.4
- NA
* - v1.1.x
- NA
- 2.59
- 1.9.6
- 1.5.16 - 1.5.22
- 2.5.4
- NA
* - v1.2.x
- NA
- 2.59
- 1.9.6
- 1.5.22 - 2.1a
- 2.5.4
- NA
* - v1.3.x
- 1.4.11
- 2.63
- 1.10.1
- 2.2.6b
- 2.5.4
- NA
* - v1.4.x
- 1.4.11
- 2.63
- 1.10.3
- 2.2.6b
- 2.5.4
- NA
* - v1.5.x for x=0-4
- 1.4.13
- 2.65
- 1.11.1
- 2.2.6b
- 2.5.4
- NA
* - v1.5.x for x>=5
- 1.4.16
- 2.68
- 1.11.3
- 2.4.2
- 2.5.35
- NA
* - v1.6.x
- 1.4.16
- 2.68
- 1.11.3
- 2.4.2
- 2.5.35
- NA
* - v1.7.x
- 1.4.16
- 2.69
- 1.12.2
- 2.4.2
- 2.5.35
- NA
* - v1.8.x
- 1.4.16
- 2.69
- 1.12.2
- 2.4.2
- 2.5.35
- NA
* - v1.10.x
- 1.4.16
- 2.69
- 1.12.2
- 2.4.2
- 2.5.35
- NA
* - v2.0.x through v4.y
- 1.4.17
- 2.69
- 1.15
- 2.4.6
- 2.5.35
- NA
* - v5.0.x
- 1.4.17
- 2.69
- 1.15
- 2.4.6
- 2.5.35
- 4.2.0
* - Git main
- 1.4.17
- 2.69
- 1.15
- 2.4.6
- 2.5.35
- 4.2.0
Checking your versions
----------------------
You can check what versions of the Autotools you have installed with
the following:
.. code-block:: sh
shell$ m4 --version
shell$ autoconf --version
shell$ automake --version
shell$ libtoolize --version
Installing the GNU Autotools from source
----------------------------------------
.. note:: Most operating system packaging systems (to include Homebrew
and MacPorts on MacOS) install recent-enough versions of the
GNU Autotools. You should generally only install the GNU
Autotools manually if you can't use your operating system
packaging system to install them for you.
The GNU Autotools sources can be can be downloaded from:
* https://ftp.gnu.org/gnu/autoconf/
* https://ftp.gnu.org/gnu/automake/
* https://ftp.gnu.org/gnu/libtool/
* And if you need it: https://ftp.gnu.org/gnu/m4/
It is certainly easiest to download/build/install all four of these
tools together. But note that PRRTE has no specific m4
requirements; it is only listed here because Autoconf requires minimum
versions of GNU m4. Hence, you may or may not *need* to actually
install a new version of GNU m4. That being said, if you are confused
or don't know, just install the latest GNU m4 with the rest of the GNU
Autotools and everything will work out fine.
Build and install ordering
--------------------------
You must build and install the GNU Autotools in the following order:
#. m4
#. Autoconf
#. Automake
#. Libtool
.. important:: You *must* install the last three tools (Autoconf,
Automake, Libtool) into the same prefix directory.
These three tools are somewhat inter-related, and if
they're going to be used together, they *must* share a
common installation prefix.
You can install m4 anywhere as long as it can be found in the path;
it may be convenient to install it in the same prefix as the other
three. Or you can use any recent-enough m4 that is in your path.
.. warning:: It is *strongly* encouraged that you do **not** install
your new versions over the OS-installed versions. This could cause
other things on your system to break. Instead, install into
``$HOME/local``, or ``/usr/local``, or wherever else you tend to
install "local" kinds of software.
In doing so, be sure to prefix your ``$PATH`` with the directory
where they are installed. For example, if you install into
``$HOME/local``, you may want to edit your shell startup file
(``.bashrc``, ``.cshrc``, ``.tcshrc``, etc.) to have something
like
.. code-block:: sh
# For bash/sh:
export PATH=$HOME/local/bin:$PATH
# For csh/tcsh:
set path = ($HOME/local/bin $path)
Ensure to set your ``$PATH`` *before* you configure/build/install
the four packages.
All four packages require two simple commands to build and
install:
.. code-block:: sh
shell$ cd M4_DIRECTORY
shell$ ./configure --prefix=PREFIX
shell$ make all install
.. important:: If you are using a shell that does not automatically
re-index the ``$PATH`` (e.g., the ``csh`` or ``tcsh``
shells), be sure to run the ``rehash`` command before
you install the next package so that the executables
that were just installed can be found by the next
package.
.. code-block:: sh
# Make $PATH be re-indexed if necessary, e.g., via "rehash"
shell$ cd AUTOCONF_DIRECTORY
shell$ ./configure --prefix=PREFIX
shell$ make all install
.. code-block:: sh
# Make $PATH be re-indexed if necessary, e.g., via "rehash"
shell$ cd AUTOMAKE_DIRECTORY
shell$ ./configure --prefix=PREFIX
shell$ make all install
.. code-block:: sh
# Make $PATH be re-indexed if necessary, e.g., via "rehash"
shell$ cd LIBTOOL_DIRECTORY
shell$ ./configure --prefix=PREFIX
shell$ make all install

View File

@@ -0,0 +1,18 @@
Developer's guide
=================
This section is here for those who are building/exploring the
internals of PRRTE in its source code form, most likely through a
developer's tree (i.e., a Git clone).
If you are simply *using* PRRTE, you probably don't need to read this
section.
.. toctree::
:maxdepth: 1
prerequisites.rst
git-github
gnu-autotools
sphinx
rst-for-markdown-expats.rst

View File

@@ -0,0 +1,132 @@
Prerequisites
=============
Compilers
---------
Although it should probably be assumed, you'll need a C compiler that
supports C99.
GNU Autotools
-------------
When building PRRTE from its repository sources, the GNU Autotools
must be installed (i.e., `GNU Autoconf
<https://www.gnu.org/software/autoconf/>`_, `GNU Automake
<https://www.gnu.org/software/automake/>`_, and `GNU Libtool
<https://www.gnu.org/software/libtool/>`_).
.. list-table::
:header-rows: 1
:widths: 10 10
* - Tool
- Minimum version
* - Autoconf
- |autoconf_min_version|
* - Automake
- |automake_min_version|
* - Libtool
- |libtool_min_version|
.. note:: The GNU Autotools are *not* required when building PRRTE
from distribution tarballs. PRRTE distribution tarballs
are bootstrapped such that end-users do not need to have the
GNU Autotools installed.
You can generally install GNU Autoconf, Automake, and Libtool via your
Linux distribution native package system, or via Homebrew or MacPorts
on MacOS. This usually "just works."
If you run into problems with the GNU Autotools, or need to download /
build them manually, see the :ref:`how to build and install GNU
Autotools section <developers-installing-autotools-label>` for much
more detail.
Perl
----
PRRTE still uses Perl for a few of its build scripts (most notably,
``autogen.pl``).
Generally speaking, any recent-ish release of Perl 5 should be
sufficient to correctly execute PRRTE's Perl scripts.
Flex
----
Minimum supported version: |flex_min_version|.
`Flex <https://github.com/westes/flex>`_ is used during the
compilation of a developer's checkout (it is not used to build
official distribution tarballs). Other flavors of lex are *not*
supported: given the choice of making parsing code portable between
all flavors of lex and doing more interesting work on PRRTE, we
greatly prefer the latter.
Note that no testing has been performed to see what the minimum
version of Flex is required by PRRTE. We suggest that you use
v2.5.35 at the earliest.
For now, PRRTE will allow developer builds with Flex |flex_min_version|. This
is primarily motivated by the fact that RedHat/CentOS 5 ships with
Flex 2.5.4. It is likely that someday PRRTE developer builds will
require Flex version >=2.5.35.
Note that the ``flex``-generated code generates some compiler warnings
on some platforms, but the warnings do not seem to be consistent or
uniform on all platforms, compilers, and flex versions. As such, we
have done little to try to remove those warnings.
If you do not have Flex installed and cannot easily install it via
your operating system's packaging system (to include Homebrew or
MacPorts on MacOS), see `the Flex Github repository
<https://github.com/westes/flex>`_.
Sphinx (and therefore Python)
-----------------------------
`Sphinx <https://www.sphinx-doc.org/>`_ is a Python-based tool used to
generate both the HTML version of the documentation (that you are
reading right now) and the nroff man pages.
Official PRRTE distribution tarballs contain pre-built HTML
documentation and man pages. This means that -- similar to the GNU
Autotools -- end users do not need to have Sphinx installed, but will
still have both the HTML documentation and man pages installed as part
of the normal configure / build / install process.
However, the HTML documentation and man pages are *not* stored in PRRTE's
Git repository; only the ReStructred Text source code of the
documentation is in the Git repository. Hence, if you are building
PRRTE from a Git clone, you will need Sphinx (and some Python
modules) in order to build the HTML documentation and man pages.
.. important:: Most systems do not have Sphinx and/or the required
Python modules installed by default. :ref:`See the
Installing Sphinx section
<developers-installing-sphinx-label>` for details on
how to install Sphinx and the required Python modules.
If ``configure`` is able to find Sphinx and the required Python
modules, it will automatically generate the HTML documentation and man
pages during the normal build procedure (i.e., during ``make all``).
If ``configure`` is *not* able to find Sphinx and/or the required
Python modules, it will simply skip building the documentation.
.. note:: If you have built/installed PRRTE from a Git clone and
unexpectedly did not have the man pages installed, it is
likely that you do not have Sphinx and/or the required
Python modules available.
:ref:`See the Installing Sphinx section
<developers-installing-sphinx-label>` for details on how
to install Sphinx and the required Python modules.
.. important:: ``make dist`` will fail if ``configure`` did not find
Sphinx and/or the required Python modules.
Specifically: if ``make dist`` is not able to generate
the most up-to-date HTML documentation and man pages,
you cannot build a distribution tarball. **This is an
intentional design decision.**

View File

@@ -0,0 +1,404 @@
.. _developers-rst-for-markdown-expats:
ReStructured Text for those who know Markdown
=============================================
You can think of RST as "Markdown, but much better". Meaning:
#. RST is basically just as simple as Markdown
#. But RST is both more precise, and has more available formatting
constructs (without getting crazy complicated)
The full Sphinx / RST documentation is available here:
https://www.sphinx-doc.org/en/master/index.html
If you're familiar with Markdown, the following sections contain some
tips to get you started in RST.
Whitespace and indenting
------------------------
* MD: Whitespace and indenting generally doesn't matter in most
cases. It does matter with bullets and sub bullets, but the rules
get pretty weird, and vary between different Markdown renderers.
* RST: **Indenting matters**. A lot. Just like Python. In
general, you indent all RST text to keep it within the same level.
For example, all this text would be a single paragraph
**Blank lines also matter**. A lot. You use blank lines to
delimit sections within an indenting level. For example, the
blank line before this paragraph denotes a paragraph break.
.. note:: RST was created by the Python community. Hence,
whitespace is quite important.
* Indenting matters
* Blank lines between content matter
Using a blank line and outdenting indicates the end of the previous
item. For example, this paragraph is not part of the MD/RST
bulleted list.
Fixed width font
----------------
* MD: Use single quotes:
.. code-block:: md
`hello world`
* RST: Use a pair of single quotes:
.. code-block:: rst
``hello world``
Italics
-------
* MD: ``*hello world*`` or ``_hello world_``
* RST: ``*hello world*``
Boldface
--------
* MD: ``**hello world**``
* RST: Same as MD
Chapter and section delimiters
------------------------------
* MD: Either use one or more pound signs (#, ##, ###) to the left of
the line of text, or underline the line of text with pound signs
* RST: Have a single line of text, underlined by non-ASCII
characters.
* The length of the underlying *must* be at least as long as the
line of text
* Which non-ASCII character is used for the underlying does not
matter, but the order in which they are used denotes chapters
/ sections / subsections / etc.
In these PRRTE docs, the sequence of underline characters we use
are:
.. code-block:: rst
Chapter 1: hello world
======================
.. code-block:: rst
Section 1: hello world
----------------------
.. code-block:: rst
Subsection 1: hello world
^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: rst
Subsubsection 1: hello world
++++++++++++++++++++++++++++
Meaning: underlines made of ``=`` denotes chapters, underlines
made of ``-`` denotes sections, underlines made of ``^`` denotes
subsections, and underlines made of ``+`` denote subsubsections.
Multi-line code/fixed-width font
--------------------------------
* MD: Use three single quotes to delimit blocks of text. Optionally
include a token keyword to denote the syntax highlighting to use
inside that block.
.. code-block:: md
```c
int main() { printf("Hello world\n"); return 0 }
```
* RST: Use ``.. code-block:: KEYWORD`` to start a section of code.
.. code-block:: rst
.. code-block:: c
int main() { printf("Hello world\n"); return 0 }
* KEYWORD indicates which syntax highlighting to use (e.g., ``c``,
``c++`` ``make``, ``sh``, ``ini``, ``Fortran``, ``diff``,
``python``, ``java``, ``rst``, ... etc.).
* KEYWORD can be omitted if no specific highlighting is to be
used.
* There *MUST* be a blank line after the ``code-block`` line.
* The lines in the block must be indented to the same column as the
first ``c`` in ``code-block``. For example:
.. code-block:: rst
.. code-block:: sh
shell$ tar xf prte-<version>.tar.bz2
shell$ cd prte-<version>
shell$ ./configure --prefix=<path> |& tee config.out
Note that the code block will be rendered at the same level as
where the first ``.`` of ``.. code-block::`` starts. In this
case, the example code block will be rendered in the bulleted
item.
Whereas this parargraph and code block will be outside of the
above bulleted list:
.. code-block:: sh
shell$ tar xf prte-<version>.tar.bz2
shell$ cd prte-<version>
shell$ ./configure --prefix=<path> |& tee config.out
# Fun note: the code-block can contain blank lines.
The code-block is terminated by a blank line and then outdent back
to the same level as the first ``.`` in ``.. code-block::``.
Un-numbered bullets
-------------------
* MD: Start lines with ``*`` or ``-``
* RST: Start lines with ``*``. You can wrap lines at the same
indenting level to make paragraphs in the same bullet.
Having a blank line and then more text at the same indenting level
makes another paragraph in the same bullet. You even put other
directives in this same indenting level.
* For example, you can start a sub bullet.
This text is the next paragraph in the same sub bullet.
.. code-block:: none
This is a verbatim code block within this same sub bullet.
More about code-blocks below.
This is the next paragraph (after the code block) in the same
sub bullet.
* If you start a new bullet, that terminates the previous bullet.
* You **MUST** put blank lines between bullets!
Numbered bullets:
-----------------
* MD: Start lines with ``#``
* RST: Start lines with ``#.``
.. important:: Yes, the trailing ``.`` is important
For example:
.. code-block:: rst
#. Item number 1
#. The second item
#. A third item
All the same rules for indentation apply as described above.
Comments
--------
* MD: Enclose content in ``<!--`` and ``-->`` (i.e., HTML comments,
but they are included in the output)
* RST: Start a line with two periods and a space.
For example, the following block is a comment, and will not be
included in the output:
.. code-block:: rst
.. Hello world. This is a comment. This whole block is a
comment. You can leave it here in the final document, and it
will not be included in the rendered output.
Your comment can even include blank lines. You terminate a
comment -- just like most other things in RST -- by a blank
line and then outdenting back out to the same column as the
first ".".
This line is no longer part of the comment.
Including files
---------------
* MD: You cannot include files in Markdown.
* RST: Use the ``.. include:: FILENAME`` directive. For example:
.. code-block:: rst
.. include:: features-extensions.rst
.. include:: features-java.rst
Those directives include those 2 files right here in this RST file.
.. important:: Chapter/section/subsection delimiters will be
continued in those files as part of rendering this
file.
Hyperlinks to URLs
------------------
* MD:
.. code-block:: md
[this is the link text](https://example.com/)
* RST:
.. code-block:: rst
`this is the link text <https://example.com/>`_
.. important:: Yes, the trailing underscore in RST is important.
It's a little weird, but you'll cope.
Hyperlinks to anchors
---------------------
* MD: I forget offhand how to make anchors and links to them in MD.
* RST: Use the ``:ref:`` directive.
Make an anchor like this:
.. code-block:: rst
.. _ANCHOR_NAME:
It *must* start with and underscore and end with a colon.
I've typically used anchor names that either begin with ``label-``
or end in ``-label`` to make it blatantly obvious that it's a
label. For example:
.. code-block:: rst
.. _building-and-installing-section-label:
Then you can use the ``:ref:`` directive:
.. code-block:: rst
be sure to see :ref:`the VPATH build section
<building-and-installing-section-label>`.
Hyperlinks to other (RST) pages
-------------------------------
* MD:
.. code-block:: md
[link text](page_name)
* RST: Use the ``:doc:`` directive.
General format:
.. code-block:: rst
:doc:`link text <PAGE_PATH>`
For example:
.. code-block:: rst
You should read :doc:`the Developer's Guide </developers>`.
The page path is relative to the ``docs`` dir in the PRRTE git tree.
Macros
------
* MD: There are no macros in Markdown.
* RST: We have defined a few PRRTE-specific macros in RST. You can
insert these macros anywhere in RST content text.
* ``|ompi_ver|`` is the full PRRTE version number, including
alpha/beta/rc/greek denotation. For example ``5.0.0rc1``.
* ``|ompi_series|`` is the major/minor PRRTE version, e.g.,
``5.0.x``.
.. important:: Think twice about hard-coding the PRRTE version
number or series when referring to the current
version or series. It can be appropriate to
hard-code an "x.y.0" version to denote a
generational epoch, but in most other cases, you
probably want to use one of the macros.
* ``|mdash|`` is a unicode long dash, an "em" dash. Use it instead
of ``--``.
* ``|rarrow|`` is a unicode right arrow. Use it instead of ``->``
or ``-->``.
Brightly-colored boxes
----------------------
* MD: There are no brightly-colored boxes in MD.
* RST: You can use various directives to make brightly-colored
"note" boxes (Called admonitions) in RST. For example:
.. important:: a green box with a "!" icon
Standard indenting rules apply for the content in the box. You
can have multiple lines and multiple paragraphs, for example.
Yippee.
* You can even have bullets.
.. code-block:: none
You can even have code blocks inside the bullet inside the
caution box.
* All the standard indenting rules apply.
.. hint:: a green box with a "!" icon
.. note:: a blue box with a "!" icon
.. caution:: an orange box with a "!" icon
.. attention:: an orange box with a "!" icon
.. warning:: an orange box with a "!" icon
.. error:: a red box with a "!" icon
.. danger:: a red box with a "!" icon
.. admonition:: Custom title
:class: tip
You can name this box whatever you want:
.. code-block:: rst
.. admonition:: Custom title
:class: tip
Content of your box here.
Custom text for this custom admonition. Note that the ``:class: <type>``
will change the coloring to the color for the basic admonition of that
type. E.g., ``:class: tip`` makes the box be green.

View File

@@ -0,0 +1,236 @@
.. _developers-installing-sphinx-label:
Installing and running Sphinx (building the PRRTE docs)
=======================================================
As with all content in the Developer's Guide, this section is only
relevant for developers who work in the PRRTE code base itself.
End users who install a binary PRRTE package or build from an
official PRRTE distribution tarball do not need to have Sphinx
installed.
Installing Python
-----------------
The `Sphinx tool <https://www.sphinx-doc.org/>`_ is written in Python,
and therefore needs to have Python available. As of late 2022, Sphinx
requires Python >= v3.7.
This documentation does not contain detailed instructions for
installing a Python version sufficient for using Sphinx. Consult your
local OS documentation for how to obtain Python >= v3.7, or search the
internet for further information.
Installing Sphinx
-----------------
`The Sphinx documentation
<https://www.sphinx-doc.org/en/master/usage/installation.html>`_
recommends installing Sphinx (and its required Python dependencies)
via ``pip``, which typically requires connectivity to the general
internet.
.. note:: If you are running on MacOS, you may be tempted to use
Homebrew or MacPorts to install Sphinx. The Sphinx documentation
recommends **against** this. Instead, you should use ``pip`` to
install Sphinx.
There are three general ways to install Sphinx; you only need one of
them.
Install Sphinx in a Python virtual environment
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The preferred method of installing Sphinx for PRRTE documentation
development is to install Sphinx in a Python virtual environment.
This places Sphinx in a sandbox that will not conflict with other
``pip``-installed Python modules. This example installs Sphinx and
other Python modules in the ``ompi-docs-venv`` tree under your PRRTE
Git clone directory:
.. code-block:: sh
# Create the Python virtual environment
shell$ cd TOP_OF_PRRTE_GIT_CLONE
shell$ python3 -m venv ompi-docs-venv
# Or: python3 -m virtualenv ompi-docs-venv
# Or: virtualenv --python=python3 ompi-docs-venv
# Activate the virtual environment
shell$ . ./ompi-docs-venv/bin/activate
# Notice that the shell prompt changes
# Now install the required Python modules
(ompi-docs-venv) shell$ pip3 install -r docs/requirements.txt
# Or: python3 -m pip install install -r docs/requirements.txt
Note that sourcing the ``activate`` script will change your prompt to
put the name of your virtual environment directory at the front, just
as a visual reminder that you are operating in a Python virtual
environment. You can run ``deactivate`` to leave the virtual
environment.
.. important:: You will need to source the ``activate`` script to put
Sphinx in your ``PATH`` *before* running ``configure``.
Install Sphinx globally
^^^^^^^^^^^^^^^^^^^^^^^
If Python virtual environments are not desirable on your system, you
can install Sphinx globally on your system (you may need to run with
root privileges):
.. code-block:: sh
shell$ cd TOP_OF_PRRTE_GIT_CLONE
shell$ pip3 install -r docs/requirements.txt
# Or: python3 -m pip install install -r docs/requirements.txt
This will install Sphinx and some Python modules required for building
the PRRTE documentation in a system-wide location.
This will likely install the ``sphinx-build`` executable in a location
that is already in your ``PATH``. If the location is not already in
your ``PATH``, then you need to add it to your ``PATH``.
.. important:: You will need to ensure that Sphinx is in your ``PATH``
*before* running ``configure``.
Install Sphinx locally
^^^^^^^^^^^^^^^^^^^^^^
If you cannot or do not want to install Sphinx globally on your
system, the following will install Sphinx somewhere under your
``$HOME``. It is the same ``pip`` command as shown above, but with
the addition of the ``--user`` flag (you should not need ``root``
permissions to run this command):
.. code-block:: sh
shell$ cd TOP_OF_PRRTE_GIT_CLONE
shell$ pip3 install --user -r docs/requirements.txt
# Or: python3 -m pip install install -r docs/requirements.txt
This will install Sphinx and some Python modules required for building
the PRRTE documentation in a system-wide location.
You will likely need to find the location where ``sphinx-build`` was
installed and add it to your ``PATH``.
.. note:: On MacOS, look for ``sphinx-build`` under
``$HOME/Library/Python/VERSION/bin`` (where ``VERSION`` is
the version number of Python). Or it may have installed to
``/usr/local/bin/sphinx-build``. YMMV.
.. important:: You will need to ensure that Sphinx is in your ``PATH``
*before* running ``configure``.
Running Sphinx
--------------
PRRTE's build environment is setup to invoke Sphinx automatically;
you should not need to invoke Sphinx manually.
.. important:: You will need to ensure that Sphinx is in your ``PATH``
*before* running ``configure``.
As long as ``configure`` found Sphinx, ``make`` will invoke Sphinx to
build the documentation. You can also run ``make`` directly in the
``docs/`` directory to build *just* the docs and skip building the
rest of the PRRTE software. This can be a huge time-saver when
iteratively writing, rendering, and viewing/proofing documentation.
.. note:: The fully-built HTML and man page docs are included in
official PRRTE distribution tarballs. Meaning: if you
download an official distribution PRRTE tarball,
the pre-built HTML and man page files are included
in the tarball.
Sphinx is a requirement for *developers* who want to build
the PRRTE docs. End users do *not* need to have Sphinx
available to build PRRTE or have its docs installed from
an official distribution tarball.
Sphinx execution time
^^^^^^^^^^^^^^^^^^^^^
Sphinx is stateful: subsequent runs can be significantly faster
because Sphinx will only re-render HTML files that have changes. This
is a nice time saver for PRRTE (e.g., if you are iterating over
writing the docs and running ``make`` to see how they rendered in
HTML).
.. caution:: Sphinx is only *somewhat* smart in its partial
re-rendering. If you change a title in an RST file, for
example, Sphinx will (by default) only re-render *that*
page. The Tables of Contents / left hand navigation on
other pages may not be updated.
You can always force a full re-render via:
.. code:: sh
shell$ cd docs
shell$ rm -rf _build
shell$ make
Checking Sphinx HTML links
^^^^^^^^^^^^^^^^^^^^^^^^^^
``make linkcheck`` will invoke Sphinx's functionality to check all the
external links in the documentation:
.. code:: sh
shell$ cd docs
shell$ make linkcheck
.. important:: You will need to be on a computer that has good access
to the internet when running this command.
Viewing docs locally
^^^^^^^^^^^^^^^^^^^^
Once you have built the docs in your local Git clone, you can view
them locally in the build tree:
#. Open ``docs/_build/html/index.html`` in a browser to view the HTML
docs. For example, on MacOS, the following command opens the build
tree docs in the default web browser:
.. code:: sh
shell$ open docs/_build/html/index.html
#. Use the ``man`` command to view the Nroff files in
``docs/_build/man`` (you may need to use an absolute or relative
filename to prevent ``man`` from using its search paths). For
example:
.. code:: sh
shell$ cd docs/_build/man
shell$ man ./prterun.1
Alternatively, you can view these files in their installed locations
after running ``make install``:
#. The HTML docs are installed (by default) to
``$prefix/share/doc/prte/html``. You can use a web browser to
open the ``index.html`` in that directory to view the docs locally.
For example, on MacOS, the following command opens the installed
docs in the default web browser:
.. code:: sh
shell$ open $prefix/share/doc/prte/html/index.html
#. The man pages are installed (by default) to ``$preix/share/man``.
If your man page search path includes this location, you can invoke
commands similar to the following to see the same content that you
see in these HTML pages:
.. code:: sh
shell$ man prterun

View File

@@ -0,0 +1,9 @@
Getting help
============
The best way to report bugs, send comments, or ask questions is to
post them on the `PRRTE GitHub issue tracker
<https://github.com/openpmix/prrte/issues>`_.
When submitting questions and problems, be sure to include as much
extra information as possible.

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-hosts-cli.rst

View File

@@ -0,0 +1,4 @@
Hostfiles
=========
.. include:: /prrte-rst-content/detail-hostfiles.rst

View File

@@ -0,0 +1,19 @@
Host specification
==================
PRRTE identifies hosts on which to launch processes by:
#. A Resource Manager (RM) telling PRRTE which hosts to use
#. The user providing a hostfile (also sometimes called a "machine
file")
#. The user providing a list of hosts on the command line
The sections below describe each of these in more detail.
.. toctree::
:maxdepth: 1
rm
hostfiles
cli
relative-indexing

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-hosts-relative-indexing.rst

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-hosts-rm.rst

View File

@@ -0,0 +1,12 @@
How Things Work
===============
This section explains how some of the functions inside
PRRTE perform their job. If you have questions about, for
example, how session directory trees work, then you will
find information on that subject here.
.. toctree::
:maxdepth: 2
session_dirs.rst

View File

@@ -0,0 +1,115 @@
.. _session-dir-detail-label:
Session Directories
===================
In general, servers, tools, and application processes all have access to their own ``session directory`` - a location where scratch files can be safely placed with a reasonable guarantee of automatic cleanup upon termination. Session directories provide a safe location (i.e., in a temporary file system and guaranteed not to conflict with other sessions/jobs/applications) for executables to use when creating scratch files such as shared memory backing files and rendezvous files. PMIx and PRRTE also provide a reasonable guarantee that any files and/or subdirectories created under the specified location will be automatically cleaned up at finalize and/or termination. In this case, ``reasonable`` means that we will do our best to remove all files and subdirectories, but cannot fully guarantee removal in situations outside of our control (e.g., being forcibly terminated via `SIGKILL`).
.. note:: In general, the host (e.g., PRRTE) is responsible for creating session
directories. In some cases, PMIx creates a limited set of session
directories if the host does not provide them - e.g., in the case of a
self-launched tool - for storing contact information. This is outlined
below.
The following attributes can be used to pass session directory information to the PMIx library:
* ``PMIX_SYSTEM_TMPDIR``: temporary directory for this system (typically ``/tmp`` for Linux systems).
The PMIx server will place tool rendezvous points and contact info in this location. In the
absence of this attribute during ``PMIx_Init`` (or the server/tool version), the PMIx library
will first look for the ``TMPDIR`` envar, then ``TEMP``, and finally ``TMP`` - if none of
those are found, the library will default to the ``/tmp`` location.
* ``PMIX_SERVER_TMPDIR``: session directory where the PMIx server will place client rendezvous
points and contact info. If not provided, the library will first look for the ``PMIX_SERVER_TMPDIR``
envar, then ``TMPDIR``, ``TEMP``, and finally ``TMP`` - if none of those are found, the
library will default to the ``/tmp`` location.
* ``PMIX_TMPDIR``: top-level temporary directory assigned to a session. Often equated to
``PMIX_SERVER_TMPDIR`` by host environments.
* ``PMIX_NSDIR``: session directory assigned to a namespace. Usually placed underneath the
``PMIX_SERVER_TMPDIR`` and given a name based on the namespace itself.
* ``PMIX_PROCDIR``: session directory assigned to an individual process. Usually placed underneath
the ``PMIX_NSDIR`` assigned to the namespace of the process, and given a string name equivalent
to the rank of the process.
* ``PMIX_LAUNCHER_RENDEZVOUS_FILE``: the full path name of a file wherein a tool shall output its
connection information - e.g., a launcher to store contact information so that a debugger
can attach to it.
* ``PMIX_TDIR_RMCLEAN``: the host environment (often known as the "resource manager" or "RM") will
cleanup the session directories. In the absence of this attribute, the PMIx library will
remove all files in any session directory it created and then remove the directory itself.
These same attributes can be used in calls to ``PMIx_Get`` by application processes to retrieve
the session directory locations for their own use.
Client Session Directories
--------------------------
The PMIx client library does not create its own session directories as it does not publish
contact information. Host daemons often create one or more session directory levels for use
by client application processes (e.g., for storing shared memory backing files) - the location
of those directories is passed to clients using the above attributes.
As the client library never creates session directories, it does not perform any cleanup of
the session directory tree.
Tool and Server Session Directories
-----------------------------------
The PMIx library utilizes appropriate session directory locations to store one or more
"rendezvous files" - i.e., files containing connection information. Note that the library does not
always create all levels of the session directory tree, although the process
itself can of course create directories as it sees fit. Only the directories that (a) are required
for generating the particular rendezvous file, and (b) do not already exist are created. Only
directories actually created by the library are cleaned up and removed upon finalization.
The following rendezvous files are provided:
* if ``PMIX_LAUNCHER_RENDEZVOUS_FILE`` is given (either via an attribute to an "init" function
or as an envar), then the specified file (including any required path elements) will be created.
* if the server is designated as a "system" server (i.e., the ``PMIX_SERVER_SYSTEM_SUPPORT`` attribute
was provided to ``PMIx_server_init``), then a rendezvous file named "pmix.sys.<hostname>" will be
created in the ``PMIX_SYSTEM_TMPDIR`` location.
* if the server is designated as a "session" server (i.e., the ``PMIX_SERVER_SESSION_SUPPORT`` attribute
was provided to ``PMIx_server_init``), then a rendezvous file named "pmix.sys.<hostname>" will be
created in the ``PMIX_SERVER_TMPDIR`` location.
* if the server declares that it will support tool connections (i.e., the ``PMIX_SERVER_TOOL_SUPPORT``
attribute was provided to ``PMIx_server_init``), then the following rendezvous files will be created
under the ``PMIX_SERVER_TMPDIR`` location:
* a PID file: "pmix.<hostname>.<pid>"
* a namespace file using the nspace of the server: "pmix.<hostname>.<nspace>"
* if the server is designated as a "scheduler" (i.e., the ``PMIX_SERVER_SCHEDULER`` attribute
was provided to ``PMIx_server_init``), then a rendezvous file named "pmix.sched.<hostname>" will be
created in the ``PMIX_SYSTEM_TMPDIR`` location.
* if the server is designated as a "system controller" (i.e., the ``PMIX_SERVER_SYS_CONTROLLER`` attribute
was provided to ``PMIx_server_init``), then a rendezvous file named "pmix.sysctrlr.<hostname>" will be
created in the ``PMIX_SYSTEM_TMPDIR`` location.
.. note:: The above rendezvous files are additive - i.e., generating any one of the files has
no bearing on whether another file will be output. Thus, a single server could
generate anywhere from one to five (or more) rendezvous files spanning several
directory levels.
.. warning:: There is a potential conflict in rendezvous file names - e.g., if multiple processes
declare themselves to be a "session" server on the same node. The format of the
names used by PMIx are intended to support tool connection in the absence of specific
connection directives - i.e., they provide a means by which PMIx can search for and
find the rendezvous file for a particular type of process without requiring the user
to manually identify it. Thus, a tool can request connection to the "system controller"
without necessarily knowing the PID of that process and PMIx can facilitate the
connection. As a result, only one system server can be operating on a node at a time.
This is also (independently) true for schedulers and system controllers.

View File

@@ -0,0 +1,44 @@
PMIx Reference Runtime Environment (PRRTE) |prte_ver|
=====================================================
The project is formally referred to in documentation by "PRRTE", and
the GitHub repository is ``prrte``.
.. note:: We have found that most users do not like typing the two
consecutive ``r`` letters in the name. Hence, all of the
internal API symbols, environment variables, MCA frameworks,
and CLI executables all use the abbreviated ``prte`` (one
``r``, not two) for convenience.
Documentation locations
=======================
This documentation can be found in the following locations:
* On the web: https://docs.prrte.org/
* In the tarball: ``docs/_build/html/index.html``
* Installed: ``$prefix/share/doc/prrte/html/index.html``
Table of contents
=================
.. toctree::
:maxdepth: 2
:numbered:
quickstart
release-notes
getting-help
install
configuration
how-things-work/index
hosts/index
placement/index
notifications
session-directory
developers/index
contributing
license
man/index
versions
news/index

View File

@@ -0,0 +1,92 @@
Installing PRRTE
================
For More Information
--------------------
This file is a *very* short overview of building and installing the
PMIx Reference RunTime Environment (PRRTE). More information is
available `in the FAQ section on the PRRTE web site
<https://github.com/openpmix/prrte>`_.
Minimum PMIx version
--------------------
The ``configure`` script in PRRTE |prte_ver| must be able to find an
OpenPMIx installation that is |pmix_min_version| or higher. If
``configure`` cannot find a suitable OpenPMIx version, it will abort
with an error.
If OpenPMIx cannot be found in default preprocessor and linker search
paths, you can specify the ``--with-pmix=DIR`` CLI option to tell
``configure`` where to find it.
Developer Builds
----------------
If you have checked out a DEVELOPER'S COPY of PRRTE (i.e., you checked
out from Git), you should read the :doc:`Developer's Guide
</developers/index>` section before attempting to build PRRTE. You
must then run:
.. code-block:: sh
shell$ ./autogen.pl
You will need very recent versions of GNU Autoconf, Automake, and
Libtool. If ``autogen.pl`` fails, read the :doc:`Developer's Guide
</developers/index>`. If anything else fails, read the
:doc:`Developer's Guide </developers/index>`. Finally, we suggest
reading the :doc:`Developer's Guide </developers/index>`.
.. note:: Developer's copies of PRRTE typically include a large
performance penalty at run-time because of extra debugging
overhead.
User Builds
-----------
Building PRRTE is typically a combination of running ``configure``
and ``make``. Execute the following commands to install the PRRTE
system from within the directory at the top of the tree:
.. code-block:: sh
shell$ ./configure --prefix=/where/to/install
[...lots of output...]
shell$ make all install
If you need special access to install, then you can execute ``make
all`` as a user with write permissions in the build tree, and a
separate ``make install`` as a user with write permissions to the
install tree.
Compiling support for specific compilers and environments may require
additional command line flags when running ``configure``. Note that
VPATH builds are fully supported. For example:
.. code-block:: sh
shell$ tar xf prrte-X.Y.Z.tar.gz
shell$ cd prrte-X.Y.Z
shell$ mkdir build
shell$ cd build
shell$ ../configure ...your options...
[...lots of output...]
shell$ make all install
Parallel builds are also supported (although some versions of ``make``,
such as GNU make, will only use the first target listed on the command
line when executable parallel builds). For example (assume GNU make):
.. code-block:: sh
shell$ make -j 4 all
[...lots of output...]
shell$ make install
Parallel make is generally only helpful in the build phase; the
installation process is mostly serial and does not benefit much from
parallel make.

View File

@@ -0,0 +1,5 @@
License
=========
.. literalinclude:: ../LICENSE
:language: text

View File

@@ -0,0 +1,21 @@
PRRTE manual pages
==================
All of the content in this section is also installed as individual
manual ("man") pages in a PRRTE installation. If your man page search
path includes the location where PRRTE installed its man pages (which
defaults to ``$prefix/share/man``), you can invoke commands similar to
the following to see the same content that you see in these HTML
pages:
.. code:: sh
shell$ man prterun
PRRTE man pages, by section:
.. toctree::
:maxdepth: 1
man1/index
man5/index

View File

@@ -0,0 +1,12 @@
Commands (section 1)
====================
.. toctree::
:maxdepth: 1
prte.1.rst
prte_info.1.rst
prted.1.rst
prterun.1.rst
prun.1.rst
pterm.1.rst

View File

@@ -0,0 +1,29 @@
.. _man1-prte:
prte
====
prte |mdash| instantiate an instance of PRRTE DVM
SYNOPSIS
--------
.. code:: sh
shell$ prte ...options...
DESCRIPTION
-----------
``prte`` instantiates an instance of the PMIx Reference Run Time
Environment (PRRTE) distributed virtual machine (DVM).
Extensive help documentation for this command is provided through
``prte --help [topic]``.
At least for now, that content is not available in man page form.
Pull requests to add all the content (via repeatable infrastructure)
would be greatly appreciated.
.. seealso::
:ref:`prterun(1) <man1-prterun>`

View File

@@ -0,0 +1,29 @@
.. _man1-prte_info:
prte_info
=========
prte_info |mdash| Provide detailed information on your PRRTE installation
SYNOPSIS
--------
.. code:: sh
prte_info ...options...
DESCRIPTION
-----------
``prte_info`` provide detailed information on your PMIx Reference Run
Time (PRRTE) installation.
Extensive help documentation for this command is provided through
``prte_info --help [topic]``.
At least for now, that content is not available in man page form.
Pull requests to add all the content (via repeatable infrastructure)
would be greatly appreciated.
.. seealso::
:ref:`prte(1) <man1-prte>`

View File

@@ -0,0 +1,29 @@
.. _man1-prted:
prted
=====
prted |mdash| helper daemon for PRRTE
SYNOPSIS
--------
.. code:: sh
shell$ prted ...options...
DESCRIPTION
-----------
``prted`` is the back end helper daemon for PMIx Reference Runtime
Environment (PRRTE).
Extensive help documentation for this command is provided through
``prted --help [topic]``.
At least for now, that content is not available in man page form.
Pull requests to add all the content (via repeatable infrastructure)
would be greatly appreciated.
.. seealso::
:ref:`prte(1) <man1-prte>`

View File

@@ -0,0 +1,49 @@
.. _man1-prterun:
prterun
========
prterun |mdash| launch an application with a default DVM
SYNOPSIS
--------
.. code:: sh
shell$ prterun ...options...
DESCRIPTION
-----------
``prterun`` submits a job to the PMIx Reference Runtime Environment
(PRRTE). A default set of distributed virtual
machine (DVM) options are used; use :ref:`prun(1) <man1-prun>` if you
wish to utilize specific DVM options.
Much of this same help documentation for this command is also provided
through ``prun --help [topic]``.
.. admonition:: PRRTE Docs TODO
:class: error
Need to write this man page.
COMMAND LINE OPTIONS
--------------------
.. TODO - add in all supported CLI
DEPRECATED COMMAND LINE OPTIONS
-------------------------------
.. TODO - check for deprecated CLI and add those here
EXIT STATUS
-----------
Description of the various exit statuses of this command.
.. seealso::
:ref:`prte(1) <man1-prte>`

View File

@@ -0,0 +1,44 @@
.. _man1-prun:
prun
=====
prun |mdash| launch an application
SYNOPSIS
--------
.. code:: sh
shell$ prun ...options...
DESCRIPTION
-----------
``prun`` submits a job to the PMIx Reference Runtime Environment
(PRRTE). The user has control over various distributed virtual
machine (DVM) options.
Much of this same help documentation for this command is also provided
through ``prun --help [topic]``.
.. admonition:: PRRTE Docs TODO
:class: error
Need to write this man page.
COMMAND LINE OPTIONS
--------------------
The following command line options are supported:
.. TODO - add in all supported CLI
DEPRECATED COMMAND LINE OPTIONS
-------------------------------
.. TODO - check for deprecated CLI and add those here
.. seealso::
:ref:`prte(1) <man1-prte>`

View File

@@ -0,0 +1,29 @@
.. _man1-pterm:
pterm
=====
pterm |mdash| terminate an instance of the PRRTE DVM
SYNOPSIS
--------
.. code:: sh
shell$ pterm ...options...
DESCRIPTION
-----------
``pterm`` terminates an instance of the PMIx Reference Runtime
Environment (PRRTE) distributed virtual machine (DVM).
Extensive help documentation for this command is provided through
``pterm --help [topic]``.
At least for now, that content is not available in man page form.
Pull requests to add all the content (via repeatable infrastructure)
would be greatly appreciated.
.. seealso::
:ref:`prte(1) <man1-prte>`

View File

@@ -0,0 +1,7 @@
Config file manual pages (section 5)
====================================
.. toctree::
:maxdepth: 1
prte.5.rst

View File

@@ -0,0 +1,11 @@
.. _man5-prte:
prte
====
PMIx Reference Runtime Environment (PRRTE) - General information
.. admonition:: PRRTE Docs TODO
:class: error
Need to write this man page.

View File

@@ -0,0 +1,40 @@
.. PMIx NEWS
This page serves as a high level NEWS page which includes NEWS
from various PMIx series
News
====
This file contains the main features as well as overviews of specific
bug fixes (and other actions) for each version of PRRTE since
version 1.0.
PRRTE typically releases two separate version
series simultaneously. Since these series have different goals and
are semi-independent of each other, a single NEWS-worthy item may be
introduced into different series at different times. For example,
feature F was introduced in the vA.B series at version vA.B.C, and was
later introduced into the vX.Y series at vX.Y.Z.
The first time feature F is released, the item will be listed in the
vA.B.C section, denoted as:
(** also to appear: X.Y.Z) -- indicating that this item is also
likely to be included in future release
version vX.Y.Z.
When vX.Y.Z is later released, the same NEWS-worthy item will also be
included in the vX.Y.Z section and be denoted as:
(** also appeared: A.B.C) -- indicating that this item was previously
included in release version vA.B.C.
:ref:`search`
.. toctree::
:maxdepth: 1
news-v3.x
news-v2.x
news-v1.x

View File

@@ -0,0 +1,10 @@
PRRTE v1.x series
=================
This file contains all the NEWS updates for all the PRTE v1.x
series, in reverse chronological order.
1.0.0 -- 17 Jul 2019
----------------------
Initial public release - not production intended

View File

@@ -0,0 +1,128 @@
PRRTE v2.x series
=================
This file contains all the NEWS updates for all the PRRTE v2.x
series, in reverse chronological order.
2.0.2 -- 11 Feb 2022
--------------------
.. important:: This release contains a workaround that resolves the prior
conflict with HWLOC versions 2.5.0 through 2.7.0 (inclusive).
Those versions of HWLOC are now supported.
- PR #1197: Cleanup a bit in prep for PMIx v5 release
- PR #1195: Remove HWLOC version block
- PR #1190: Add missing examples to tarball
- PR #1189: Ensure an error gets reported when rankfile fails
2.0.1 -- 1 Feb 2022
---------------------
.. important:: As of v2.0.1, PRRTE no longer has a dependency on "pandoc"
for building and installing man pages.
.. important:: PRRTE has identified a bug in HWLOC versions 2.5.0 thru
2.7.0 (inclusive) that causes PMIx to segfault during certain
operations. We have worked with the HWLOC developers to fix
that problem, and the fix will be included beginning in HWLOC
version 2.7.1. Accordingly, PRRTE now checks for the problem
HWLOC versions and will error out of configure if they are
encountered.
- PR #1185 and 1186: Update HWLOC version detection
- Reject versions 2.5.0-2.7.0, inclusive
- PR #1183: Always build the PBS scheduler support
- PR #1182: Cleanup handling of allocated node names
- PR #1169: Updates for rc5
- Enable support for PMIX_IOF_OUTPUT_RAW attribute
- Update NEWS
- PR #1167: Updates
- Be more flexible in library handling
- Update libevent/hwloc handling to match PMIx
- Remove event header defines
- Minor cleanups and ensure no local IOF copy
when persistent
- change the pcc wrapper compiler to a symlink
to pmixcc
- Cleanup code a bit
- Select all adapters with IPv4 addresses within
specified subnet ranges
- validate input for mpiexec --with-ft options
- PR #1158: Updates
- Fix uninitialized variable
- Update NEWS
- PR #1157: Fix brackets around code clause that caused
erroneous "unable to find tune file" error
- PR #1156: Handle default param case for HWT CPUs
- PR #1155: Cleanup qualifier detection for mapping policy
- PR #1154: Increase speed of rank computation
- Remove spurious break in loop
- PR #1153: Ensure the direct-multi test ranks-by slot
- PR #1151: Revamp map-by NUMA support
- PR #1150: Tranlate legacy OMPI params
- PR #1147: Updates
- Minor infrastructure and example cleanup
- Allow external caller to set prte_tool_basename
- Restore support for map/rank/bind by NUMA domains
- Standardize on use of HWLOC_OBJ_NUMANODE
- Activate the colocation code and debug it
- Update man pages
- PR #1145: delete use of PMIX_CHECK_BROKEN_QSORT refs
- PR #1137: Protect against PMIx v4.1.1-only definitions
- PR #1135: Final update v2.0.1 for rc3
- Show MCA base params in prte_info
- Silence variety of warnings
- Start enabling picky compilers when requested
- Remove unused variables in BMG component
- Increase verbosity of detected error
- Remove broken qsort support
- Add a legacy example
- Don't specify parent ID from tool
- PR #1104: Update v2.0.1 for rc3
- Silence Coverity warnings
- Update portable platform file
- Only order DVM termination once
- Abort configure if gcc is <= 4.8.1
- Fix segmentation fault caused by wrong size for vpids buffer
- PR #1097: Update v2.0.1 for rc2
- Update NEWS and VERSION
- Circulate and report local completion status for collectives
- Don't require pandoc to make a tarball
- Do not register xml topos
- Remove the Markdown source files for PRRTE man pages
- PR #1089: Updates
- Cleanup timeout support to differentiate spawn vs execution time limits
- PR #1086: Multiple commits
- Use the info list array feature to construct registration data
- Fix path check for pandoc
- PR #1083: Multiple commits
- Add MCA param to control device distance computation
- Correctly report --output-directory and --output-filename as deprecated
- Check for libevent minimum 2.0.21
- Properly handle generic "orte" MCA params
- Cleanups associated with IOF operations
- Avoid use of MCA params for singleton and report-uri
- autogen.pl: ignore all excluded components
- Don't allow PRRTE IOF to block during delivery
- Update ignores to include Coverity working directory
- Ensure we hold the IOF data until the PMIx library is done with it
- Add an "unlock" call to balance the code
- Use correct ninfo when passing into APIs
- Don't locally output stdout/err if prterun has a parent
2.0.0 -- 29 Jul 2021
--------------------
.. important:: This is the initial production release of the PRRTE
software system. It contains full support of the
PMIx v4.1 Standard plus extensions as provided by
OpenPMIx v4.1. It therefore requires support from
that release or above.
Delineating all the changes from the original v1.0.0 tarball would be
overwhelming. The original tarball was provided solely as a means for
packagers to prepare for the eventual production version and was not
intended for general use. As expected, the code base has been extensively
revised/rewritten since that time.
Further changes shall be tracked here in follow-on releases.

View File

@@ -0,0 +1,383 @@
PRRTE v3.x series
=================
This file contains all the NEWS updates for the PRRTE v3.x
series, in reverse chronological order.
3.0.8 -- 15 Dec 2024
--------------------
- PR #2103: Final update for release
- PR #2102: Remove stale config .m4 files
- PR #2100: Update NEWS and VERSION
- PR #2099: maintain correct ref count of child jobs
- PR #2097: Correctly parse map-by modifiers
- PR #2086: Propertly compute number of procs when not given
- PR #2082: Multiple commits
- Enclose XML output in a high-level tag
- Add support for show_help XML output
- Properly build the nidmap
- PR #2076: Multiple commits
- Register the singleton's nspace with the PMIx server
- Fix data type declaration in data server
3.0.7 -- 13 Nov 2024
--------------------
.. important:: This release represents the expected end of
the v3.0 series. Any follow-on bug fixes will
be committed to the release branch, but are
unlikely to generate an official release
tarball.
- PR #2067: Update NEWS and VERSION for final release
- PR #2064: Multiple commits
- Update help message to PRTE MCA parameter handling
- Fix typo in Makefile
- Fix rankfile use of relative node indexing
- PR #2060: Update NEWS and VERSION for release
- PR #2059: Protect against old PMIx versions
- PR #2057: Fix support for hetero LSF environments
- PR #2049: Cleanup show-help files
- PR #2047: Implement the PMIX_JOB_CHILD_SEP support
- PR #2044: Multiple commits
- Add a threaded client example
- Restore parsing of OMPI param files
- PR #2039: Unlock stdin target
- PR #2037: Pull a couple of fixes from master branch
- PR #2034: Fix deprecation warnings for ppr on socket objects
- PR #2032: Multiple commits
- avoid warnings (as errors) spots (init vars, etc.)
- remove unused Level var
- init installdirs structure (avoids warn-as-error)
- Pay attention to interface include/exclude params
- Protect against the envar version of the Slurm custom args param
- PR #2018: fix support for MPIEXEC_TIMEOUT
- PR #2017: Update prte_portable_platform_real.h from upstream gasnet
- PR #2015: Always have show-help available
- PR #2013: Remove unused yaml
- PR #2011: Cleanup show help formatting
- PR #2009: docs: update for Python 3.12
- PR #2007: Fix a segfault when no arguments are provided
- PR #2005: Multiple commits
- Remove unused function
- Revise cmd line parsing to handle special case
- PR #2002: Update OAC to latest HEAD
- PR #2000: Use the PMIx functions to check params
- PR #1998: Protect against LTO optimizer
- PR #1996: Read the Docs updates
- PR #1994: Provide a warning of potentially unknown Slurm params
3.0.6 -- 8 Jul 2024
-------------------
- PR #1992: Update NEWS and VERSION for release
- PR #1991: Multiple commits
- Protect against missing HWLOC object types
- Minor fixes to allow compile with pre-stone age HWLOC
- PR #1988: Github action: bring back MacOS builds
- PR #1986: Tailored backport of "various fixes for singleton support"
- PR #1985: Multiple commits
- Don't strip quotes from cmd line entries
- Update tar format to tar-pax
- PR #1983: Check the runtime version of PMIx
- PR #1979: Multiple commits
- Cleanup issues surfaced by devel-check
- Cleanup unused var warning
- Add CI build with clang
- Enable devel-check by default in Git repos
- Stop warning on LSF detection when not requested
- Silence warning
- MPI 4.1: add support for memory-alloc-kinds
- Remove MacOS CI builds
- Add support for PMIX_MEM_ALLOC_KIND
- PR #1971: Remove stale resilience document
- PR #1968: Try to improve an error message a bit
- PR #1966: Fix typo
- PR #1964: Repair the binding algorithm
- PR #1962: Correct name of help file for --hostfile
- PR #1959: Multiple commits
- Update the allocation simulator
- Use of pmix_getline from PMIx started in v4.2.5
- PR #1956: Multiple commits
- Allow execution without an active plm component
- Fix the binding algorithm to handle partial disablement
3.0.5 -- 21 Mar 2024
--------------------
- PR #1952: Multiple commits
- Update docs
- Update PMIx-related configure code
- update the hwloc utility code
- Add missing doc
- PR #1949: Update VERSION and NEWS for release
- PR #1946: Correct deprecation translation for use-hwthread-cpus
- PR #1936: Add missing show_help text
- PR #1933: Check for appfile and ingest it if found
- PR #1931: Multiple commits
- Fix testing of suicide for daemons
- Fix daemon suicide and preserve output files
- Remove unused MCA param
- Only trigger job failed to start once
- Add "close stale issues" actions
- oac: strengthen Sphinx check
- Revamp the session directory system
- guard against possible segfault in prted
3.0.4 -- 4 Feb 2024
-------------------
- PR #1918: Multiple commits
- Support query for number of available slots
- Add an option '--allow-run-as-root' into prted
- Update the Python regex for doc build
- PR #1910: Fix the map-by pe-list option
- PR #1908: Multiple commits
- Use pmix_path_nfs to detect shared file systems
- Remove debug
- Remove extra character at end of error messages
- psets: fix some problems with PMIX_QUERY_PSET_MEMBERSHIP query.
3.0.3 -- 19 Dec 2023
--------------------
- PR #1893: Check for stdatomic.h
- PR #1891: add nodes to job data for ALL jobs included in the launch message
- PR #1888: Multiple commits
- Minor tweaks of cmd line processing
- Preserve the clichk test code for future use
- PR #1884: Multiple commits
- Fix copy/paste error
- Remove daemonize option from prterun
- Fix the ras simulator module
- Preserve backward compatibility
- Check the PMIx version for min required
- Correct min version for pmix_getline util
- PR #1877: Multiple commits
- Remove the "refresh" key before requesting dmodx from PMIx server
- Shift a code block to enable MCA param directive for ppr mapping
- PR #1870: Multiple commits
- Begin to restore the detailed help topics
- docs: add prrte-rst-content to conf.py's exclude_patterns
- src/docs: update README.txt
- Consolidate non-component show_help files
- Add missing file
- PR #1865: Fix the seq mapper
- PR #1860: Multiple commits
- prte.c: a prefix of "/" is ok
- Correctly translate the plm_rsh MCA params
- Fix add-hostfile and add-host operations
- Add print functions for node, job, and proc flags
- Add missing "acquire_object"
- Fix handling of "--" in cmd line
- Use global PRRTE event base for sigchld callback
- Remove the event base param to prte_wait_cb
- Fix OMPI cmd line processing
- PR #1846: Multiple commits
- Restore the prun help strings
- Restore prte_info show help topics
- Recover the pterm show-help strings
- PR #1843: Avoid adding NULL prefix value to app attributes
- PR #1841: Multiple commits
- Error out of attempts for 32-bit builds
- Convert OMPI MCA params from legacy orte
- Fix display of DVM allocation
3.0.2 -- 23 Oct 2023
--------------------
- PR #1832: Update NEWS for release
- PR #1831: Silence error log
- PR #1829: Multiple commits
- docs/show-help-files: Re-enable Sphinx warning checks
- Correctly forward stdin to remote procs
- PR #1826: Multiple commits
- docs: document minimum PMIx version needed
- prte_setup_pmix.m4: use PMIx min version from VERSION
- Make checking min versions consistent
- Update CPPFLAGS for HWLOC config tests
- PR #1822: Fix rpmbuild error
- PR #1821: Roll VERSION to v3.0.2
3.0.1 -- 27 Sep 2023
--------------------
.. important:: This release contains a major revision of the PRRTE
documentation infrastructure. Accordingly, the various
documents may contain some number of errors and should
be regarded as a work-in-progress. We apologize in
advance for any inconvenience this may create, and will
continue to improve and correct the documents in future
releases.
- PR #1818: Update VERSION and rename news file
- PR #1816: Correct confusion over help file names
- PR #1814: Update NEWS infrastructure
- PR #1810: Blacklist the HWLOC GL component to avoid deadlock
- PR #1807: Multiple commits
- src/docs/show-help-files/Makefile.am: fix syntax
- docs: Fix up several minor bugs that showed up via CI
- Prototype Github Actions for PRRTE CI
- PR #1800: Keep trying to find the solution to the docs problem
- PR #1798: Keep trying to fix this Python stuff
- PR #1796: Don't ignore failure to create directory
- PR #1793: build-dummy-ini-files: Be safe for Python 2
- PR #1791: Update to track master branch
- PR #1787: Add support for dynamic definition of process sets
- PR #1784: Multiple commits
- docs: fix HTML word wapping in table cells
- Support fix for OMPI Github issue #11532
- Fix binding to multiple pe's
- Fix typos in the --enable-dlopen support
- Fix typo of variable name (PRRTE->PRTE)
- Remove Doxygen
- PR #1766: Multiple commits
- Update ignores
- mca/rmaps: impute process count when np is not set
- Complete cleanup of map/bind default settings
- PR #1762: v3.0: .github/workflows: update actions versions
- PR #1752: [v3.0] rmaps/base: remove call to hwloc_bitmap_andnot() in bind_generic()
- PR #1747: Respect "--" marker
- PR #1741: [v3.0] RTD: Add .readthedocs.yaml file
- PR #1737: Multiple commits
- Add debug output in fence upcall
- Silence TSan data race warning.
- PR #1734: v3.0: backport fixes for ompi v5.0 submodule update
- PR #1727: Protect against bad ppr directives
- PR #1724: Fix one more place
- PR #1721: Just disable the xml map output for ancient hwloc
- PR #1718: Protect against ancient hwloc versions
- PR #1714: Multiple commits
- Parsable output in an XML format
- Support odd topologies and relax pe-binding rules
- Cleanup some formatting and unnecessary debug
- PR #1705: Allow specifying ppr as the default mapping policy
- PR #1702: Multiple commits
- Recoverable jobs may report more than one proc error over the lifetime
- Fix double-counting of failed procs in recoverable jobs
- PR #1700: Update headers for rc2
- PR #1696: Always set waitpid-fired flag when proc exits
- PR #1694: Fix passing of envars for spawn
- PR #1692: Multiple commits
- Plug small memory leaks.
- Plug memory leaks.
- Adhere to project's variable declaration convention.
- Cleanup initial implementation of allocate and session ctrl
- Protect one more place for Session_control
- Fix the routing for non-tree-spawn launch
- Cleanup prte_info output
- Ensure we exit cleanly when a daemon fails to start
- Store prted URI under correct name
- Remove duplicate computation of routing tree
- Minor cleanup of verbose output
- Fix typo
- Send direct to HNP if we don't know a route
- Cleanup some mangled formatting
- Cleanup some debug output
- Update the pmix server integration
- PR #1686: Update config/oac submodule
- PR #1682: Multiple commits
- Remove wrapper definitions
- Extend example to check for sessionID and jobID
- PR #1678: Multiple commits
- add --debug-daemon to prted options
- Add the rml and routed types to prte_info array
- PR #1674: Ensure cmd line errors provide error messages
- PR #1672: Multiple commits
- Correct default binding for map-by node/slot
- Provide better error message for cross-package binding
- Add missing command line directives
- Fix minor issues found in tests.
- Silence compiler warning in test/connect.
- Silence compiler warnings in examples.
- Use exit macros in example dmodex.
- Remove antiquated code that can cause problems
- Update sphinx requirements
- Remove the PMIX_SIZE_ESTIMATE support
- PR #1660: Correct function name when using older hwloc versions
- PR #1658: Multiple commits
- Properly handle overload-allowed
- Define MIN for environments that lack it
- Fix a typo in the README, fixes #1645
- docs: fix Sphinx parsing error
- PR #1644: Multiple commits
- Add a spawn_multiple test
- Provide an estimate of the size of registration data
- Provide size estimates for collective operations that return data
- Add an option to display the available CPUs
- Fix generate_dist type
- Protect against missing attribute definition
- Set distances array type
- Add "parseable" display qualifier
- Generate distances by default
- Show help message when mapping too low
- Fix round-robin by obj with multiple cpus/rank
- Fix map-by slot and node for multiple cpus/rank
- PR #1633: v3.0.x: First cut of Sphinx/ReadTheDocs docs
- PR #1626: Remove unused variable
- PR #1622: Multiple commits
- Update version to 3.0.1
- Extend query support to include allocation info
- Remove debug
- Include topology in allocated node info
- Minor touchups of the "fault" example
- Designate the framework project as PRTE
- Begin adding support for new server module function pointer
- Silence warning - add return values
- Update to compatibility with PMIx master ranch
- Protect against earlier PMIx versions
- Add an IOF stress test
- Accept local group op upcalls
- Check for and track scheduler attachment
- Check for map/bind conflicting directive, improve unbound report
- Don't error out on binding if not required
- PR #1600: Multiple commits
- Minor change to check_os_flavors
- Don't emit an error output if not needed
- PR #1597: Fix oac_check_package.m4
- PR #1595: build: fix bashisms in configure
3.0.0 -- 13 Nov 2022
--------------------
.. important:: This release represents a major update to the PRRTE
code base from prior releases. Many of the changes will be
transparent to the user. However, there are a few key areas that
may (likely) impact users. These include:
- changes to the cmd line interpreter. PRRTE has provided an
abstraction layer that allows programming library developers
and environment vendors to customize the cmd line of PRRTE
binaries (e.g., prterun and prun). This is governed by the
detection of a "personality" that is to be used for defining
the cmd line options. The personality can be set either directly
on the cmd line itself (via the "--personality foo" option) or
is detected by PRRTE thru the environment.
- a more extensive "--help" support system.
- reduction in the "--rank-by" options.
- addition of new "--output" options
- removal of the "mindist" mapper due to lack of a maintainer
There are quite a few more changes than listed here, but they mostly
pertain to code internals. However, these dictate that PRRTE v3.0.0
require use of PMIx v4.2 or above to compile. Note that this doesn't
impact the PMIx level associated with any applications executed by
PRRTE - the only requirement is that applications link against a
PMIx version that meets the PMIx cross-version requirements (i.e., a
minimum of PMIx v2.5).
Detailed changes include:
- PR #1412: Restrict PRRTE to PMIx v4.2+
- PR #1410: Remove schizo/hydra component
- PR #1409: Add new output options to help string
- PR #1407: Support a broader range of IO output formats
- PR #1404: Fix a hang in daemon callback
- PR #1402: Cleanup race condition in daemon reports
- PR #1399: Multiple commits
- Allow mapping in overload scenario if bind not specified
- Ensure rankfile and seq mappers computer local and app ranks
- PR #1394: Add forwarding of stdin to indirect example
- PR #1391: Change the default mapping for --bind-to none option to BYSLOT.
Branch from `master@f3d4089 <https://github.com/openpmix/prrte/commit/f3d4089>`_

View File

@@ -0,0 +1,96 @@
.. -*- rst -*-
Copyright (c) 2022-2023 Nanook Consulting. All rights reserved.
Copyright (c) 2023 Jeffrey M. Squyres. All rights reserved.
$COPYRIGHT$
Additional copyrights may follow
$HEADER$
Notifications
=============
PRRTE provides notifications on a variety of process and job
states. Each notification includes not only the PMIx event code that
generated it, but also information on the cause of the event to the
extent to which this is known.
Supported job events include:
* ``PMIX_READY_FOR_DEBUG``: indicates that all processes in the
reported nspace have reached the specified debug stopping point.
* ``PMIX_LAUNCH_COMPLETE``: indicates that the reported nspace has
been launched |mdash| i.e., the involved PRRTE daemons all report
that their respective child processes have completed fork/exec.
* ``PMIX_ERR_JOB_CANCELED``: indicates that the job was cancelled by
user command, usually issued via an appropriate PMIx-enabled tool.
* ``PMIX_ERR_JOB_FAILED_TO_LAUNCH``: indicates that the specified job
failed to launch. This can be due to a variety of factors that
include inability to find the executable on at least one involved
node.
Supported process events include:
* ``PMIX_ERR_PROC_TERM_WO_SYNC``: indicates that at least one process
in the job called ``PMIx_Init``, thus indicating some notion of a
global existence, and at least one process in the job subsequently
exited without calling ``PMIx_Finalize``. This usually indicates a
failure somewhere in the application itself that precluded an
orderly shutdown of the process. Notification will include the
process ID that exited in this manner.
* ``PMIX_EVENT_PROC_TERMINATED``: indicates that the reported process
terminated normally. Notification will include the process ID that
exited and its exit status.
* ``PMIX_ERR_PROC_KILLED_BY_CMD``: indicates that the reported process
was killed by PRRTE command. This typically occurs in response to a
Ctrl-C (or equivalent) being applied to the PRRTE launcher, thereby
instructing PRRTE to forcibly terminate its processes. The event
currently will only be issued in the case where forcible termination
is commanded via a tool that can pass the process IDs that are
specifically to be terminated |mdash| otherwise, in the case of the
Ctrl-C event previously described, all processes in the job will be
terminated, leaving none to be notified. Notification will include
the process ID that was terminated.
* ``PMIX_ERR_PROC_SENSOR_BOUND_EXCEEDED``: indicates that the
specified process exceeded a previously-set sensor boundary |mdash|
e.g., it may have grown beyond a defined memory limit. Such events
may or may not automatically trigger termination by command,
depending upon the behavior of the sensor. Notification will include
the process ID that exceeded the sensor boundary plus whatever
information the sensor provides regarding measurements and bounds.
* ``PMIX_ERR_PROC_ABORTED_BY_SIG``: indicates that the specified
process was killed by a signal |mdash| e.g., a segmentation
fault/violation or an externally applied signal. Notifications will
include the process ID that was killed and the corresponding
reported signal.
* ``PMIX_ERR_PROC_REQUESTED_ABORT:`` indicates that the specified
process has aborted by calling the ``PMIx_Abort``
function. Notification will include the process ID that called abort
and its exit status.
* ``PMIX_ERR_EXIT_NONZERO_TERM``: indicates that the specified process
terminated with a non-zero exit status. This notification is only
generated in the case where the runtime option
``ERROR-NONZERO-STATUS`` is set to true, thereby indicating that a
process exiting with non-zero status is to be considered an
error. As PRRTE can be overwhelmed by a large job where every
process exits with a non-zero status, only the *first* process in a
given job that exits with a non-zero status will generate a
notification unless the ``RECOVERABLE`` runtime option is also
provided as otherwise the job will be immediately
terminated. Notifications will include the process ID that exited
and the status it returned.
* ``PMIX_ERR_PROC_RESTART``: indicates that the specified process has
been restarted. Additional information may include the hostname
where the process is now executing.

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement-deprecated.rst

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement-diagnostics.rst

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement-examples.rst

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement-fundamentals.rst

View File

@@ -0,0 +1,22 @@
Process placement
=================
PRRTE provides a set of three controls for assigning process
locations and ranks:
#. Mapping: Assigns a default location to each process
#. Ranking: Assigns a unique integer rank value to each process
#. Binding: Constrains each process to run on specific processors
The sections below describe these controls in more detail.
.. toctree::
:maxdepth: 1
overview
examples
fundamentals
limits
diagnostics
rankfiles
deprecated

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement-limits.rst

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement.rst

View File

@@ -0,0 +1 @@
.. include:: /prrte-rst-content/detail-placement-rankfiles.rst

View File

@@ -0,0 +1,43 @@
.. _label-quickstart:
Quick start
===========
In many cases, PRRTE can be built and installed by simply
indicating the installation directory on the command line:
.. code-block:: sh
$ tar xf prrte-<version>.tar.bz2
$ cd prrte-<version>
$ ./configure --prefix=<path> |& tee config.out
...lots of output...
$ make -j 8 |& tee make.out
...lots of output...
$ make install |& tee install.out
...lots of output...
Note that there are many, many configuration options to the
``./configure`` step. Some of them may be needed for your particular
environmnet; see below for desciptions of the options available.
If your installation prefix path is not writable by a regular user,
you may need to use ``sudo`` or ``su`` to run the ``make install``
step. For example:
.. code-block:: sh
$ sudo make install |& tee install.out
[sudo] password for builduser: <enter your password here>
...lots of output...
Finally, note that VPATH builds are fully supported. For example:
.. code-block:: sh
$ tar xf prrte-<version>.tar.bz2
$ cd prrte-<version>
$ mkdir build
$ cd build
$ ../configure --prefix=<path> |& tee config.out
...etc.

View File

@@ -0,0 +1,22 @@
Release Notes
=============
- Systems that have been tested are:
- Linux (various flavors/distros), 32 bit, with gcc
- Linux (various flavors/distros), 64 bit (x86), with gcc, Intel,
and Portland (*)
- OS X (10.7 and above), 32 and 64 bit (x86_64), with gcc (*)
- PRRTE has taken some steps towards Reproducible Builds
(https://reproducible-builds.org/). Specifically, PRRTE's
``configure`` and ``make`` process, by default, records the build
date and some system-specific information such as the hostname where
PRRTE was built and the username who built it. If you desire a
Reproducible Build, set the ``$SOURCE_DATE_EPOCH``, ``$USER`` and
``$HOSTNAME`` environment variables before invoking ``configure``
and ``make``, and PRRTE will use those values instead of invoking
``whoami`` and/or ``hostname``, respectively. See
https://reproducible-builds.org/docs/source-date-epoch/ for
information on the expected format and content of the
``$SOURCE_DATE_EPOCH`` variable.

View File

@@ -0,0 +1,71 @@
Session directory
=================
PRRTE establishes a "session directory" on the filesystem to serve as
a top-level location for temporary files used by both the local PRRTE
daemon and its child processes.
This is done to enable quick and easy cleanup in the event that PRRTE
is unable to fully cleanup after itself.
More detail on session directories is provided in the How Things Work
:ref:`session directory <session-dir-detail-label>` section.
Directory location
------------------
PRRTE decides where to located the root of the session directory by
examining the following (in precedence order):
#. If the value of the ``prte_top_session_dir`` MCA parameter is not
empty, use that (it defaults to empty).
.. note:: MCA parameters can be set via environment variables, on
the command line, or in a parameter file.
.. note:: If necessary, the value of the top session directory on
the local node where the launcher (e.g., ``prun``, ``prterun``,
or ``mpirun``) is executing can be set separately from
the value to be used on compute nodes via the
``prte_local_tmpdir_base`` and ``prte_remote_tmpdir_base``
parameters.
#. If the environment variable ``TMPDIR`` is not empty, use that.
#. If the environment variable ``TEMP`` is not empty, use that.
#. If the environment variable ``TMP`` is not empty, use that.
#. Use ``/tmp``
Directory name
--------------
By default, the session directory name is set to
.. code::
<tool>.<nodename>.<pid>.<uid>
where `tool` is the argv[0] of the process setting up the
session directory. In most cases, this will be either `prte`,
`prterun`, or `prted` - though special tools such as `psched`
may also create a session directory tree.
The session directory name includes the PID
of the daemon process to allow a user to have multiple
instances of a tool concurrently executing on a node.
.. note::
Each tool will generate its own session directory tree. This
is done to avoid cleanup race conditions where one tool might
cleanup the session directory, and thereby remove the contact
information for a tool that is continuing to execute.
Tools
-----
In the case of tools, the rendezvous files containing connection
information for a target server are located in the session directory
tree. Thus, it may be necessary to point the tool at the location
where those files can be found if that location is other than the
expected default.

View File

@@ -0,0 +1,68 @@
.. _label-version-numbers:
Software Version Numbers
========================
PRRTE's version numbers are the union of several different values:
major, minor, release, and an optional quantifier.
* Major: The major number is the first integer in the version string
(e.g., v1.2.3). Changes in the major number typically indicate a
significant change in the code base and/or end-user
functionality. The major number is always included in the version
number.
* Minor: The minor number is the second integer in the version
string (e.g., v1.2.3). Changes in the minor number typically
indicate a incremental change in the code base and/or end-user
functionality. The minor number is always included in the version
number:
* Release: The release number is the third integer in the version
string (e.g., v1.2.3). Changes in the release number typically
indicate a bug fix in the code base and/or end-user
functionality.
* Quantifier: PRRTE version numbers sometimes have an arbitrary
string affixed to the end of the version number. Common strings
include:
* ``aX``: Indicates an alpha release. X is an integer indicating
the number of the alpha release (e.g., v1.2.3a5 indicates the
5th alpha release of version 1.2.3).
* ``bX``: Indicates a beta release. X is an integer indicating
the number of the beta release (e.g., v1.2.3b3 indicates the 3rd
beta release of version 1.2.3).
* ``rcX``: Indicates a release candidate. X is an integer
indicating the number of the release candidate (e.g., v1.2.3rc4
indicates the 4th release candidate of version 1.2.3).
Although the major, minor, and release values (and optional
quantifiers) are reported in PRRTE snapshot tarballs, the
filenames of these snapshot tarballs follow a slightly different
convention.
Specifically, the snapshot tarball filename contains three distinct
values:
* Most recent Git tag name on the branch from which the tarball was
created.
* An integer indicating how many Git commits have occurred since
that Git tag.
* The Git hash of the tip of the branch.
For example, a snapshot tarball filename of
``prrte-v1.0.2-57-gb9f1fd9.tar.bz2`` indicates that this tarball was
created from the v1.0 branch, 57 Git commits after the ``v1.0.2`` tag,
specifically at Git hash gb9f1fd9.
PRRTE's Git master branch contains a single ``dev`` tag. For example,
``prrte-dev-8-gf21c349.tar.bz2`` represents a snapshot tarball created
from the master branch, 8 Git commits after the "dev" tag,
specifically at Git hash gf21c349.
The exact value of the "number of Git commits past a tag" integer is
fairly meaningless; its sole purpose is to provide an easy,
human-recognizable ordering for snapshot tarballs.