All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] defer/rcuapi: Merge Tables 9.3 and 9.4
@ 2016-07-24  2:39 Akira Yokosawa
  2016-07-25  0:06 ` Paul E. McKenney
  0 siblings, 1 reply; 2+ messages in thread
From: Akira Yokosawa @ 2016-07-24  2:39 UTC (permalink / raw)
  To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa

From 1e4c0d9ae90cf0f5dcd44a27651614119aebef62 Mon Sep 17 00:00:00 2001
From: Akira Yokosawa <akiyks@gmail.com>
Date: Sun, 24 Jul 2016 10:39:37 +0900
Subject: [PATCH] defer/rcuapi: Merge Tables 9.3 and 9.4

By using "sidewaystable" environment, Tables 9.3 and 9.4 can be
merged into a wider single table.

Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
---
 defer/rcuapi.tex | 112 ++++++++++++++++++++-----------------------------------
 perfbook.tex     |   1 +
 2 files changed, 41 insertions(+), 72 deletions(-)

diff --git a/defer/rcuapi.tex b/defer/rcuapi.tex
index 183bb8b..6f69115 100644
--- a/defer/rcuapi.tex
+++ b/defer/rcuapi.tex
@@ -16,159 +16,127 @@ presents concluding remarks.
 \subsubsection{RCU has a Family of Wait-to-Finish APIs}
 \label{sec:defer:RCU has a Family of Wait-to-Finish APIs}

-\begin{table*}[p]
+\begin{sidewaystable*}[htbp]
 \centering
-\scriptsize\tymin=1.1in
-\begin{tabulary}{5.9in}{L|L|L|L|L}
+\scriptsize\tymin=1.4in
+\begin{tabulary}{7.8in}{L|L|L|L|L|L}
 Attribute &
     RCU Classic &
 	RCU BH &
 	    RCU Sched &
-		Realtime RCU \\
+		Realtime RCU &
+		    SRCU \\
 \hline
 \hline
 Purpose &
     Original &
 	Prevent DDoS attacks &
 	    Wait for preempt-disable regions, hardirqs, \& NMIs &
-	        Realtime response \\
+	        Realtime response &
+		    Sleeping readers \\
 \hline
 Availability &
     2.5.43 &
 	2.6.9 &
 	    2.6.12 &
-	        2.6.26 \\
+		2.6.26 &
+		    2.6.19 \\
 \hline
 Read-side primitives &
-    \begin{minipage}[t]{1.0in}{ \raggedright
+    \begin{minipage}[t]{1.4in}{ \raggedright
       \co{rcu_read_lock()}~! \\
       \co{rcu_read_unlock()}~! }\end{minipage} &
-	\begin{minipage}[t]{1.0in}{ \raggedright
+	\begin{minipage}[t]{1.4in}{ \raggedright
 	  \co{rcu_read_lock_bh()} \\
 	  \co{rcu_read_unlock_bh()} }\end{minipage} &
-	    \begin{minipage}[t]{1.0in}{ \raggedright
+	    \begin{minipage}[t]{1.4in}{ \raggedright
 	      \co{preempt_disable()} \\
 	      \co{preempt_enable()} \\
 	      (and friends) }\end{minipage} &
-	        \begin{minipage}[t]{1.0in}{ \raggedright
+	        \begin{minipage}[t]{1.4in}{ \raggedright
 		  \co{rcu_read_lock()} \\
-		  \co{rcu_read_unlock()} }\end{minipage} \\
+		  \co{rcu_read_unlock()} }\end{minipage} &
+		    \begin{minipage}[t]{1.4in}{ \raggedright
+		      \co{srcu_read_lock()} \\
+		      \co{srcu_read_unlock()} }\end{minipage} \\
 \hline
 { Update-side primitives (synchronous) } &
     { \co{synchronize_rcu()} \co{synchronize_net()} } &
 	\co{synchronize_rcu_bh()} &
 	    \co{synchronize_sched()} &
-	        { \co{synchronize_rcu()} \co{synchronize_net()} } \\
+	        { \co{synchronize_rcu()} \co{synchronize_net()} } &
+		    \co{synchronize_srcu()} \\
 \hline
 { Update-side primitives (asynchronous/callback) } &
     \co{call_rcu()} ! &
 	\co{call_rcu_bh()} &
 	    \co{call_rcu_sched()} &
-	        \co{call_rcu()} \\
+	        \co{call_rcu()} &
+		    \co{call_srcu()} \\
 \hline
 { Update-side primitives (wait for callbacks) } &
     \co{rcu_barrier()} &
 	\co{rcu_barrier_bh()} &
 	    \co{rcu_barrier_sched()} &
-	        \co{rcu_barrier()} \\
+	        \co{rcu_barrier()} &
+		    N/A \\
 \hline
 Type-safe memory &
     \co{SLAB_DESTROY_BY_RCU} &
 	&
 	    &
-	        \co{SLAB_DESTROY_BY_RCU} \\
+	        \co{SLAB_DESTROY_BY_RCU} &
+		    \\
 \hline
 Read side constraints &
     No blocking &
 	No bottom-half (BH) enabling &
 	    No blocking &
-	        Only preemption and lock acquisition \\
+	        Only preemption and lock acquisition &
+		    No \co{synchronize_srcu()} wtih same \co{srcu_struct} \\
 \hline
 Read side overhead &
     Preempt disable/enable (free on non-PREEMPT) &
 	BH disable/enable &
 	    Preempt disable/enable (free on non-PREEMPT) &
-	        Simple instructions, irq disable/enable \\
+	        Simple instructions, irq disable/enable &
+		    Simple instructions, preempt disable/enable, memory barriers \\
 \hline
 Asynchronous update-side overhead &
     sub-microsecond &
 	sub-microsecond &
 	    sub-microsecond &
-	        sub-microsecond \\
+	        sub-microsecond &
+		    N/A \\
 \hline
 Grace-period latency &
     10s of milliseconds &
 	10s of milliseconds &
 	    10s of milliseconds &
-	        10s of milliseconds \\
+	        10s of milliseconds &
+		    10s of milliseconds \\
 \hline
 Non-\co{PREEMPT_RT} implementation &
     RCU Classic &
 	RCU BH &
 	    RCU Classic &
-	        Preemptible RCU \\
+	        Preemptible RCU &
+		    SRCU \\
 \hline
 \co{PREEMPT_RT} implementation &
     Preemptible RCU &
 	Realtime RCU &
 	    Forced Schedule on all CPUs &
-	        Realtime RCU \\
+	        Realtime RCU &
+		    SRCU \\
 \end{tabulary}
 \caption{RCU Wait-to-Finish APIs}
 \label{tab:defer:RCU Wait-to-Finish APIs}
-\end{table*}
-
-\begin{table*}[p]
-\centering
-\scriptsize\tymin=1.1in\tymax=1.5in
-\begin{tabulary}{4.5in}{L|L}
-Attribute &
-    SRCU \\
-\hline
-\hline
-Purpose &
-    Sleeping readers \\
-\hline
-Availability &
-    2.6.19 \\
-\hline
-Read-side primitives &
-    \begin{minipage}[t]{1.5in}{ \raggedright
-      \co{srcu_read_lock()} \\
-      \co{srcu_read_unlock()} }\end{minipage} \\
-\hline
-Update-side primitives (synchronous) &
-    \co{synchronize_srcu()} \\
-\hline
-Update-side primitives (asynchronous/callback) &
-    \co{call_srcu()} \\
-\hline
-Update-side primitives (wait for callbacks) &
-    N/A \\
-\hline
-Type-safe memory &
-    \\
-\hline
-Read side constraints &
-    No \co{synchronize_srcu()} wtih same \co{srcu_struct} \\
-\hline
-Read side overhead &
-    Simple instructions, preempt disable/enable, memory barriers \\
-\hline
-Asynchronous update-side overhead &
-    N/A \\
-\hline
-Grace-period latency &
-    10s of milliseconds \\
-\end{tabulary}
-\caption{Sleepable RCU Wait-to-Finish APIs}
-\label{tab:defer:Sleepable RCU Wait-to-Finish APIs}
-\end{table*}
+\end{sidewaystable*}

 The most straightforward answer to ``what is RCU'' is that RCU is
 an API used in the Linux kernel, as summarized by
-Tables~\ref{tab:defer:RCU Wait-to-Finish APIs} and
-\ref{tab:defer:Sleepable RCU Wait-to-Finish APIs},
+Table~\ref{tab:defer:RCU Wait-to-Finish APIs},
 which shows the wait-for-RCU-readers portions of the non-sleepable and
 sleepable APIs, respectively,
 and by
@@ -386,7 +354,7 @@ elsewhere~\cite{PaulEMcKenney2007PreemptibleRCU}.
 } \QuickQuizEnd

 The ``SRCU'' column in
-Table~\ref{tab:defer:Sleepable RCU Wait-to-Finish APIs}
+Table~\ref{tab:defer:RCU Wait-to-Finish APIs}
 displays a specialized RCU API that permits
 general sleeping in RCU read-side critical
 sections~\cite{PaulEMcKenney2006c}.
diff --git a/perfbook.tex b/perfbook.tex
index 493c05a..9216485 100644
--- a/perfbook.tex
+++ b/perfbook.tex
@@ -15,6 +15,7 @@
 \usepackage{subfigure}
 % \usepackage{breakurl}
 \usepackage{graphicx}
+\usepackage{rotating}
 \usepackage{enumerate}
 \usepackage{ifthen}
 \usepackage{xcolor}
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] defer/rcuapi: Merge Tables 9.3 and 9.4
  2016-07-24  2:39 [PATCH] defer/rcuapi: Merge Tables 9.3 and 9.4 Akira Yokosawa
@ 2016-07-25  0:06 ` Paul E. McKenney
  0 siblings, 0 replies; 2+ messages in thread
