[PATCH] defer/rcuapi: Merge Tables 9.3 and 9.4

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>From 1e4c0d9ae90cf0f5dcd44a27651614119aebef62 Mon Sep 17 00:00:00 2001
From: Akira Yokosawa <akiyks@xxxxxxxxx>
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@xxxxxxxxx>
---
 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

--
To unsubscribe from this list: send the line "unsubscribe perfbook" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux