[rtems-docs commit] c-user: Add SMP internal locking
sebh at rtems.org
Fri Feb 3 13:29:22 UTC 2017
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Fri Feb 3 14:26:03 2017 +0100
c-user: Add SMP internal locking
c-user/symmetric_multiprocessing_services.rst | 38 +++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/c-user/symmetric_multiprocessing_services.rst b/c-user/symmetric_multiprocessing_services.rst
index b043bf8..6d468a5 100644
@@ -600,6 +600,44 @@ processors.
+In SMP configurations, the operating system uses non-recursive SMP locks for
+low-level mutual exclusion. The locking domains are roughly
+* a particular data structure,
+* the thread queue operations,
+* the thread state changes, and
+* the scheduler operations.
+For a good average-case performance it is vital that every high-level
+synchronization object, e.g. mutex, has its own SMP lock. In the average-case,
+only this SMP lock should be involved to carry out a specific operation, e.g.
+obtain/release a mutex. In general, the high-level synchronization objects
+have a thread queue embedded and use its SMP lock.
+In case a thread must block on a thread queue, then things get complicated.
+The executing thread first acquires the SMP lock of the thread queue and then
+figures out that it needs to block. The procedure to block the thread on this
+particular thread queue involves state changes of the thread itself and for
+this thread-specific SMP locks must be used.
+In order to determine if a thread is blocked on a thread queue or not
+thread-specific SMP locks must be used. A thread priority change must
+propagate this to the thread queue (possibly recursively). Care must be taken
+to not have a lock order reversal between thread queue and thread-specific SMP
+Each scheduler instance has its own SMP lock. For the scheduler helping
+protocol multiple scheduler instances may be in charge of a thread. It is not
+possible to acquire two scheduler instance SMP locks at the same time,
+otherwise deadlocks would happen. A thread-specific SMP lock is used to
+synchronize the thread data shared by different scheduler instances.
+The thread state SMP lock protects various things, e.g. the thread state, join
+operations, signals, post-switch actions, the home scheduler instance, etc.
More information about the vc