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

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

 



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@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>

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
> 

--
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