* [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.