From b3410088cbaead5ed42f9069dc1c20bd7f20fb51 Mon Sep 17 00:00:00 2001 From: John Ogness Date: Fri, 2 Nov 2018 14:28:24 +0106 Subject: printk: add printk slides from elce2018 Signed-off-by: John Ogness --- misc/pres_printk_en.tex | 123 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 misc/pres_printk_en.tex (limited to 'misc/pres_printk_en.tex') diff --git a/misc/pres_printk_en.tex b/misc/pres_printk_en.tex new file mode 100644 index 0000000..f6e0640 --- /dev/null +++ b/misc/pres_printk_en.tex @@ -0,0 +1,123 @@ +\input{configpres} +\date{2018-10-25} + +\section{printk} + +\title{Cleaning Up printk()} +\author{John Ogness} + +\maketitle + +\newcommand\verbbf[1]{\textcolor[rgb]{0,0,0}{\textbf{#1}}} + +\subsection{printk: Issues} + +\begin{frame}[containsverbatim] +\begin{itemize} +\item global log buffer protected by \verb|raw_spinlock| +\begin{itemize} +\item disables interrupts +\item not NMI safe +\item not recursive safe +\end{itemize} +\item \verb|printk_safe| +\begin{itemize} +\item relies on \verb|irq_work| +\item bogus timestamps +\end{itemize} +\item console drivers +\begin{itemize} +\item slow (serial, video, netconsole) +\item executed by \verb|printk()| caller (possibly atomic) +\end{itemize} +\item INFO handled the same as EMERG +\begin{itemize} +\item \verb|BUG()| is worth the pain, but ''\verb|USB Video Class driver (1.1.1)|''? +\end{itemize} +\item last \verb|printk()| stuck with the bill +\begin{itemize} +\item it is not unbounded but it is a big wildcard +\end{itemize} +\item \verb|oops_in_progress| and \verb|bust_spinlocks()| +\begin{itemize} +\item um, yeah +\end{itemize} +\end{itemize} +\end{frame} + +\subsection{printk: Proposal} + +\begin{frame}[containsverbatim] +\begin{itemize} +\item new static global lockless multi-reader multi-writer ring buffer +\begin{itemize} +\item interrupts never disabled +\item NMI safe +\item recursive safe +\item available immediately +\item obsoletes \verb|printk_safe| (log directly from \textbf{any} context) +\end{itemize} +\item grab timestamp as first line of \verb|printk()| +\begin{itemize} +\item accurate timestamps +\end{itemize} +\item create a single \verb|printk| kthread to handle printing to all consoles +\begin{itemize} +\item fully preemptible +\item console driver pain goes away +\end{itemize} +\item introduce a \verb|write_atomic()| operation for consoles +\begin{itemize} +\item optional, NMI safe write implementation +\end{itemize} +\item introduce the concept of ''emergency messages'' +\begin{itemize} +\item If a message is flagged for emergency and a console implements \verb|write_atomic()|, print the message for that console \textbf{directly} +\item We are already sitting on the CPU! Use it! +\item \verb|write_atomic()| for UART 8250 implemented as an example +\end{itemize} +\item add CPU ID to output to flag and sort messages +\begin{itemize} +\item simultaneous emergency/non-emergency messages +\item simultaneous emergency messages +\end{itemize} +\end{itemize} +\end{frame} + +\subsection{printk: Proposal: Issues} + +\begin{frame}[containsverbatim] +\begin{itemize} +\item messages printed out of order +\begin{itemize} +\item but timestamps have meaning +\end{itemize} +\item \verb|LOG_CONT| not yet implemented +\begin{itemize} +\item need to decide how best to implement it +\end{itemize} +\item the new ring buffer does not support dynamic resizing +\begin{itemize} +\item not looked into yet +\end{itemize} +\item vmcore data changes +\begin{itemize} +\item userspace ABI changes +\end{itemize} +\end{itemize} +\end{frame} + +\subsection{} + +\begin{frame}[containsverbatim] +\frametitle{Questions / Comments} +Thank you for your attention! +\vskip30pt +\begin{Verbatim}[commandchars=\\\{\}] + + +RCPT TO: +\end{Verbatim} +\end{frame} + +\end{document} -- cgit v1.2.3