From: Paul E. McKenney @ 2016-07-25  0:06 UTC (permalink / raw)
  To: Akira Yokosawa; +Cc: perfbook

On Sun, Jul 24, 2016 at 11:39:54AM +0900, Akira Yokosawa wrote:
> >From 1e4c0d9ae90cf0f5dcd44a27651614119aebef62 Mon Sep 17 00:00:00 2001
> From: Akira Yokosawa <akiyks@gmail.com>
> Date: Sun, 24 Jul 2016 10:39:37 +0900
> Subject: [PATCH] defer/rcuapi: Merge Tables 9.3 and 9.4
> 
> By using "sidewaystable" environment, Tables 9.3 and 9.4 can be
> merged into a wider single table.
> 
> Signed-off-by: Akira Yokosawa <akiyks@gmail.com>

Nice!  Applied and pushed, thank you!

							Thanx, Paul

> ---
>  defer/rcuapi.tex | 112 ++++++++++++++++++++-----------------------------------
>  perfbook.tex     |   1 +
>  2 files changed, 41 insertions(+), 72 deletions(-)
> 
> diff --git a/defer/rcuapi.tex b/defer/rcuapi.tex
> index 183bb8b..6f69115 100644
> --- a/defer/rcuapi.tex
> +++ b/defer/rcuapi.tex
> @@ -16,159 +16,127 @@ presents concluding remarks.
>  \subsubsection{RCU has a Family of Wait-to-Finish APIs}
>  \label{sec:defer:RCU has a Family of Wait-to-Finish APIs}
> 
> -\begin{table*}[p]
> +\begin{sidewaystable*}[htbp]
>  \centering
> -\scriptsize\tymin=1.1in
> -\begin{tabulary}{5.9in}{L|L|L|L|L}
> +\scriptsize\tymin=1.4in
> +\begin{tabulary}{7.8in}{L|L|L|L|L|L}
>  Attribute &
>      RCU Classic &
>  	RCU BH &
>  	    RCU Sched &
> -		Realtime RCU \\
> +		Realtime RCU &
> +		    SRCU \\
>  \hline
>  \hline
>  Purpose &
>      Original &
>  	Prevent DDoS attacks &
>  	    Wait for preempt-disable regions, hardirqs, \& NMIs &
> -	        Realtime response \\
> +	        Realtime response &
> +		    Sleeping readers \\
>  \hline
>  Availability &
>      2.5.43 &
>  	2.6.9 &
>  	    2.6.12 &
> -	        2.6.26 \\
> +		2.6.26 &
> +		    2.6.19 \\
>  \hline
>  Read-side primitives &
> -    \begin{minipage}[t]{1.0in}{ \raggedright
> +    \begin{minipage}[t]{1.4in}{ \raggedright
>        \co{rcu_read_lock()}~! \\
>        \co{rcu_read_unlock()}~! }\end{minipage} &
> -	\begin{minipage}[t]{1.0in}{ \raggedright
> +	\begin{minipage}[t]{1.4in}{ \raggedright
>  	  \co{rcu_read_lock_bh()} \\
>  	  \co{rcu_read_unlock_bh()} }\end{minipage} &
> -	    \begin{minipage}[t]{1.0in}{ \raggedright
> +	    \begin{minipage}[t]{1.4in}{ \raggedright
>  	      \co{preempt_disable()} \\
>  	      \co{preempt_enable()} \\
>  	      (and friends) }\end{minipage} &
> -	        \begin{minipage}[t]{1.0in}{ \raggedright
> +	        \begin{minipage}[t]{1.4in}{ \raggedright
>  		  \co{rcu_read_lock()} \\
> -		  \co{rcu_read_unlock()} }\end{minipage} \\
> +		  \co{rcu_read_unlock()} }\end{minipage} &
> +		    \begin{minipage}[t]{1.4in}{ \raggedright
> +		      \co{srcu_read_lock()} \\
> +		      \co{srcu_read_unlock()} }\end{minipage} \\
>  \hline
>  { Update-side primitives (synchronous) } &
>      { \co{synchronize_rcu()} \co{synchronize_net()} } &
>  	\co{synchronize_rcu_bh()} &
>  	    \co{synchronize_sched()} &
> -	        { \co{synchronize_rcu()} \co{synchronize_net()} } \\
> +	        { \co{synchronize_rcu()} \co{synchronize_net()} } &
> +		    \co{synchronize_srcu()} \\
>  \hline
>  { Update-side primitives (asynchronous/callback) } &
>      \co{call_rcu()} ! &
>  	\co{call_rcu_bh()} &
>  	    \co{call_rcu_sched()} &
> -	        \co{call_rcu()} \\
> +	        \co{call_rcu()} &
> +		    \co{call_srcu()} \\
>  \hline
>  { Update-side primitives (wait for callbacks) } &
>      \co{rcu_barrier()} &
>  	\co{rcu_barrier_bh()} &
>  	    \co{rcu_barrier_sched()} &
> -	        \co{rcu_barrier()} \\
> +	        \co{rcu_barrier()} &
> +		    N/A \\
>  \hline
>  Type-safe memory &
>      \co{SLAB_DESTROY_BY_RCU} &
>  	&
>  	    &
> -	        \co{SLAB_DESTROY_BY_RCU} \\
> +	        \co{SLAB_DESTROY_BY_RCU} &
> +		    \\
>  \hline
>  Read side constraints &
>      No blocking &
>  	No bottom-half (BH) enabling &
>  	    No blocking &
> -	        Only preemption and lock acquisition \\
> +	        Only preemption and lock acquisition &
> +		    No \co{synchronize_srcu()} wtih same \co{srcu_struct} \\
>  \hline
>  Read side overhead &
>      Preempt disable/enable (free on non-PREEMPT) &
>  	BH disable/enable &
>  	    Preempt disable/enable (free on non-PREEMPT) &
> -	        Simple instructions, irq disable/enable \\
> +	        Simple instructions, irq disable/enable &
> +		    Simple instructions, preempt disable/enable, memory barriers \\
>  \hline
>  Asynchronous update-side overhead &
>      sub-microsecond &
>  	sub-microsecond &
>  	    sub-microsecond &
> -	        sub-microsecond \\
> +	        sub-microsecond &
> +		    N/A \\
>  \hline
>  Grace-period latency &
>      10s of milliseconds &
>  	10s of milliseconds &
>  	    10s of milliseconds &
> -	        10s of milliseconds \\
> +	        10s of milliseconds &
> +		    10s of milliseconds \\
>  \hline
>  Non-\co{PREEMPT_RT} implementation &
>      RCU Classic &
>  	RCU BH &
>  	    RCU Classic &
> -	        Preemptible RCU \\
> +	        Preemptible RCU &
> +		    SRCU \\
>  \hline
>  \co{PREEMPT_RT} implementation &
>      Preemptible RCU &
>  	Realtime RCU &
>  	    Forced Schedule on all CPUs &
> -	        Realtime RCU \\
> +	        Realtime RCU &
> +		    SRCU \\
>  \end{tabulary}
>  \caption{RCU Wait-to-Finish APIs}
>  \label{tab:defer:RCU Wait-to-Finish APIs}
> -\end{table*}
> -
> -\begin{table*}[p]
> -\centering
> -\scriptsize\tymin=1.1in\tymax=1.5in
> -\begin{tabulary}{4.5in}{L|L}
> -Attribute &
> -    SRCU \\
> -\hline
> -\hline
> -Purpose &
> -    Sleeping readers \\
> -\hline
> -Availability &
> -    2.6.19 \\
> -\hline
> -Read-side primitives &
> -    \begin{minipage}[t]{1.5in}{ \raggedright
> -      \co{srcu_read_lock()} \\
> -      \co{srcu_read_unlock()} }\end{minipage} \\
> -\hline
> -Update-side primitives (synchronous) &
> -    \co{synchronize_srcu()} \\
> -\hline
> -Update-side primitives (asynchronous/callback) &
> -    \co{call_srcu()} \\
> -\hline
> -Update-side primitives (wait for callbacks) &
> -    N/A \\
> -\hline
> -Type-safe memory &
> -    \\
> -\hline
> -Read side constraints &
> -    No \co{synchronize_srcu()} wtih same \co{srcu_struct} \\
> -\hline
> -Read side overhead &
> -    Simple instructions, preempt disable/enable, memory barriers \\
> -\hline
> -Asynchronous update-side overhead &
> -    N/A \\
> -\hline
> -Grace-period latency &
> -    10s of milliseconds \\
> -\end{tabulary}
> -\caption{Sleepable RCU Wait-to-Finish APIs}
> -\label{tab:defer:Sleepable RCU Wait-to-Finish APIs}
> -\end{table*}
> +\end{sidewaystable*}
> 
>  The most straightforward answer to ``what is RCU'' is that RCU is
>  an API used in the Linux kernel, as summarized by
> -Tables~\ref{tab:defer:RCU Wait-to-Finish APIs} and
> -\ref{tab:defer:Sleepable RCU Wait-to-Finish APIs},
> +Table~\ref{tab:defer:RCU Wait-to-Finish APIs},
>  which shows the wait-for-RCU-readers portions of the non-sleepable and
>  sleepable APIs, respectively,
>  and by
> @@ -386,7 +354,7 @@ elsewhere~\cite{PaulEMcKenney2007PreemptibleRCU}.
>  } \QuickQuizEnd
> 
>  The ``SRCU'' column in
> -Table~\ref{tab:defer:Sleepable RCU Wait-to-Finish APIs}
> +Table~\ref{tab:defer:RCU Wait-to-Finish APIs}
>  displays a specialized RCU API that permits
>  general sleeping in RCU read-side critical
>  sections~\cite{PaulEMcKenney2006c}.
> diff --git a/perfbook.tex b/perfbook.tex
> index 493c05a..9216485 100644
> --- a/perfbook.tex
> +++ b/perfbook.tex
> @@ -15,6 +15,7 @@
>  \usepackage{subfigure}
>  % \usepackage{breakurl}
>  \usepackage{graphicx}
> +\usepackage{rotating}
>  \usepackage{enumerate}
>  \usepackage{ifthen}
>  \usepackage{xcolor}
> -- 
> 1.9.1
> 


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-07-25  0:05 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-24  2:39 [PATCH] defer/rcuapi: Merge Tables 9.3 and 9.4 Akira Yokosawa
2016-07-25  0:06 ` Paul E. McKenney

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.