%\documentclass[notes=onlyslideswithnotes]{beamer}
\documentclass[notes=hide]{beamer}
%\documentclass[handout]{beamer}
%\usepackage{beamerthemesplit}
\usetheme{Copenhagen}
\usepackage{graphics}
\usepackage{graphicx}
\usepackage{pifont}
\usepackage{ulem}

\setbeamerfont{title}{size=\normalsize}
\setbeamerfont{subtitle}{size=\small}
\setbeamerfont{author}{size=\small}
\setbeamerfont{date}{size=\small}

\title{Canopy}
\subtitle{A Controlled~Emulation~Environment for Network~System~Experimentation}
\author{Dan~Ports, Austin~Clements, and Jeff~Arnold}
\date{Thursday, December 8, 2005}
\institute{MIT 6.829 Project}

% Nuke navigation toolbar
\setbeamertemplate{navigation symbols}{}

\begin{document}

\frame{\titlepage}

\section{Introduction}
\frame{\tableofcontents[currentsection,hideallsubsections]}

\begin{frame}
  \frametitle{Why Debugging Networked Systems is Hard}
\begin{itemize}
\item <2-> Scale and Isolation
  \begin{itemize}
  \item <3-> Want efficient centralized control
  \end{itemize}
\item <4-> Tolerance to Varying Conditions
  \begin{itemize}
  \item <5-> Want to be able to see how various conditions affect the system
  \end{itemize}
\end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Debugger Wish List}
\begin{itemize}
\item <2-> Rollback to any time 
  \begin{itemize}
  \item <3-> Efficient incremental snapshots 
  \end{itemize}
\item <2-> Replay with only specified changes
  \begin{itemize}
  \item <4-> Fully deterministic virtual machines
  \end{itemize}
\item <2-> Want scalable centralized control
  \begin{itemize}
  \item <5-> Master/slave system w/ barrier sync 
  \end{itemize}
\end{itemize}
\end{frame}

% Discuss related work at all?
%\begin{frame}{Distinguishing Features of Canopy}
%  \begin{itemize}
%  \item<2-> Entire Machine Emulation
%  \item<3-> Deterministic Replay with only Specified Changes
%  \item<4-> Designed to be Run on Many Physical Nodes
%  \end{itemize}
%\end{frame}

\section{System Design Details}

\begin{frame}
  \frametitle{Definitions and Overview}
  \begin{center}
    \includegraphics{arch}
  \end{center}

% Introduce:
% Virtual Nodes and Physical Nodes
% Slave Daemon and Master Daemon
\end{frame}


\begin{frame}
  \frametitle{Barrier Synchronization}
\begin{itemize}
\item Every packet arrives at its physical node before its virtual node needs it
\item Barriers every 10 msec
\end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Snapshotting and Restoring}
\begin{itemize}
\item Incremental snapshot of every virtual node at every n barriers
\item Rely on deterministic replay in order to restore to times without snapshots
\end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Achieving Deterministic Replay}
\begin{itemize}
\item Control over hardware that OS uses to gather entropy
\item Control over virtual time
  \begin{itemize}
  \item Also allows for control of relative CPU speeds
  \end{itemize}
\end{itemize}
\end{frame}

\section{Demonstrations}

\begin{frame}
  \frametitle{Demonstrations}
\begin{itemize}
\item Ping
\item HTTP download with packet loss
%\item RMTP
\end{itemize}

\end{frame}

\section{Conclusions}

\begin{frame}
  \frametitle{Conclusions}
\begin{itemize}
\item Debugging networked systems is hard
\item Canopy makes debugging networked systems easier using:
  \begin{itemize}
  \item Centralized control
  \item Global rollback
  \item Deterministic replay with only specified changes
  \end{itemize}
\item Canopy scales approximately linearly with hardware
\end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Future Work}
\begin{itemize}
\item Quantify Performance Impact of using Canopy as a Debugging Environment
\item More Sophisticated Network Model
\item Improved User Interface
\end{itemize}
\end{frame}

\end{document}
