summaryrefslogtreecommitdiff
path: root/usenix2019.tex
diff options
context:
space:
mode:
Diffstat (limited to 'usenix2019.tex')
-rw-r--r--usenix2019.tex324
1 files changed, 324 insertions, 0 deletions
diff --git a/usenix2019.tex b/usenix2019.tex
new file mode 100644
index 0000000..34557a4
--- /dev/null
+++ b/usenix2019.tex
@@ -0,0 +1,324 @@
+% TEMPLATE for Usenix papers, specifically to meet requirements of
+% USENIX '05
+% originally a template for producing IEEE-format articles using LaTeX.
+% written by Matthew Ward, CS Department, Worcester Polytechnic Institute.
+% adapted by David Beazley for his excellent SWIG paper in Proceedings,
+% Tcl 96
+% turned into a smartass generic template by De Clarke, with thanks to
+% both the above pioneers
+% use at your own risk. Complaints to /dev/null.
+% make it two column with no page numbering, default is 10 point
+
+% Munged by Fred Douglis <douglis@research.att.com> 10/97 to separate
+% the .sty file from the LaTeX source template, so that people can
+% more easily include the .sty file into an existing document. Also
+% changed to more closely follow the style guidelines as represented
+% by the Word sample file.
+
+% Note that since 2010, USENIX does not require endnotes. If you want
+% foot of page notes, don't include the endnotes package in the
+% usepackage command, below.
+
+% This version uses the latex2e styles, not the very ancient 2.09 stuff.
+\documentclass[letterpaper,twocolumn,10pt]{article}
+% \usepackage{usenix2019,epsfig,endnotes}
+\usepackage{usenix2019,epsfig}
+
+\begin{document}
+
+%don't want date printed
+\date{}
+
+%make title bold and 14 pt font (Latex default is non-bold, 16 pt)
+\title{\Large \bf bcachefs : A next generation filesystem }
+
+%for single author (just remove % characters)
+\author{
+{\rm Kent Overstreet}\\
+\and
+{\rm Second Name}\\
+Second Institution
+% copy the following lines to add more authors
+% \and
+% {\rm Name}\\
+%Name Institution
+} % end author
+
+\maketitle
+
+% Use the following at camera-ready time to suppress page numbers.
+% Comment it out when you first submit the paper for review.
+\thispagestyle{empty}
+
+
+\subsection*{Abstract}
+
+bcachefs is a new b-tree based, CoW local POSIX filesystem for Linux. Here we
+describe the background, status, and an overview of the key design elements.
+
+\section{Introduction}
+
+\subsection{What is bcachefs?}
+
+bcachefs is a full featured POSIX filesystem, with a featureset aimed at
+competing with ZFS, btrfs and xfs. Existing features include:
+
+\begin{itemize}
+ \item Copy on Write
+ \item Full data checksumming
+ \item Compression
+ \item Encryption (AEAD style encryption using ChaCha20 and Poly1305)
+ \item Multi-device
+ \item Replication
+ \item Online grow/shrink and add/remove of devices, and a completely
+ flexible data layout
+ \item Tiering/caching (both writethrough and writeback; IO stack is in
+ fact policy driven now)
+\end{itemize}
+Upcoming features:
+\begin{itemize}
+ \item Erasure coding (Reed-Solomon, with ability to add others)
+ \item Snapshotting
+\end{itemize}
+
+\subsection{Status}
+
+bcachefs is in outside use by a small community of early adopters and testers,
+and likely soon in a production capacity as well. Upstreaming is hopefully
+imminent as there are no blockers left on the bcachefs side.
+
+\section{What makes bcachefs interesting?}
+
+\begin{itemize}
+ \item The design is a major departure from existing filesystems. In
+ particular it is constructed more as a layer on top of a generic
+ key-value store, with much more consistent handling of metadata
+ and on disk data structures.
+ \item This simplification is possible because we have a very
+ sophisticated and scalable b-tree implementation, which has been
+ under development for nearly 10 years now, inherited from
+ bcache.
+\end{itemize}
+
+\section{bcachefs design novelties}
+
+\begin{itemize}
+ \item Auxiliary search tree for searching within a btree node
+
+\end{itemize}
+
+
+
+\section{bcachefs design fetaures}
+
+\subsection{Filesystem as RDBMS}
+
+In bcachefs, all metadata is organized into a small number of "btree" -
+effectively tables:
+
+\begin{itemize}
+ \item Inodes table
+ \item Extents table
+ \item Dirents table
+ \item Xattrs table
+ \item etc.
+\end{itemize}
+
+This is a major departure from most existing filesystems, where most data
+structures hang off of the inodes. This isn't an unreasonable way to do things -
+it's an effective way to shard most data structures and historically, those data
+structures weren't particularly scalable so you really wanted that sharding
+(i.e. block based filesystems that used the double/triple indirect block
+scheme).
+
+But bcachefs's history meant that we started out with a btree implementation
+scalable enough that we no longer needed that sharding - bcache uses a single
+btree for indexing every cached extent, regardless of the number of volumes
+being cached (and a cached volume in bcache is equivalent to a file in
+bcachefs).
+
+This means we have a single unified, iterator based API for manipulating
+essentially all filesystem data (everything not stored in the superblock), and
+that metadata is all in a single flat namespace.
+
+This is a huge win for the complexity of the filesystem code itself. Rename, for
+example, is just a couple of operations on keys in the dirents btree, done
+atomically in a single update operation - drastically simpler than most other
+filesystems.
+
+Even better, we don't need complex logging to make high level filesystem
+operations like create, link and rename atomic. Instead, they make heavy use of
+the btree's ability to use multiple iterators simultaneously, and then the final
+update is done by passing a list of (iterator, new key) pairs to the btree
+update path - for atomicity, all that is required is that the btree update path
+use the same journal reservation for all the updates to be done.
+
+This make journalling and in particular journal replay drastically simpler than
+on other contemporary filesystems.
+
+
+
+
+
+
+A paragraph of text goes here. Lots of text. Plenty of interesting
+text. \\
+
+% More fascinating text. Features\endnote{Remember to use endnotes, not footnotes!} galore, plethora of promises.\\
+
+\section{This is Another Section}
+
+Some embedded literal typset code might
+look like the following :
+
+{\tt \small
+\begin{verbatim}
+int wrap_fact(ClientData clientData,
+ Tcl_Interp *interp,
+ int argc, char *argv[]) {
+ int result;
+ int arg0;
+ if (argc != 2) {
+ interp->result = "wrong # args";
+ return TCL_ERROR;
+ }
+ arg0 = atoi(argv[1]);
+ result = fact(arg0);
+ sprintf(interp->result,"%d",result);
+ return TCL_OK;
+}
+\end{verbatim}
+}
+
+Now we're going to cite somebody. Watch for the cite tag.
+Here it comes~\cite{Chaum1981,Diffie1976}. The tilde character (\~{})
+in the source means a non-breaking space. This way, your reference will
+always be attached to the word that preceded it, instead of going to the
+next line.
+
+\section{This Section has SubSections}
+\subsection{First SubSection}
+
+Here's a typical figure reference. The figure is centered at the
+top of the column. It's scaled. It's explicitly placed. You'll
+have to tweak the numbers to get what you want.\\
+
+% you can also use the wonderful epsfig package...
+\begin{figure}[t]
+\begin{center}
+\begin{picture}(300,150)(0,200)
+\put(-15,-30){\special{psfile = fig1.ps hscale = 50 vscale = 50}}
+\end{picture}\\
+\end{center}
+\caption{Wonderful Flowchart}
+\end{figure}
+
+This text came after the figure, so we'll casually refer to Figure 1
+as we go on our merry way.
+
+\subsection{New Subsection}
+
+It can get tricky typesetting Tcl and C code in LaTeX because they share
+a lot of mystical feelings about certain magic characters. You
+will have to do a lot of escaping to typeset curly braces and percent
+signs, for example, like this:
+``The {\tt \%module} directive
+sets the name of the initialization function. This is optional, but is
+recommended if building a Tcl 7.5 module.
+Everything inside the {\tt \%\{, \%\}}
+block is copied directly into the output. allowing the inclusion of
+header files and additional C code." \\
+
+Sometimes you want to really call attention to a piece of text. You
+can center it in the column like this:
+\begin{center}
+{\tt \_1008e614\_Vector\_p}
+\end{center}
+and people will really notice it.\\
+
+\noindent
+The noindent at the start of this paragraph makes it clear that it's
+a continuation of the preceding text, not a new para in its own right.
+
+
+Now this is an ingenious way to get a forced space.
+{\tt Real~$*$} and {\tt double~$*$} are equivalent.
+
+Now here is another way to call attention to a line of code, but instead
+of centering it, we noindent and bold it.\\
+
+\noindent
+{\bf \tt size\_t : fread ptr size nobj stream } \\
+
+And here we have made an indented para like a definition tag (dt)
+in HTML. You don't need a surrounding list macro pair.
+\begin{itemize}
+\item[] {\tt fread} reads from {\tt stream} into the array {\tt ptr} at
+most {\tt nobj} objects of size {\tt size}. {\tt fread} returns
+the number of objects read.
+\end{itemize}
+This concludes the definitions tag.
+
+\subsection{How to Build Your Paper}
+
+You have to run {\tt latex} once to prepare your references for
+munging. Then run {\tt bibtex} to build your bibliography metadata.
+Then run {\tt latex} twice to ensure all references have been resolved.
+If your source file is called {\tt usenixTemplate.tex} and your {\tt
+ bibtex} file is called {\tt usenixTemplate.bib}, here's what you do:
+{\tt \small
+\begin{verbatim}
+latex usenixTemplate
+bibtex usenixTemplate
+latex usenixTemplate
+latex usenixTemplate
+\end{verbatim}
+}
+
+
+\subsection{Last SubSection}
+
+Well, it's getting boring isn't it. This is the last subsection
+before we wrap it up.
+
+\section{Acknowledgments}
+
+A polite author always includes acknowledgments. Thank everyone,
+especially those who funded the work.
+
+\section{Availability}
+
+It's great when this section says that MyWonderfulApp is free software,
+available via anonymous FTP from
+
+\begin{center}
+{\tt ftp.site.dom/pub/myname/Wonderful}\\
+\end{center}
+
+Also, it's even greater when you can write that information is also
+available on the Wonderful homepage at
+
+\begin{center}
+{\tt http://www.site.dom/\~{}myname/SWIG}
+\end{center}
+
+Now we get serious and fill in those references. Remember you will
+have to run latex twice on the document in order to resolve those
+cite tags you met earlier. This is where they get resolved.
+We've preserved some real ones in addition to the template-speak.
+After the bibliography you are DONE.
+
+{\footnotesize \bibliographystyle{acm}
+\bibliography{../common/bibliography}}
+
+
+% \theendnotes
+
+\end{document}
+
+
+
+
+
+
+