From: David Howells <dhowells@redhat.com>
To: David Howells <dhowells@redhat.com>
Cc: torvalds@osdl.org, akpm@osdl.org, mingo@redhat.com,
alan@redhat.com, linux-arch@vger.kernel.org,
linuxppc64-dev@ozlabs.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Document Linux's memory barriers [try #3]
Date: Thu, 09 Mar 2006 14:01:16 +0000 [thread overview]
Message-ID: <27749.1141912876@warthog.cambridge.redhat.com> (raw)
In-Reply-To: <21627.1141846631@warthog.cambridge.redhat.com>
I'm thinking of adding the attached to the document. Any comments or
objections?
David
diff --git a/Documentation/memory-barriers.txt b/Documentation/memory-barriers.txt
index 6eeb7e4..f9a9192 100644
--- a/Documentation/memory-barriers.txt
+++ b/Documentation/memory-barriers.txt
@@ -4,6 +4,8 @@
Contents:
+ (*) What do we consider memory?
+
(*) What are memory barriers?
(*) Where are memory barriers needed?
@@ -32,6 +34,82 @@ Contents:
(*) References.
+===========================
+WHAT DO WE CONSIDER MEMORY?
+===========================
+
+For the purpose of this specification, "memory", at least as far as cached CPU
+vs CPU interactions go, has to include the CPU caches in the system. Although
+any particular read or write may not actually appear outside of the CPU that
+issued it because the CPU was able to satisfy it from its own cache, it's still
+as if the memory access had taken place as far as the other CPUs are concerned
+since the cache coherency and ejection mechanisms will propegate the effects
+upon conflict.
+
+Consider the system logically as:
+
+ <--- CPU ---> : <----------- Memory ----------->
+ :
+ +--------+ +--------+ : +--------+ +-----------+
+ | | | | : | | | | +---------+
+ | CPU | | Memory | : | CPU | | | | |
+ | Core |--->| Access |----->| Cache |<-->| | | |
+ | | | Queue | : | | | |--->| Memory |
+ | | | | : | | | | | |
+ +--------+ +--------+ : +--------+ | | | |
+ : | Cache | +---------+
+ : | Coherency |
+ : | Mechanism | +---------+
+ +--------+ +--------+ : +--------+ | | | |
+ | | | | : | | | | | |
+ | CPU | | Memory | : | CPU | | |--->| Device |
+ | Core |--->| Access |----->| Cache |<-->| | | |
+ | | | Queue | : | | | | | |
+ | | | | : | | | | +---------+
+ +--------+ +--------+ : +--------+ +-----------+
+ :
+ :
+
+The CPU core may execute instructions in any order it deems fit, provided the
+expected program causality appears to be maintained. Some of the instructions
+generate load and store operations which then go into the memory access queue
+to be performed. The core may place these in the queue in any order it wishes,
+and continue execution until it is forced to wait for an instruction to
+complete.
+
+What memory barriers are concerned with is controlling the order in which
+accesses cross from the CPU side of things to the memory side of things, and
+the order in which the effects are perceived to happen by the other observers
+in the system.
+
+
+Note that the above model does not show uncached memory or I/O accesses. These
+procede directly from the queue to the memory or the devices, bypassing any
+cache coherency:
+
+ <--- CPU ---> :
+ : +-----+
+ +--------+ +--------+ : | |
+ | | | | : | | +---------+
+ | CPU | | Memory | : | | | |
+ | Core |--->| Access |--------------->| | | |
+ | | | Queue | : | |------------->| Memory |
+ | | | | : | | | |
+ +--------+ +--------+ : | | | |
+ : | | +---------+
+ : | Bus |
+ : | | +---------+
+ +--------+ +--------+ : | | | |
+ | | | | : | | | |
+ | CPU | | Memory | : | |<------------>| Device |
+ | Core |--->| Access |--------------->| | | |
+ | | | Queue | : | | | |
+ | | | | : | | +---------+
+ +--------+ +--------+ : | |
+ : +-----+
+ :
+
+
=========================
WHAT ARE MEMORY BARRIERS?
=========================
@@ -448,8 +526,8 @@ In all cases there are variants on a LOC
The LOCK accesses will be completed before the UNLOCK accesses.
-And therefore an UNLOCK followed by a LOCK is equivalent to a full barrier, but
-a LOCK followed by an UNLOCK isn't.
+ Therefore an UNLOCK followed by a LOCK is equivalent to a full barrier,
+ but a LOCK followed by an UNLOCK is not.
Locks and semaphores may not provide any guarantee of ordering on UP compiled
systems, and so can't be counted on in such a situation to actually do anything
next prev parent reply other threads:[~2006-03-09 14:01 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-07 17:40 [PATCH] Document Linux's memory barriers David Howells
2006-03-07 10:34 ` Andi Kleen
2006-03-07 18:30 ` David Howells
2006-03-07 11:13 ` Andi Kleen
2006-03-07 19:24 ` David Howells
2006-03-07 18:46 ` Jesse Barnes
2006-03-07 19:23 ` Bryan O'Sullivan
2006-03-07 11:57 ` Andi Kleen
2006-03-07 20:01 ` Jesse Barnes
2006-03-07 21:14 ` Bryan O'Sullivan
2006-03-07 21:24 ` Andi Kleen
2006-03-08 0:36 ` Alan Cox
2006-03-08 0:35 ` Alan Cox
2006-03-07 18:40 ` Alan Cox
2006-03-07 18:54 ` linux-os (Dick Johnson)
2006-03-07 19:06 ` Matthew Wilcox
2006-03-07 19:15 ` linux-os (Dick Johnson)
2006-03-07 19:33 ` Alan Cox
2006-03-07 20:09 ` David Howells
2006-03-08 0:32 ` Alan Cox
2006-03-08 8:25 ` Duncan Sands
2006-03-08 22:06 ` Paul Mackerras
2006-03-08 22:24 ` David S. Miller
2006-03-08 22:31 ` Linus Torvalds
2006-03-08 22:42 ` Alan Cox
2006-03-08 2:07 ` Nick Piggin
2006-03-08 3:10 ` Paul Mackerras
2006-03-08 3:30 ` Linus Torvalds
2006-03-08 12:34 ` David Howells
2006-03-08 16:40 ` Bryan O'Sullivan
2006-03-08 7:41 ` Nick Piggin
2006-03-08 13:19 ` David Howells
2006-03-08 21:49 ` Paul Mackerras
2006-03-08 22:05 ` Alan Cox
2006-03-08 14:37 ` [PATCH] Document Linux's memory barriers [try #2] David Howells
2006-03-08 14:55 ` Alan Cox
2006-03-08 15:41 ` Matthew Wilcox
2006-03-08 17:19 ` David Howells
2006-03-08 22:10 ` Paul Mackerras
2006-03-08 23:08 ` Ivan Kokshaysky
2006-03-09 1:01 ` Paul Mackerras
2006-03-09 16:02 ` Ivan Kokshaysky
2006-03-08 17:04 ` David Howells
2006-03-08 17:36 ` Alan Cox
2006-03-08 18:35 ` David Howells
2006-03-08 18:45 ` Alan Cox
2006-03-08 18:59 ` David Howells
2006-03-08 11:38 ` Andi Kleen
2006-03-08 19:08 ` David Howells
2006-03-08 19:26 ` Linus Torvalds
2006-03-08 19:31 ` David Howells
2006-03-09 0:35 ` Paul Mackerras
2006-03-09 0:54 ` Linus Torvalds
2006-03-09 1:08 ` Paul Mackerras
2006-03-09 1:27 ` Linus Torvalds
2006-03-09 2:38 ` Nick Piggin
2006-03-09 3:45 ` Paul Mackerras
2006-03-09 4:36 ` Jesse Barnes
2006-03-09 7:41 ` Paul Mackerras
2006-03-09 5:38 ` Linus Torvalds
2006-03-09 12:27 ` David Howells
2006-03-09 11:44 ` Michael Buesch
2006-03-09 4:34 ` Jesse Barnes
2006-03-09 4:43 ` Paul Mackerras
2006-03-09 10:05 ` Jes Sorensen
2006-03-09 0:55 ` Jesse Barnes
2006-03-09 1:57 ` Paul Mackerras
2006-03-09 4:26 ` Jesse Barnes
2006-03-08 19:40 ` Matthew Wilcox
2006-03-09 0:37 ` Paul Mackerras
2006-03-09 0:59 ` Jesse Barnes
2006-03-09 1:36 ` Paul Mackerras
2006-03-09 4:18 ` Jesse Barnes
2006-03-08 19:54 ` Jesse Barnes
2006-03-08 20:02 ` Alan Cox
2006-03-08 22:01 ` Paul Mackerras
2006-03-08 22:23 ` David S. Miller
2006-03-08 19:37 ` [PATCH] Document Linux's memory barriers [try #3] David Howells
2006-03-09 14:01 ` David Howells [this message]
2006-03-08 16:18 ` [PATCH] Document Linux's memory barriers Pavel Machek
2006-03-08 20:16 ` David Howells
2006-03-08 22:01 ` Alan Cox
2006-03-09 11:41 ` David Howells
2006-03-09 12:28 ` Alan Cox
2006-03-09 13:02 ` David Howells
2006-03-09 16:32 ` Linus Torvalds
2006-03-09 17:39 ` David Howells
2006-03-09 17:54 ` Linus Torvalds
2006-03-09 17:56 ` Linus Torvalds
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=27749.1141912876@warthog.cambridge.redhat.com \
--to=dhowells@redhat.com \
--cc=akpm@osdl.org \
--cc=alan@redhat.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc64-dev@ozlabs.org \
--cc=mingo@redhat.com \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox