mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-23 16:14:00 +08:00
score: Add clustered/partitioned scheduling
Clustered/partitioned 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 clustered/partitioned scheduling it is possible to honour the cache topology of a system and thus avoid expensive cache synchronization traffic. We have clustered scheduling in case the set of processors of a system is partitioned into non-empty pairwise-disjoint subsets. These subsets are called clusters. Clusters with a cardinality of one are partitions. Each cluster is owned by exactly one scheduler instance.
This commit is contained in:
@@ -820,6 +820,119 @@ const rtems_libio_helper rtems_fs_init_helper =
|
||||
#if defined(RTEMS_SMP)
|
||||
const size_t _Scheduler_Count =
|
||||
RTEMS_ARRAY_SIZE( _Scheduler_Table );
|
||||
|
||||
const Scheduler_Assignment _Scheduler_Assignments[] = {
|
||||
#if defined(CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS)
|
||||
CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS
|
||||
#else
|
||||
#define CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT \
|
||||
RTEMS_SCHEDULER_ASSIGN( \
|
||||
0, \
|
||||
RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL \
|
||||
)
|
||||
CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 2
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 3
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 4
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 5
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 6
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 7
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 8
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 9
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 10
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 11
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 12
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 13
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 14
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 15
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 16
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 17
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 18
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 19
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 20
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 21
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 22
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 23
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 24
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 25
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 26
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 27
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 28
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 29
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 30
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 31
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#if CONFIGURE_SMP_MAXIMUM_PROCESSORS >= 32
|
||||
, CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
#undef CONFIGURE_SMP_SCHEDULER_ASSIGN_OPT
|
||||
#endif
|
||||
};
|
||||
|
||||
RTEMS_STATIC_ASSERT(
|
||||
CONFIGURE_SMP_MAXIMUM_PROCESSORS
|
||||
== RTEMS_ARRAY_SIZE( _Scheduler_Assignments ),
|
||||
_Scheduler_Assignments
|
||||
);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIGURE_SCHEDULER_EDF)
|
||||
|
||||
@@ -26,6 +26,29 @@
|
||||
#define RTEMS_SCHEDULER_CONTEXT_NAME( name ) \
|
||||
_Configuration_Scheduler_ ## name
|
||||
|
||||
#if defined(RTEMS_SMP)
|
||||
/* This object doesn't exist and indicates a configuration error */
|
||||
extern const Scheduler_Control RTEMS_SCHEDULER_INVALID_INDEX;
|
||||
|
||||
#define RTEMS_SCHEDULER_ASSIGN_DEFAULT \
|
||||
SCHEDULER_ASSIGN_DEFAULT
|
||||
|
||||
#define RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL \
|
||||
SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL
|
||||
|
||||
#define RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY \
|
||||
SCHEDULER_ASSIGN_PROCESSOR_MANDATORY
|
||||
|
||||
#define RTEMS_SCHEDULER_ASSIGN( index, attr ) \
|
||||
{ \
|
||||
( index ) < RTEMS_ARRAY_SIZE( _Scheduler_Table ) ? \
|
||||
&_Scheduler_Table[ ( index ) ] : &RTEMS_SCHEDULER_INVALID_INDEX, \
|
||||
( attr ) \
|
||||
}
|
||||
|
||||
#define RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER { NULL, 0 }
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This file should be only included in the context of <rtems/confdefs.h>.
|
||||
* Define the scheduler configuration macros only in case the corresponding
|
||||
|
||||
Reference in New Issue
Block a user