#2555 closed enhancement (fixed)
Eliminate the Giant lock
Reported by: | Sebastian Huber | Owned by: | Sebastian Huber |
---|---|---|---|
Priority: | normal | Milestone: | 5.1 |
Component: | score | Version: | 5 |
Severity: | normal | Keywords: | |
Cc: | Blocked By: | ||
Blocking: |
Description
Background
The standard approach to turn a uni-processor operating system into an SMP-capable operating system is to encapsulate virtually the complete operating system state and protect it by one global recursive lock - the Giant lock. Thus, at most one processor can modify the operating system state at a time. Under Giant lock protection interrupt disable/enable critical sections still work. This approach is easy to realize and leads to something that runs on SMP with a minimal effort. Unfortunately, such an operating system does not scale with the processor count and offers very poor performance. It is quite useless for real applications.
The first steps to get rid of the Giant lock are tackled with the introduction of fine grained locking for the scheduler, watchdog handler, timestamps, thread queues, events, semaphores and message queues. The Giant lock is still used in a couple of places, e.g. all other objects using thread queues, thread life cycle changes (termination, restart) and scheduler changes. It is a straight forward task to eliminate it entirely, but it is also somewhat labour intensive since a lot of code must be changed.
Implementation
Eliminate all remaining code areas that use
_ISR_Disable()
,_ISR_Enable()
, and_ISR_Flash()
.
Direct users of these macros are
_Chain_Append()
,_Chain_Extract()
,_Chain_Get()
,_Chain_Insert()
, and_Chain_Prepend()
.
Each spot must be dealt with individually. Once this is done, delete these macros since they are now superfluous. Rename _ISR_Disable_without_giant()
into _ISR_Locale_disable()
. Rename _ISR_Enable_without_giant()
into _ISR_Locale_enable()
.
Eliminate all remaining code areas that use
_Thread_Disable_dispatch()
and_Thread_Enable_dispatch()
.
A prominent user of this functions is _Objects_Get()
. The following components are affected by these functions
- Classic barrier handler,
- Classic dual-ported memory handler,
- Classic message queue handler,
- Classic partition handler,
- Classic rate-monotonic handler,
- Classic region handler,
- Classic semaphore handler,
- Classic timer handler,
- extension handler,
- IO manager,
- multi-processing management,
- objects management,
- POSIX barrier handler,
- POSIX condition handler,
- POSIX key handler,
- POSIX message queue handler,
- POSIX mutex handler,
- POSIX rwlock handler,
- POSIX semaphore handler,
- POSIX spinlock handler,
- POSIX timer handler,
- signals,
- thread cancellation,
- thread life-cycle changes, and
- thread scheduler changes.
Once this is done, delete _Thread_Disable_dispatch()
and _Thread_Enable_dispatch()
. As a side-effect the Giant lock will be removed.
Change History (79)
comment:1 Changed on 02/04/16 at 11:59:58 by Sebastian Huber
Status: | new → accepted |
---|
comment:2 Changed on 03/04/16 at 14:01:28 by Sebastian Huber
comment:3 Changed on 03/04/16 at 14:16:29 by Sebastian Huber <sebastian.huber@…>
comment:4 Changed on 03/07/16 at 07:38:38 by Sebastian Huber
comment:5 Changed on 03/14/16 at 08:31:00 by Sebastian Huber <sebastian.huber@…>
comment:6 Changed on 03/15/16 at 07:13:12 by Sebastian Huber <sebastian.huber@…>
comment:7 Changed on 03/15/16 at 07:13:27 by Sebastian Huber <sebastian.huber@…>
comment:8 Changed on 03/16/16 at 06:17:33 by Sebastian Huber <sebastian.huber@…>
comment:9 Changed on 03/16/16 at 06:20:19 by Sebastian Huber <sebastian.huber@…>
comment:10 Changed on 03/17/16 at 08:03:25 by Sebastian Huber <sebastian.huber@…>
comment:11 Changed on 03/17/16 at 08:03:38 by Sebastian Huber <sebastian.huber@…>
comment:12 Changed on 03/17/16 at 08:03:50 by Sebastian Huber <sebastian.huber@…>
comment:13 Changed on 03/21/16 at 06:45:36 by Sebastian Huber <sebastian.huber@…>
comment:14 Changed on 03/22/16 at 06:44:37 by Sebastian Huber <sebastian.huber@…>
comment:15 Changed on 03/22/16 at 07:05:48 by Sebastian Huber <sebastian.huber@…>
comment:16 Changed on 03/29/16 at 11:43:38 by Sebastian Huber <sebastian.huber@…>
comment:17 Changed on 03/31/16 at 11:57:24 by Sebastian Huber <sebastian.huber@…>
comment:18 Changed on 04/06/16 at 08:32:19 by Sebastian Huber <sebastian.huber@…>
comment:19 Changed on 04/19/16 at 05:23:00 by Sebastian Huber <sebastian.huber@…>
comment:20 Changed on 04/19/16 at 05:23:26 by Sebastian Huber <sebastian.huber@…>
comment:21 Changed on 04/21/16 at 05:34:38 by Sebastian Huber <sebastian.huber@…>
comment:22 Changed on 04/21/16 at 05:34:49 by Sebastian Huber <sebastian.huber@…>
comment:23 Changed on 04/27/16 at 06:51:34 by Sebastian Huber <sebastian.huber@…>
comment:24 Changed on 05/02/16 at 10:07:32 by Sebastian Huber <sebastian.huber@…>
comment:25 Changed on 05/02/16 at 10:07:42 by Sebastian Huber <sebastian.huber@…>
comment:26 Changed on 05/02/16 at 10:07:53 by Sebastian Huber <sebastian.huber@…>
comment:27 Changed on 05/02/16 at 10:08:03 by Sebastian Huber <sebastian.huber@…>
comment:28 Changed on 05/02/16 at 10:08:13 by Sebastian Huber <sebastian.huber@…>
comment:29 Changed on 05/02/16 at 10:08:22 by Sebastian Huber <sebastian.huber@…>
comment:30 Changed on 05/02/16 at 10:08:41 by Sebastian Huber <sebastian.huber@…>
comment:31 Changed on 05/02/16 at 10:09:10 by Sebastian Huber <sebastian.huber@…>
comment:32 Changed on 05/02/16 at 10:09:20 by Sebastian Huber <sebastian.huber@…>
comment:33 Changed on 05/04/16 at 05:29:06 by Sebastian Huber
comment:34 Changed on 05/04/16 at 05:55:38 by Sebastian Huber <sebastian.huber@…>
comment:35 Changed on 05/06/16 at 06:18:14 by Sebastian Huber <sebastian.huber@…>
comment:36 Changed on 05/06/16 at 06:18:27 by Sebastian Huber <sebastian.huber@…>
comment:37 Changed on 05/06/16 at 06:18:40 by Sebastian Huber <sebastian.huber@…>
comment:38 Changed on 05/12/16 at 11:34:25 by Sebastian Huber <sebastian.huber@…>
comment:39 Changed on 05/12/16 at 11:34:34 by Sebastian Huber <sebastian.huber@…>
comment:40 Changed on 05/12/16 at 11:34:44 by Sebastian Huber <sebastian.huber@…>
comment:41 Changed on 05/12/16 at 11:34:54 by Sebastian Huber <sebastian.huber@…>
comment:42 Changed on 05/12/16 at 11:35:04 by Sebastian Huber <sebastian.huber@…>
comment:43 Changed on 05/12/16 at 11:35:13 by Sebastian Huber <sebastian.huber@…>
comment:44 Changed on 05/12/16 at 11:35:23 by Sebastian Huber <sebastian.huber@…>
comment:45 Changed on 05/20/16 at 05:56:47 by Sebastian Huber <sebastian.huber@…>
comment:46 Changed on 05/20/16 at 05:56:57 by Sebastian Huber <sebastian.huber@…>
comment:47 Changed on 05/20/16 at 05:57:07 by Sebastian Huber <sebastian.huber@…>
comment:48 Changed on 05/20/16 at 05:57:17 by Sebastian Huber <sebastian.huber@…>
comment:49 Changed on 05/20/16 at 05:57:27 by Sebastian Huber <sebastian.huber@…>
comment:50 Changed on 05/20/16 at 05:57:37 by Sebastian Huber <sebastian.huber@…>
comment:51 Changed on 05/20/16 at 05:57:47 by Sebastian Huber <sebastian.huber@…>
comment:52 Changed on 05/20/16 at 05:57:57 by Sebastian Huber <sebastian.huber@…>
comment:53 Changed on 05/20/16 at 05:58:07 by Sebastian Huber <sebastian.huber@…>
comment:54 Changed on 05/20/16 at 05:58:17 by Sebastian Huber <sebastian.huber@…>
comment:55 Changed on 05/20/16 at 05:58:27 by Sebastian Huber <sebastian.huber@…>
comment:56 Changed on 05/20/16 at 05:58:37 by Sebastian Huber <sebastian.huber@…>
comment:57 Changed on 05/20/16 at 05:58:47 by Sebastian Huber <sebastian.huber@…>
comment:58 Changed on 05/20/16 at 05:58:58 by Sebastian Huber <sebastian.huber@…>
comment:59 Changed on 05/20/16 at 05:59:08 by Sebastian Huber <sebastian.huber@…>
comment:60 Changed on 05/20/16 at 05:59:18 by Sebastian Huber <sebastian.huber@…>
comment:61 Changed on 05/20/16 at 05:59:29 by Sebastian Huber <sebastian.huber@…>
comment:62 Changed on 05/20/16 at 05:59:39 by Sebastian Huber <sebastian.huber@…>
comment:63 Changed on 05/20/16 at 05:59:49 by Sebastian Huber <sebastian.huber@…>
comment:64 Changed on 05/20/16 at 06:00:00 by Sebastian Huber <sebastian.huber@…>
comment:65 Changed on 05/20/16 at 06:00:09 by Sebastian Huber <sebastian.huber@…>
comment:66 Changed on 05/20/16 at 06:00:19 by Sebastian Huber <sebastian.huber@…>
comment:67 Changed on 05/20/16 at 06:00:29 by Sebastian Huber <sebastian.huber@…>
comment:68 Changed on 05/20/16 at 06:00:39 by Sebastian Huber <sebastian.huber@…>
comment:69 Changed on 05/20/16 at 06:00:48 by Sebastian Huber <sebastian.huber@…>
comment:70 Changed on 05/20/16 at 06:00:59 by Sebastian Huber <sebastian.huber@…>
comment:71 Changed on 05/20/16 at 06:01:09 by Sebastian Huber <sebastian.huber@…>
comment:72 Changed on 05/20/16 at 06:01:19 by Sebastian Huber <sebastian.huber@…>
comment:73 Changed on 05/20/16 at 06:01:29 by Sebastian Huber <sebastian.huber@…>
comment:74 Changed on 05/20/16 at 06:01:39 by Sebastian Huber <sebastian.huber@…>
comment:75 Changed on 05/20/16 at 06:01:48 by Sebastian Huber <sebastian.huber@…>
comment:76 Changed on 12/19/16 at 13:47:29 by Sebastian Huber
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
comment:77 Changed on 05/11/17 at 07:31:02 by Sebastian Huber
Milestone: | 4.12 → 4.12.0 |
---|
comment:78 Changed on 11/09/17 at 06:27:14 by Sebastian Huber
Milestone: | 4.12.0 → 5.1 |
---|
Milestone renamed
comment:79 Changed on 12/15/17 at 06:24:12 by Sebastian Huber <sebastian.huber@…>
In e1563f37/rtems:
[03b900d3ed120ea919ea3eded7edbece3488cff3/rtems]