summaryrefslogtreecommitdiffstats
path: root/c-user/symmetric_multiprocessing_services.rst
diff options
context:
space:
mode:
Diffstat (limited to 'c-user/symmetric_multiprocessing_services.rst')
-rw-r--r--c-user/symmetric_multiprocessing_services.rst61
1 files changed, 46 insertions, 15 deletions
diff --git a/c-user/symmetric_multiprocessing_services.rst b/c-user/symmetric_multiprocessing_services.rst
index 0065f0c..80e3f8c 100644
--- a/c-user/symmetric_multiprocessing_services.rst
+++ b/c-user/symmetric_multiprocessing_services.rst
@@ -10,31 +10,27 @@ Symmetric Multiprocessing (SMP)
Introduction
============
-The Symmetric Multiprocessing (SMP) support of the RTEMS 4.11.0 and later is available
-on
+The Symmetric Multiprocessing (SMP) support of the RTEMS 4.12 is available on
-- ARM,
+- ARMv7-A,
- PowerPC, and
- SPARC.
-It must be explicitly enabled via the ``--enable-smp`` configure command line
-option. To enable SMP in the application configuration see :ref:`Enable SMP
-Support for Applications`. The default scheduler for SMP applications supports
-up to 32 processors and is a global fixed priority scheduler, see also
-:ref:`Configuring Clustered Schedulers`. For example applications
-see:file:`testsuites/smptests`.
-
.. warning::
- The SMP support in the release of RTEMS is a work in progress. Before you
- start using this RTEMS version for SMP ask on the RTEMS mailing list.
+ The SMP support must be explicitly enabled via the ``--enable-smp``
+ configure command line option for the :term:`BSP` build.
-This chapter describes the services related to Symmetric Multiprocessing
-provided by RTEMS.
+RTEMS is supposed to be a real-time operating system. What does this mean in
+the context of SMP? The RTEMS interpretation of real-time on SMP is the
+support for :ref:`ClusteredScheduling` with priority based schedulers and
+adequate locking protocols. One aim is to enable a schedulability analysis
+under the sporadic task model :cite:`Brandenburg:2011:SL`
+:cite:`Burns:2013:MrsP`.
-The application level services currently provided are:
+The directives provided by the SMP support are:
- rtems_get_processor_count_ - Get processor count
@@ -43,6 +39,39 @@ The application level services currently provided are:
Background
==========
+Application Configuration
+-------------------------
+
+By default, the maximum processor count is set to one in the application
+configuration. To enable SMP, the application configuration option
+:ref:`CONFIGURE_SMP_MAXIMUM_PROCESSORS <CONFIGURE_SMP_MAXIMUM_PROCESSORS>` must
+be defined to a value greater than one. It is recommended to use the smallest
+value suitable for the application in order to safe memory. Each processor
+needs an idle thread and interrupt stack for example.
+
+The default scheduler for SMP applications supports up to 32 processors and is
+a global fixed priority scheduler, see also :ref:`Configuring Clustered
+Schedulers`.
+
+The following compile-time test can be used to check if the SMP support is
+available or not.
+
+.. code-block:: c
+
+ #include <rtems.h>
+
+ #ifdef RTEMS_SMP
+ #warning "SMP support is enabled"
+ #else
+ #warning "SMP support is disabled"
+ #endif
+
+Examples
+--------
+
+For example applications see `testsuites/smptests
+<https://git.rtems.org/rtems/tree/testsuites/smptests>`_.
+
Uniprocessor versus SMP Parallelism
-----------------------------------
@@ -140,6 +169,8 @@ to another. There are four reasons why tasks migrate in RTEMS.
Task migration should be avoided so that the working set of a task can stay on
the most local cache level.
+.. _ClusteredScheduling:
+
Clustered Scheduling
--------------------