\documentclass{beamer}

\usepackage{beamerthemesplit}

\title{PersiFS: A Continuously~Versioned Network~File~System}
\author{Austin Clements, Dan Ports, Ben Schmeckpeper, Hector Yuen}
\date{Thursday, May 5, 2005}

\begin{document}

% Set up:
%  rm -r disk
%  ./persifsd persifs 2> /dev/null
%
%  cd /classfs/persifs/current
%  cp ~/persifs.pdf .
%  persifs now

% Start
%  rm *
%   "Unfortunately, that was the directory containing our
%   presentation. But that's okay! It was stored in PersiFS."
%  cd (copy now time)
%  acroread persifs.pdf
%  Switch desktops
%  Ctrl+L

\frame{\titlepage}

\section{Introduction}
\subsection{Overview}
\frame
{
  \frametitle{What is PersiFS?}

  \begin{itemize}
  \item<1-> A network file system
    % Speaks NFS.  Multiple users can access is simultaneously.
  \item<2-> A durable file system
    % Unlike some file systems, PersiFS actually stores its data on
    % the disk.  Furthermore, it manages its own disk layout, which
    % would be easy to store on the underlying disk.  As it is, our
    % preliminary implementation stores all of its state in just a few
    % large files.
  \item<3-> A continuously versioned file system
    % As suggested by the title, the key feature of PersiFS is that
    % it's continuously versioned
  \end{itemize}
}

\section{Features}
\frame
{
  \frametitle{Continuous Versioning}

  \begin{itemize}
  \item Access to complete file system at any point in the past
  \item Like AFS's OldFiles, but for every point in time
  \item Like CVS, but automatic and continuous
  \end{itemize}
}

\frame
{
  \frametitle{User interface}

  \begin{itemize}
  \item Magic root directory
  \item \texttt{/persifs/current} -- The latest, read/write version
  \item \texttt{/persifs/2004-05-25-12-00-00} -- Read-only snapshot as
    of high noon, last towel day
  \end{itemize}

  % (Switch back to terminal) You've already seen a demonstration of
  % this in action when we recovered our deleted presentation.
}

\section{Implementation}
\frame
{
  \frametitle{FS Components}

  \begin{itemize}
  \item<1-> Chunking
    \begin{itemize}
    \item Divides data into content-sensitive chunks for efficient
      storage of modifications
    \end{itemize}
  \item<2-> Superblob
    \begin{itemize}
    \item Stores chunks, indexed by chunk hashes
    \item Implements content-addressable storage
    \item Chunk fusion!
      % cd ../current
      % cp ~/alice30.txt .
      % persifs info
      % emacs alice30.txt
      % ``or two'' -> ``or three'' and reflow
      % close
      % persifs info
    \end{itemize}
  \item<3-> Inode log
    \begin{itemize}
    \item Stores sequence of inode changes over time
    \item Uses periodic inode map snapshots for efficient replay
    \item Compact!
    \end{itemize}
  \end{itemize}
}

\end{document}
