mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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


      parent reply	other threads:[~2006-03-09 14:01 UTC|newest]

Thread overview: 98+ 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 17:47 ` Stephen Hemminger
2006-03-07 18:30 ` David Howells
2006-03-07 11:13   ` Andi Kleen
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 19:24   ` David Howells
2006-03-07 19:46     ` Stephen Hemminger
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-09 11:26         ` Sergei Organov
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  7:41   ` Nick Piggin
2006-03-08 12:34   ` David Howells
2006-03-08 16:40     ` Bryan O'Sullivan
2006-03-08 13:19 ` David Howells
2006-03-08 21:49   ` Paul Mackerras
2006-03-08 22:05     ` Alan Cox
2006-03-10  0:49   ` H. Peter Anvin
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 22:01     ` Paul Mackerras
2006-03-08 22:23       ` David S. Miller
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: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 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 11:44                     ` Michael Buesch
2006-03-09 12:27                     ` David Howells
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-09 12:02   ` Sergei Organov
2006-03-08 16:18 ` [PATCH] Document Linux's memory barriers Pavel Machek
2006-03-08 16:26 ` Christoph Lameter
2006-03-08 17:35 ` David Howells
2006-03-08 17:46   ` Christoph Lameter
2006-03-08 17:59     ` Alan Cox
2006-03-08 19:37 ` [PATCH] Document Linux's memory barriers [try #3] David Howells
2006-03-08 20:16 ` [PATCH] Document Linux's memory barriers 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
2006-03-09 14:01 ` David Howells [this message]

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

Powered by JetHome