= SMP = [[TOC(Developer/SMP, depth=2)]] = Status = The [http://en.wikipedia.org/wiki/Symmetric_multiprocessing SMP] support for RTEMS is work in progress. Basic support is available for ARM, PowerPC, SPARC and Intel x86. = Requirements = No public requirements exist currently. = Design Issues = = Low-Level Start = == Status == The low-level start is guided by the per-CPU control state [http://www.rtems.org/onlinedocs/doxygen/cpukit/html/group__PerCPU.html#gabad09777c1e3a7b7f3efcae54938d418 Per_CPU_Control::state]. See also ''_Per_CPU_Change_state()'' and ''_Per_CPU_Wait_for_state()''. [wiki:File:rtems-smp-low-level-states.png File:rtems-smp-low-level-states.png] == Future Directions == Get rid of ''_CPU_Context_switch_to_first_task_smp()'' and use ''_CPU_Context_restore()'' instead since this complicates things. This function is only specific on SPARC other architectures like ARM or PowerPC do not need it. The low-level initialization code of secondary processors can easily set up the processor into the right state. = Processor Affinity = == Status == Thread processor affinity is not supported. == Future Directions == Implement the missing feature. This consists of two parts * the application level API, and * the scheduler support. There is no POSIX API available that covers thread processor affinity. Linux is the de facto standard system for high performance computing so it is obvious to choose a Linux compatible API for RTEMS. Linux provides [http://man7.org/linux/man-pages/man3/CPU_SET.3.html CPU_SET(3)] to manage sets of processors. Thread processor affinity can be controlled via [http://man7.org/linux/man-pages/man2/sched_setaffinity.2.html SCHED_SETAFFINITY(2)] and [http://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html PTHREAD_SETAFFINITY_NP(3)]. RTEMS should provide these APIs and implement them. It is not possible to use the Linux files directly since they have a pure GPL license. The scheduler support for arbitrary processor affinities is a major challenge. Schedulability analysis for schedulers with arbitrary processor affinities is a current research topic