[...] > 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 _______________________________________________ rtems-devel mailing list rtems-devel@rtems.org http://www.rtems.org/mailman/listinfo/rtems-devel