All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Akira Yokosawa <akiyks@gmail.com>
Cc: perfbook@vger.kernel.org
Subject: Re: [PATCH] memorder: Convert remaining code snippets in figures to listings
Date: Mon, 18 Sep 2017 09:56:06 -0700	[thread overview]
Message-ID: <20170918165606.GO3521@linux.vnet.ibm.com> (raw)
In-Reply-To: <dd46f6b1-a4d5-4c84-a24f-913db2de78ae@gmail.com>

On Mon, Sep 18, 2017 at 11:53:36PM +0900, Akira Yokosawa wrote:
> >From 5ea1ec3515ed44646c3337482ef2f0f6a7f5b4f2 Mon Sep 17 00:00:00 2001
> From: Akira Yokosawa <akiyks@gmail.com>
> Date: Mon, 18 Sep 2017 23:33:39 +0900
> Subject: [PATCH] memorder: Convert remaining code snippets in figures to listings
> 
> Line numbers are not touched. Conversion to auto-numbering scheme
> can wait until renumbering becomes inevitable.
> 
> Signed-off-by: Akira Yokosawa <akiyks@gmail.com>

Applied and pushed, thank you!

							Thanx, Paul

> ---
> Hi Paul,
> 
> This is for consistency in this chapter.
> If it conflicts with changes on your side, I'll respin.
> 
>        Thanks, Akira
> --
>  memorder/memorder.tex | 58 +++++++++++++++++++++++++--------------------------
>  1 file changed, 29 insertions(+), 29 deletions(-)
> 
> diff --git a/memorder/memorder.tex b/memorder/memorder.tex
> index f031857..0cbde1b 100644
> --- a/memorder/memorder.tex
> +++ b/memorder/memorder.tex
> @@ -3089,7 +3089,7 @@ of the pointer itself.
>  As soon as the compiler does that, the dependency is broken and all
>  ordering is lost.
> 
> -\begin{figure}[tbp]
> +\begin{listing}[tbp]
>  { \scriptsize
>  \begin{verbbox}
>   1 int reserve_int;
> @@ -3105,10 +3105,10 @@ ordering is lost.
>  \centering
>  \theverbbox
>  \caption{Breakable Dependencies With Comparisons}
> -\label{fig:memorder:Breakable Dependencies With Comparisons}
> -\end{figure}
> +\label{lst:memorder:Breakable Dependencies With Comparisons}
> +\end{listing}
> 
> -\begin{figure}[tbp]
> +\begin{listing}[tbp]
>  { \scriptsize
>  \begin{verbbox}
>   1 int reserve_int;
> @@ -3127,8 +3127,8 @@ ordering is lost.
>  \centering
>  \theverbbox
>  \caption{Broken Dependencies With Comparisons}
> -\label{fig:memorder:Broken Dependencies With Comparisons}
> -\end{figure}
> +\label{lst:memorder:Broken Dependencies With Comparisons}
> +\end{listing}
> 
>  \begin{enumerate}
>  \item	Although it is permissible to compute offsets from a
> @@ -3141,7 +3141,7 @@ ordering is lost.
>  	For example, if \co{a} and \co{b} are equal, \co{cp+a-b}
>  	is an identity function, including preserving the dependency.
>  \item	Comparisons can break dependencies.
> -	Figure~\ref{fig:memorder:Breakable Dependencies With Comparisons}
> +	Listing~\ref{lst:memorder:Breakable Dependencies With Comparisons}
>  	shows how this can happen.
>  	Here global pointer \co{gp} points to a dynamically allocated
>  	integer, but if memory is low, it might instead point to
> @@ -3150,7 +3150,7 @@ ordering is lost.
>  	shown on lines~6 and~7 of the figure.
>  	But the compiler could reasonably transform this code into
>  	the form shown in
> -	Figure~\ref{fig:memorder:Broken Dependencies With Comparisons},
> +	Listing~\ref{lst:memorder:Broken Dependencies With Comparisons},
>  	especially on systems where instructions with absolute
>  	addresses run faster than instructions using addresses
>  	supplied in registers.
> @@ -3163,7 +3163,7 @@ ordering is lost.
>  \QuickQuiz{}
>  	Why can't you simply dereference the pointer before comparing it
>  	to \co{&reserve_int} on line~6 of
> -	Figure~\ref{fig:memorder:Breakable Dependencies With Comparisons}?
> +	Listing~\ref{lst:memorder:Breakable Dependencies With Comparisons}?
>  \QuickQuizAnswer{
>  	For first, it might be necessary to invoke
>  	\co{handle_reserve()} before \co{do_something_with()}.
> @@ -3182,7 +3182,7 @@ ordering is lost.
>  	comparison?
>  \QuickQuizAnswer{
> 
> -\begin{figure}[tbp]
> +\begin{listing}[tbp]
>  { \scriptsize
>  \begin{verbbox}
>   1 int *gp1;
> @@ -3200,10 +3200,10 @@ ordering is lost.
>  \centering
>  \theverbbox
>  \caption{Breakable Dependencies With Non-Constant Comparisons}
> -\label{fig:memorder:Breakable Dependencies With Non-Constant Comparisons}
> -\end{figure}
> +\label{lst:memorder:Breakable Dependencies With Non-Constant Comparisons}
> +\end{listing}
> 
> -\begin{figure}[tbp]
> +\begin{listing}[tbp]
>  { \scriptsize
>  \begin{verbbox}
>   1 int *gp1;
> @@ -3224,15 +3224,15 @@ ordering is lost.
>  \centering
>  \theverbbox
>  \caption{Broken Dependencies With Non-Constant Comparisons}
> -\label{fig:memorder:Broken Dependencies With Non-Constant Comparisons}
> -\end{figure}
> +\label{lst:memorder:Broken Dependencies With Non-Constant Comparisons}
> +\end{listing}
> 
>  	Unfortunately, the compiler really can learn enough to
>  	break your dependency chain, for example, as shown in
> -	Figure~\ref{fig:memorder:Breakable Dependencies With Non-Constant Comparisons}.
> +	Listing~\ref{lst:memorder:Breakable Dependencies With Non-Constant Comparisons}.
>  	The compiler is within its rights to transform this code
>  	into that shown in
> -	Figure~\ref{fig:memorder:Broken Dependencies With Non-Constant Comparisons},
> +	Listing~\ref{lst:memorder:Broken Dependencies With Non-Constant Comparisons},
>  	and might well make this transformation due to register pressure
>  	if \co{handle_equality()} was inlined and needed a lot of registers.
>  	Line~10 of this transformed code uses \co{q}, which although
> @@ -3932,14 +3932,14 @@ hacker.
> 
>  The difference between Alpha and the other CPUs is illustrated by the
>  code shown in
> -Figure~\ref{fig:memorder:Insert and Lock-Free Search}.
> +Listing~\ref{lst:memorder:Insert and Lock-Free Search}.
>  This \co{smp_wmb()} on line~9 of this figure
>  guarantees that the element initialization
>  in lines~6-8 is executed before the element is added to the
>  list on line~10, so that the lock-free search will work correctly.
>  That is, it makes this guarantee on all CPUs {\em except} Alpha.
> 
> -\begin{figure}
> +\begin{listing}[tbp]
>  { \scriptsize
>  \begin{verbbox}
>    1 struct el *insert(long key, long data)
> @@ -3973,12 +3973,12 @@ That is, it makes this guarantee on all CPUs {\em except} Alpha.
>  \centering
>  \theverbbox
>  \caption{Insert and Lock-Free Search}
> -\label{fig:memorder:Insert and Lock-Free Search}
> -\end{figure}
> +\label{lst:memorder:Insert and Lock-Free Search}
> +\end{listing}
> 
>  Alpha has extremely weak memory ordering
>  such that the code on line~20 of
> -Figure~\ref{fig:memorder:Insert and Lock-Free Search} could see the old
> +Listing~\ref{lst:memorder:Insert and Lock-Free Search} could see the old
>  garbage values that were present before the initialization on lines~6-8.
> 
>  Figure~\ref{fig:memorder:Why smp-read-barrier-depends() is Required}
> @@ -3987,13 +3987,13 @@ an aggressively parallel machine with partitioned caches, so that
>  alternating cache lines are processed by the different partitions
>  of the caches.
>  For example, the load of \co{head.next} on line~17 of
> -Figure~\ref{fig:memorder:Insert and Lock-Free Search}
> +Listing~\ref{lst:memorder:Insert and Lock-Free Search}
>  might access cache bank~0,
>  and the load of \co{p->key} on line~20 and of \co{p->next} on line~23
>  might access cache bank~1.
>  On Alpha, the \co{smp_wmb()} will guarantee that the cache invalidations
>  performed by lines~6-8 of
> -Figure~\ref{fig:memorder:Insert and Lock-Free Search}
> +Listing~\ref{lst:memorder:Insert and Lock-Free Search}
>  (for \co{p->next}, \co{p->key}, and \co{p->data}) will reach
>  the interconnect before that of line~10 (for \co{head.next}), but
>  makes absolutely no guarantee about the order of
> @@ -4034,10 +4034,10 @@ Itanium, PPC, and SPARC) that respect data dependencies on the read side.
>  A \co{smp_read_barrier_depends()} primitive has therefore been added to the
>  Linux kernel to eliminate overhead on these systems.
>  This primitive could be inserted in place of line~19 of
> -Figure~\ref{fig:memorder:Insert and Lock-Free Search},
> +Listing~\ref{lst:memorder:Insert and Lock-Free Search},
>  but it is better to use the \co{rcu_dereference()} wrapper macro
>  as shown on lines~17 and~22 of
> -Figure~\ref{fig:memorder:Safe Insert and Lock-Free Search}.
> +Listing~\ref{lst:memorder:Safe Insert and Lock-Free Search}.
> 
>  It is also possible to implement a software barrier
>  that could be used in place of \co{smp_wmb()}, which would force
> @@ -4059,7 +4059,7 @@ fades off into the sunset, but as of 2017 there is a surprisingly
>  large number of people who run recent Linux kernels on their lovingly
>  preserved DEC Alpha systems.
> 
> -\begin{figure}
> +\begin{listing}[tbp]
>  { \scriptsize
>  \begin{verbbox}
>   1  struct el *insert(long key, long data)
> @@ -4092,8 +4092,8 @@ preserved DEC Alpha systems.
>  \centering
>  \theverbbox
>  \caption{Safe Insert and Lock-Free Search}
> -\label{fig:memorder:Safe Insert and Lock-Free Search}
> -\end{figure}
> +\label{lst:memorder:Safe Insert and Lock-Free Search}
> +\end{listing}
> 
>  The Linux memory-barrier primitives took their names from the Alpha
>  instructions, so \co{smp_mb()} is {\tt mb}, \co{smp_rmb()} is {\tt rmb},
> -- 
> 2.7.4
> 


      reply	other threads:[~2017-09-18 16:56 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-18 14:53 [PATCH] memorder: Convert remaining code snippets in figures to listings Akira Yokosawa
2017-09-18 16:56 ` Paul E. McKenney [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=20170918165606.GO3521@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=akiyks@gmail.com \
    --cc=perfbook@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.