On 04/11/2014 07:27 PM, Gedare Bloom wrote:
[...]
diff --git a/doc/user/conf.t b/doc/user/conf.t
index 9b093f8..e3c3f24 100644
--- a/doc/user/conf.t
+++ b/doc/user/conf.t
@@ -3792,6 +3792,99 @@ guidance.  For guidance on the configuration macros, 
please examine
  Deterministic Priority Scheduler.

  @c
+@c === Configuring Partitioned/Clustered Schedulers ===
+@c
+@subsection Configuring Partitioned/Clustered Schedulers
+
+Partitioned/clustered scheduling helps to control the worst-case latencies in
+the system.  The goal is to reduce the amount of shared state in the system and
+thus prevention of lock contention.  Modern multi-processor systems tend to
+have several layers of data and instruction caches.  With partitioned/clustered
+scheduling it is possible to honor the cache topology of a system and thus
+avoid expensive cache synchronization traffic.
+
+The schedulers in an SMP system are statically configured.  First the
+application must select which scheduling algorithms are available with the
+following defines
+
+@itemize @bullet
+@item @code{CONFIGURE_SCHEDULER_PRIORITY_SMP},
+@item @code{CONFIGURE_SCHEDULER_SIMPLE_SMP}, and
+@item @code{CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP}.
+@end itemize
+
+After these definitions the configuration file must
+@code{#include <rtems/scheduler.h>} to have access to scheduler specific
+configuration macros.  Each scheduler needs a context to store state
+information at run-time.  To provide a context for each scheduler is the next
+step.  Use the following macros to create scheduler contexts
+
+@itemize @bullet
+@item @code{RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP},
+@item @code{RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP}, and
+@item @code{RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP}.
+@end itemize
+
+The schedulers are registered in the system via the scheduler table.  To create
+the scheduler table define @code{CONFIGURE_SCHEDULER_CONTROLS} to a list of the
+following scheduler control initializers
+
+@itemize @bullet
+@item @code{RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP},
+@item @code{RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP}, and
+@item @code{RTEMS_SCHEDULER_CONTROL_PRIORITY_AFFINITY_SMP}.
+@end itemize
+
+The last step is to define which processor uses which scheduler.  For this
+purpose a scheduler assignment table must be defined.  The entry count of this
+table must be equal to the configured maximum processors
+(@code{CONFIGURE_SMP_MAXIMUM_PROCESSORS}).  A processor assignment to a
+scheduler can be optional or mandatory.  The boot processor must have a
+scheduler assigned.  In case the system needs more mandatory processors than
+available then a fatal run-time error will occur.  To specify the scheduler
+assignments define @code{CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS} to a list of
+@code{RTEMS_SCHEDULER_ASSIGN} macros.
+
+The following example shows a partitioned scheduler configuration for two
+processors.  Each processor is owned by a Deterministic Priority scheduler
+capable to manage 256 priority levels.  The scheduler with index zero has the
+name @code{"BLUE"}.  The scheduler with index one has the name @code{"WOOD"}.
+The scheduler assignments are mandatory, so the system must have at least two
+processors, otherwise a fatal run-time error will occur during system startup.
+
+@example
+@group
+#define CONFIGURE_SMP_APPLICATION
+
+#define CONFIGURE_SMP_MAXIMUM_PROCESSORS 2
+
+#define CONFIGURE_MAXIMUM_PRIORITY 255
+
+#define CONFIGURE_SCHEDULER_PRIORITY_SMP
+
+#include <rtems/scheduler.h>
+
+RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(a, CONFIGURE_MAXIMUM_PRIORITY + 1);
+
+RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(b, CONFIGURE_MAXIMUM_PRIORITY + 1);
+
+#define CONFIGURE_SCHEDULER_CONTROLS \
+  RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
+    a, \
+    rtems_build_name('B', 'L', 'U', 'E') \
+  ), \
+  RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
+    b, \
+    rtems_build_name('W', 'O', 'O', 'D') \
+  )
+
+#define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
+  RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
+  RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY)
+@end group
+@end example
+
Make it more clear in the documentation that the index passed to
RTEMS_SCHEDULER_ASSIGN identifies the scheduler based on the order
they are defined in the CONFIGURE_SCHEDULER_CONTROLS, and that the
order of the assignments implies the processor being assigned.

-Gedare

Ok.

--
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.hu...@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

_______________________________________________
rtems-devel mailing list
rtems-devel@rtems.org
http://www.rtems.org/mailman/listinfo/rtems-devel

Reply via email to