summaryrefslogtreecommitdiffstats
path: root/presentation/images
diff options
context:
space:
mode:
authorManuel Bentele2019-08-31 14:35:04 +0200
committerManuel Bentele2019-08-31 14:35:04 +0200
commit7fd1fc4295412047f31039c4a28089d16a910d24 (patch)
treefd64ce8c83f0e37f3b1e38818c6c47339a103ff8 /presentation/images
parentFixed initialization issue in backward compatibility mode (diff)
downloadkernel-qcow2-7fd1fc4295412047f31039c4a28089d16a910d24.tar.gz
kernel-qcow2-7fd1fc4295412047f31039c4a28089d16a910d24.tar.xz
kernel-qcow2-7fd1fc4295412047f31039c4a28089d16a910d24.zip
Added project presentationHEADmaster
Diffstat (limited to 'presentation/images')
-rw-r--r--presentation/images/file_fmt_subsystem_integration.tex32
-rw-r--r--presentation/images/linux_storage_stack.tex64
-rw-r--r--presentation/images/qcow2_addressing.tex63
-rw-r--r--presentation/images/qcow2_performance.tex36
-rw-r--r--presentation/images/qcow2_reading.tex55
-rw-r--r--presentation/images/qcow2_structure.tex21
6 files changed, 271 insertions, 0 deletions
diff --git a/presentation/images/file_fmt_subsystem_integration.tex b/presentation/images/file_fmt_subsystem_integration.tex
new file mode 100644
index 0000000..a18be3f
--- /dev/null
+++ b/presentation/images/file_fmt_subsystem_integration.tex
@@ -0,0 +1,32 @@
+%-------------------------------------------------------------------------------
+% file_fmt_subsystem_integration.tex - subsystem integration as image
+%-------------------------------------------------------------------------------
+% author : Manuel Bentele
+% date : Aug 29, 2019
+% copyright: (c) 2019 Manuel Bentele
+%-------------------------------------------------------------------------------
+
+\begin{tikzpicture}[
+ box/.style = {rectangle, draw, minimum height = 0.15\textheight},
+ bwidth/.style = {minimum width = 0.35\textwidth},
+ old/.style = {dashed, fill = gray!10},
+ arrow/.style = {-triangle 45},
+ desc/.style = {font = \small}
+ ]
+ \node[box, old, minimum height = 0.08\textheight, bwidth] (blk) {Block layer};
+ \node[box, old, below = 0.6 of blk, bwidth] (loop) {Loop device module};
+ \node[box, old, minimum height = 0.1\textheight,
+ xshift = -0.1\textheight, yshift = -0.01\textheight] (lodevs)
+ at (loop.south east) {Loop devices};
+ \node[box, fill = hdr, right = 2 of loop] (subsys) {File format subsystem};
+ \node[box, fill = dat, minimum height = 0.1\textheight,
+ xshift = -0.1\textheight, yshift = -0.01\textheight] (drvs)
+ at (subsys.south east) {File format drivers};
+ \node[box, right = 2 of subsys, old] (file) {Backing files};
+
+ \draw[arrow] (blk) -- node[right, desc] {Requests} (loop);
+ \draw[arrow] (loop) -- node[above, desc] {Requests} (subsys);
+ \draw[arrow] (subsys) --
+ node[anchor = west, rotate = 90, align = left, desc]
+ {read\\write\\\ \ \vdots} (file);
+\end{tikzpicture} \ No newline at end of file
diff --git a/presentation/images/linux_storage_stack.tex b/presentation/images/linux_storage_stack.tex
new file mode 100644
index 0000000..3fb9eb2
--- /dev/null
+++ b/presentation/images/linux_storage_stack.tex
@@ -0,0 +1,64 @@
+%-------------------------------------------------------------------------------
+% linux_storage_stack.tex - renders the storage stack of the Linux kernel
+%-------------------------------------------------------------------------------
+% author : Manuel Bentele
+% date : Aug 29, 2019
+% copyright: (c) 2019 Manuel Bentele
+%-------------------------------------------------------------------------------
+
+\begin{tikzpicture}[
+ box/.style = {rectangle, draw, minimum height = 0.75cm, align = center},
+ largeb/.style = {minimum width = 0.7\textwidth},
+ smallb/.style = {minimum width = 0.225\textwidth},
+ arrow/.style = {-triangle 45},
+ desc/.style = {font = \footnotesize},
+ node distance = 0.06\textwidth
+ ]
+
+ \node[box, largeb, fill = hdr] (apps) {Applications};
+ \node[box, largeb, fill = ret, below = of apps] (vfs)
+ {Virtual file system (VFS)};
+ \node[box, smallb, fill = gray!15, left = of vfs] (dio) {Direct IO};
+ \node[box, smallb, fill = gray!15, right = of vfs] (pgc) {Page cache};
+
+ \draw[arrow] ([xshift=-0.3\textwidth]apps.south) -- node[right,desc] {read}
+ ([xshift=-0.3\textwidth]vfs.north);
+ \draw[arrow] ([xshift=-0.1\textwidth]apps.south) -- node[right,desc] {write}
+ ([xshift=-0.1\textwidth]vfs.north);
+ \draw[arrow] ([xshift=0.1\textwidth]apps.south) -- node[right,desc] {open}
+ ([xshift=0.1\textwidth]vfs.north);
+ \draw[arrow] ([xshift=0.3\textwidth]apps.south) -- node[right,desc] {\dots}
+ ([xshift=0.3\textwidth]vfs.north);
+
+ \draw[line width = 2pt] (vfs) -- (dio);
+ \draw[line width = 2pt] (vfs) -- (pgc);
+ \draw[arrow] (apps) -| node[above, align = center, desc]
+ {mmap\\malloc} (pgc);
+
+ \node[box, largeb, below = of vfs, fill = dat] (dmp)
+ {Device mapper (optional)};
+ \node[box, largeb, below = of dmp, fill = l2t] (blk)
+ {Block layer\\\scriptsize (maps BIOs to requests)};
+
+ \draw[arrow] (pgc) |- node[desc, below] {BIOs (block IOs)} (dmp);
+ \draw[arrow] (dio) |- node[desc, below] {BIOs (block IOs)} (dmp);
+ \draw[arrow] (dmp) -- node[desc, left] {BIOs} (blk);
+ \draw[arrow] ([xshift=-0.05\textwidth]dmp.north) --
+ node[desc, left, pos = 1.0] {stackable} ++(0, 0.03\textwidth) --
+ ++(0.1\textwidth, 0) -- ++(0, -0.03\textwidth);
+
+ \node[box, largeb, fill = reb, below = of blk] (drvrq)
+ {Block drivers\\\scriptsize (request based)};
+ \node[box, smallb, fill = reb, right = of drvrq] (drvbio)
+ {Block drivers\\\scriptsize (BIO based)};
+
+ \draw[arrow] (blk) -- node[desc, right] {Requests} (drvrq);
+ \draw[arrow] (dmp.south)++(0, -0.03\textwidth) -|
+ node[desc, right, pos=0.725] {BIOs} (drvbio);
+
+ \node[box, fill = gray!15, below = of drvrq.south west, anchor = north west,
+ minimum width = 0.9865\textwidth] (hw) {Physical or virtual devices};
+
+ \draw[arrow] (drvrq) -- (drvrq |- hw.north);
+ \draw[arrow] (drvbio) -- (drvbio |- hw.north);
+\end{tikzpicture} \ No newline at end of file
diff --git a/presentation/images/qcow2_addressing.tex b/presentation/images/qcow2_addressing.tex
new file mode 100644
index 0000000..f052248
--- /dev/null
+++ b/presentation/images/qcow2_addressing.tex
@@ -0,0 +1,63 @@
+%-------------------------------------------------------------------------------
+% qcow2_addressing.tex - addressing of QCOW2 data clusters as image
+%-------------------------------------------------------------------------------
+% author : Manuel Bentele
+% date : Aug 29, 2019
+% copyright: (c) 2019 Manuel Bentele
+%-------------------------------------------------------------------------------
+
+\begin{tikzpicture}[
+ arrow/.style = {-triangle 45},
+ datacluster/.style = {rectangle, draw, fill = dat,
+ minimum width = 0.1\textwidth, minimum height = 0.1\textheight},
+ heading/.style = {font = \Large}
+ ]
+ \node[inner sep = 0, anchor = north] (l1table) at (0, 0) {
+ \begin{tabular}{|p{0.25\textwidth}|} \hline
+ \cellcolor{dat} \\ \hline
+ \\ \hline
+ \cellcolor{dat} \\ \hline
+ \\ \hline
+ \end{tabular}
+ };
+
+ \node[inner sep = 0, anchor = north] (l2table1) at (0.5\textwidth, 0) {
+ \begin{tabular}{|p{0.25\textwidth}|} \hline
+ \\ \hline
+ \\ \hline
+ \cellcolor{dat} \\ \hline
+ \\ \hline
+ \cellcolor{dat} \\ \hline
+ \end{tabular}
+ };
+
+ \node[inner sep = 0, below = 0.75 of l2table1] (l2table2) {
+ \begin{tabular}{|p{0.25\textwidth}|} \hline
+ \\ \hline
+ \cellcolor{dat} \\ \hline
+ \cellcolor{dat} \\ \hline
+ \\ \hline
+ \cellcolor{dat} \\ \hline
+ \end{tabular}
+ };
+
+ \node[inner sep = 0, anchor = north, datacluster] (data1) at (0.9\textwidth, 0) {};
+ \node[inner sep = 0, below = 0.5 of data1, datacluster] (data2) {};
+ \node[inner sep = 0, below = 0.5 of data2, datacluster] (data3) {};
+ \node[inner sep = 0, below = 0.5 of data3, datacluster] (data4) {};
+ \node[inner sep = 0, below = 0.5 of data4, datacluster] (data5) {};
+
+ \node[above = 0.5 of l1table, heading] {L1~table};
+ \node[above = 0.5 of l2table1, heading] {L2~tables};
+ \node[above = 0.5 of data1, heading] {Data clusters};
+
+
+ \draw[arrow] ($(l1table.north east)!0.125!(l1table.south east)$) -- ($(l2table1.north west)!0.1!(l2table1.south west)$);
+ \draw[arrow] ($(l1table.north east)!0.625!(l1table.south east)$) -- ($(l2table2.north west)!0.1!(l2table2.south west)$);
+
+ \draw[arrow] ($(l2table1.north east)!0.5!(l2table1.south east)$) -- (data1.west);
+ \draw[arrow] ($(l2table1.north east)!0.9!(l2table1.south east)$) -- (data2.west);
+ \draw[arrow] ($(l2table2.north east)!0.3!(l2table2.south east)$) -- (data3.west);
+ \draw[arrow] ($(l2table2.north east)!0.5!(l2table2.south east)$) -- (data4.west);
+ \draw[arrow] ($(l2table2.north east)!0.9!(l2table2.south east)$) -- (data5.west);
+\end{tikzpicture} \ No newline at end of file
diff --git a/presentation/images/qcow2_performance.tex b/presentation/images/qcow2_performance.tex
new file mode 100644
index 0000000..e5849e9
--- /dev/null
+++ b/presentation/images/qcow2_performance.tex
@@ -0,0 +1,36 @@
+%-------------------------------------------------------------------------------
+% qcow2_performance.tex - shows how QCOW2 performs compared to qemu-nbd
+%-------------------------------------------------------------------------------
+% author : Manuel Bentele
+% date : Aug 31, 2019
+% copyright: (c) 2019 Manuel Bentele
+%-------------------------------------------------------------------------------
+
+\begin{tikzpicture}
+ \pgfplotstableread[
+ col sep = semicolon
+ ]{../measurements/fio_results.csv}\resultdata
+ \begin{axis}[
+ height = 5cm,
+ width = 0.95\textwidth,
+ ybar,
+ ymin = 0.75,
+ ymax = 4.25,
+ ylabel = {Throughput gain factor},
+ legend cell align = {left},
+ ymajorgrids,
+ x tick label style = {rotate = 30, anchor = north east,
+ align = right},
+ xticklabels from table={\resultdata}{Type},
+ xtick = data,
+ axis lines = left,
+ enlarge x limits = 0.1,
+ ]
+
+ \addplot table[y = {Factor_512}, x expr=\coordindex]{\resultdata};
+ \addlegendentry{512~byte operation};
+
+ \addplot table[y = {Factor_4096}, x expr=\coordindex]{\resultdata};
+ \addlegendentry{4096~byte operation};
+ \end{axis}
+\end{tikzpicture} \ No newline at end of file
diff --git a/presentation/images/qcow2_reading.tex b/presentation/images/qcow2_reading.tex
new file mode 100644
index 0000000..ed11d93
--- /dev/null
+++ b/presentation/images/qcow2_reading.tex
@@ -0,0 +1,55 @@
+%-------------------------------------------------------------------------------
+% qcow2_reading.tex - shows how QCOW2 clusters are mapped for reading
+%-------------------------------------------------------------------------------
+% author : Manuel Bentele
+% date : Aug 29, 2019
+% copyright: (c) 2019 Manuel Bentele
+%-------------------------------------------------------------------------------
+
+\begin{tikzpicture}[
+ arrow/.style = {-triangle 45}
+ ]
+ \node[inner sep = 0, anchor = north] (blkdev) at (0, 0) {
+ \renewcommand*{\arraystretch}{1.3}
+ \begin{tabular}{|c|} \hline
+ \\ \hline
+ \\ \hline
+ \\ \hline
+ \\ \hline
+ \cellcolor{dat} \\ \hline
+ \\ \hline
+ \cellcolor{dat} \\ \hline
+ \cellcolor{dat} \\ \hline
+ \\ \hline
+ \cellcolor{dat} \\ \hline
+ \end{tabular}
+ };
+
+ \node[inner sep = 0, anchor = north, right = of blkdev] (qcow2) {
+ \renewcommand*{\arraystretch}{1.3}
+ \hspace*{-0.25cm}
+ \begin{tabular}{|c|} \hline
+ \cellcolor{hdr}Header \\ \hline
+ \cellcolor{ret}Refcount table \\ \hline
+ \cellcolor{reb}Refcount block \\ \hline
+ \cellcolor{l1t}L1~table \\ \hline
+ \cellcolor{l2t}L2~table \\ \hline
+ \cellcolor{dat}Data cluster \\ \hline
+ \cellcolor{l2t}L2~table \\ \hline
+ \cellcolor{dat}Data cluster \\ \hline
+ \cellcolor{dat}Data cluster \\ \hline
+ \cellcolor{dat}Data cluster \\ \hline
+ \end{tabular}
+ };
+
+ \draw[triangle 45-triangle 45] ($(blkdev.north west)!0!(blkdev.south west)$) -- node[left] {$O$} ($(blkdev.north west)!0.6!(blkdev.south west)$);
+ \draw[triangle 45-triangle 45] ($(blkdev.north west)!0.6!(blkdev.south west)$) -- node[left] {$S$} ($(blkdev.north west)!0.8!(blkdev.south west)$);
+
+ \node[above = 0.5 of blkdev, align = center] {Block\\device};
+ \node[above = 0.5 of qcow2, align = center] {QCOW2\\file format};
+
+ \draw[arrow] ($(blkdev.north east)!0.45!(blkdev.south east)$) -- ($(qcow2.north west)!0.75!(qcow2.south west)$);
+ \draw[arrow] ($(blkdev.north east)!0.65!(blkdev.south east)$) -- ($(qcow2.north west)!0.55!(qcow2.south west)$);
+ \draw[arrow] ($(blkdev.north east)!0.75!(blkdev.south east)$) -- ($(qcow2.north west)!0.85!(qcow2.south west)$);
+ \draw[arrow] ($(blkdev.north east)!0.95!(blkdev.south east)$) -- ($(qcow2.north west)!0.95!(qcow2.south west)$);
+\end{tikzpicture} \ No newline at end of file
diff --git a/presentation/images/qcow2_structure.tex b/presentation/images/qcow2_structure.tex
new file mode 100644
index 0000000..861527b
--- /dev/null
+++ b/presentation/images/qcow2_structure.tex
@@ -0,0 +1,21 @@
+%-------------------------------------------------------------------------------
+% qcow2_structure.tex - structure of the QCOW2 disk image file format as image
+%-------------------------------------------------------------------------------
+% author : Manuel Bentele
+% date : Aug 29, 2019
+% copyright: (c) 2019 Manuel Bentele
+%-------------------------------------------------------------------------------
+
+\renewcommand*{\arraystretch}{1.3}
+\begin{tabular}{|c|} \hline
+ \cellcolor{hdr}Header \\ \hline
+ \cellcolor{ret}Refcount table \\ \hline
+ \cellcolor{reb}Refcount block \\ \hline
+ \cellcolor{l1t}L1~table \\ \hline
+ \cellcolor{l2t}L2~table \\ \hline
+ \cellcolor{dat}Data cluster \\ \hline
+ \cellcolor{l2t}L2~table \\ \hline
+ \cellcolor{dat}Data cluster \\ \hline
+ \cellcolor{dat}Data cluster \\ \hline
+ \vdots
+\end{tabular} \ No newline at end of file