From 2c136728999d7451d8eef2f202a08ec7bc524136 Mon Sep 17 00:00:00 2001 From: Siddharth Ravikumar Date: Fri, 26 Feb 2016 08:36:26 -0500 Subject: Moved around chapters. Chapter 3 -> Chapter 2 Chapter 4 -> Chapter 3 Chapter 5 -> Chapter 4 --- report/chapters/5-testing.tex | 668 ------------------------------------------ 1 file changed, 668 deletions(-) delete mode 100644 report/chapters/5-testing.tex (limited to 'report/chapters/5-testing.tex') diff --git a/report/chapters/5-testing.tex b/report/chapters/5-testing.tex deleted file mode 100644 index e6376f1..0000000 --- a/report/chapters/5-testing.tex +++ /dev/null @@ -1,668 +0,0 @@ -\chapter{Testing}\label{ch:5} - -\epigraph{Testing shows the presence, not the absence of - bugs.}{\textit{Dijkstra}\cite{dijkstra69}} - -\section{Unit testing}\label{sec:5-unit-testing} - -The \verb+nose+\cite{pylib:nose} testing framework was used to -write unit tests for the functions and classes part of the -\verb+combox.config+, \verb+combox.crypto+, \verb+combox.events+, -\verb+combox.file+, \verb+combox.silo+ \verb+combox._version+ -modules. Unit tests were not written for \verb+combox.cbox+, -\verb+combox.gui+, \verb+combox.combox.log+ modules. - -Unit tests for combox become reality by pure serendipity. During the -time, when I started working on combox, I was learning to use the -\verb+nose+ library to unit test python code. Since, \verb+combox+ was -being written in python, I started making it a norm to write unit -tests for functions and classes in combox modules. - -As mentioned before, unit tests were not written for some modules -either because it would make no sense to write one (for the -\verb+combox.cbox+ module, for instance, which basically uses -functions and classes defined in other modules to run combox) or it -was not clear how to write unit tests it (the \verb+combox.gui+ -contains just the \verb+ComboxConfigDialog+ a graphical front-end -which uses the configuration function defined in the -\verb+combox.config+ module to complete the combox configuration based -on the user input). - -It must be noted here that pure Test Driven Development (TDD) was not -observed -- most of the time the function/class was written before the -its corresponding test was written. - -\subsection{Benefits} - -While writing unit tests definitely increased the time to write a -particular feature, it enabled me to immediately check if a feature -worked as it should for the given use case or given set of inputs. - -With the benefit of hindsight, unit tests greatly helped in testing -the compatibility of combox on OSX. Before the \verb+v0.1.0+ release, -combox's node directory monitor always assumed that a file's first -shard (\verb+shard0+) is always available; while this assumption did -not create any problems on GNU/Linux, on OS X, this assumption made -the node directory monitor to behave erratically -- this issue (bug -\#4\cite{combox-issue-tracker} was immediately found when the unit -tests were run for the first time on OS X. Another instance where unit -tests helped was just before the \verb+v0.2.0+ release; major changes, -including the introduction of file locks in the -\verb+ComboxDirMonitor+, were made to the \verb+combox.events+. When -the unit tests were run OS X, two tests failed, revealing a difference -in behavior of watchdog\cite{pylib:watchdog} on GNU/Linux and OS X on -file creation\cite{combox-wd-fix}; without unit tests, there is a high -probability that this bug would never have been found by now. - -\subsection{Caveats} - -Unit tests are helpful in testing the correctness of a feature for -\verb+N+ number of use cases but it does not necessarily mean the -written feature correctly behaves for use cases that the author of the -feature did not consider or did not think about while writing the -respective feature. As Dijkstra correctly observed: - -Unit tests failed to reveal bugs \#4, \#5 \#6 \#7 \#5 \#10 -\#11\cite{combox-issue-tracker}; these bugs were found when manually -testing combox. - -\section{Manual testing}\label{sec:5-manual-testing} - -The unit tests for the \verb+combox.events+ module test the -correctness of the \verb+ComboxDirMonitor+ and \verb+NodeDirMonitor+ -independently; in order to comprehensively test the correctness of -both \verb+ComboxDirMonitor+ and \verb+NodeDirMonitor+, it was -required to manually test combox running on more than one computer. As -you'll see in the following subsections, several bugs were found and -fixed while doing manual testing. - -Three different types of setups were used to test combox. The first -kind of setup has two GNU/Linux machines each using combox to sync -files between each other with Dropbox and Google Drive being the -nodes; the second kind of setup has a GNU/Linux machine and a OS X -machine each using combox to sync files between each other with -Dropbox and Google Drive being the nodes; the third kind of setup has -a GNU/Linux machine and OS X machine each using combox to sync files -between each other with Dropbox, Google Drive and a USB stick as -nodes. - -\subsection{General setup and notes} - -\begin{itemize} -\item On the GNU/Linux machines, the official Dropbox client was used - to sync the Dropbox node directory to Dropbox' - servers. \verb+rclone+\cite{program:rclone} was used to sync the - Google Drive node directory to Google Drive' servers;At the time of - testing, Google Drive did not have client for GNU/Linux. -\item On OS X, the official Dropbox client was used to sync the - Dropbox node directory to Dropbox's servers; the official Google - Drive client was used to sync the Google Drive node directory to - Google Driver' servers. -\item Since combox is extremely event-driven, combox must be started - before the Dropbox and Google Drive clients start syncing their - respective directories (nodes). -\end{itemize} - -\subsection{Testing on two GNU/Linux machines} - -combox was run to two GNU/Linux machines and a file was alternatively -created/modified/renamed/deleted on an of the GNU/Linux machine and it -was verified if the respective file was also -created/modified/renamed/deleted on the other GNU/Linux machine. One -of the GNU/Linux machine (\verb+lyra)+ was a virtual machine running -Debian GNU/Linux stable (version 8.x); the other GNU/Linux machine -(\verb+grus+) was a physical machine running Debian GNU/Linux -testing. The node directories to scatter the files' shards were the -Dropbox directory and Google Drive directory. The official Dropbox -client was used to automatically sync files from the Dropbox directory -to the Dropbox' server; \verb+rclone+\cite{program:rclone} was used to -sync files from Google Drive directory to Google Drive' server. - -\subsubsection{Issues found}\label{ch-5-2gnus-issues} - -\begin{itemize} -\item Some editors, especially on POSIX complaint systems, create - backup version of the file being edited. combox was detecting this - backup file as a ``new file'' and it split it into shards, encrypted - the shards and scattered the shards across the node directories. The - right thing for combox to do was to ignore these backup files and do - nothing about them. This issue was fixed on - \verb+2015-09-29+\cite{combox-issue-tracker}. Now the - \verb+ComboxDirMonitor+, on a ``file created'' or ``file modified'' - event, returns from the \verb+on_created+ or \verb+on_modified+ - callback when it finds that the file is a backup/temporary file. -\item Dropbox client maintains the \verb+.dropbox.cache+ directory - under the root of the Dropbox directory. - - \begin{itemize} - \item When a file (shard) was created on another computer, the - Dropbox client pulls the new file (shard) to this computer into - \verb+.dropbox.cache+ as a temporary file and then moves the new - file (shard) to its respective location with the appropriate name. - \item When a file (shard) was modified on another computer, the - Dropbox client pulls the modified file (shard) to this computer - into the \verb+.dropbox.cache+ as a temporary file; moves the old - version of the file (shard) under the Dropbox directory into the - \verb+.dropbox.cache+; finally moves the updated copy of the file, - stored as a temporary file, into the Dropbox directory to its - respective location with the appropriate name. - \item When a file (shard) was deleted on another computer, the - Dropbox client moves the delete file into the - \verb+.dropbox.cache+ directory on this computer. - \end{itemize} - - All of the above behavior of the Dropbox client epically broke - combox. Commits \verb+3d714c5+ to - \verb+6e1133f+\cite{git:dropbox-fix} fixed combox by making it aware - of Dropbox's client behavior. -\end{itemize} - -\subsubsection{Demo} - -Demo of combox being used on two GNU/Linux machines can be viewed at -\url{https://ricketyspace.net/combox/combox-2-gnus.webm}. - -\verb+lyra+ (virtual machine) and \verb+grus+ (bare-metal) are the two -GNU/Linux machines being used for the demo. - -Description of what happens in the demo follows: - - - (lyra) install combox. - - - (lyra) run combox (test mode). - - - (lyra) create file \verb+walden.pond+ with content ``It must be - beautiful there''. - - - (lyra) sync Google Drive using \verb+rclone+. - - - (grus) sync Google Drive using \verb+rclone+. - - - (grus) git pull latest copy of combox. - - - (grus) install combox - - - (grus) run combox (testing mode). - - - (grus) verify that \verb+walden.pond+ was create on this machine. - - - (grus) append 'Peaceful too.' to \verb+walden.pond+. - - - (grus) sync Google Drive using \verb+rclone+. - - - (lyra) sync Google Drive using \verb+rclone+. - - - (lyra) verify that the latest copy of \verb+walden.pond+ is there - in the combox directory; it should contain 'Peaceful too.' in the - last line. - - - (lyra) append ``I've a dream'' to \verb+walden.pond+. - - - (lyra) sync Google Drive using \verb+rclone+. - - - (grus) sync Google Drive using \verb+rclone+. - - - (grus) verify that the latest copy of \verb+walden.pond+ is there - in the combox directory; it should contain ``I've a dream'' in the - last line. - - - (grus) remove \verb+walden.pond+ from combox directory. - - - (grus) sync Google Drive using \verb+rclone+. - - - (lyra) sync Google Drive using \verb+rclone+. - - - (lyra) verify that \verb+walden.pond+ is removed from the combox - directory. - - - (grus) open dropbox and Google drive accounts from the web browser. - - - (lyra) create file \verb+manufacturing.consent.+ with content ``Chomsky stuff?''. - - - (lyra) sync Google Drive using \verb+rclone+. - - - (grus) sync Google Drive using \verb+rclone+. - - - (grus) verify that \verb+manufacturing.consent+ was created in the - combox directory. - - - (grus) verify that the shards of \verb+manufacturing.consent+ were - created on Dropbox and Google Drive through the web browser. - -\subsection{Testing on a GNU/Linux and an OS X machine} - -combox was run on a GNU/Linux machine and an OS X machine and a file -was alternatively created/modified/renamed/deleted on one of the -machine and it was verified if the respective file was also -created/modified/renamed/deleted on the other machine. The GNU/Linux -machine was a virtual machine (\verb+lyra+) running Debian GNU/Linux -stable; the OS X machine was on Mavericks (10.9) during the initial -stage of testing, later it was upgraded to Yosemite (10.10). The node -directories to scatter files' shards were the Dropbox directory and -the Google Drive directory. The official Dropbox client was used to -automatically sync files from the Dropbox directory to the Dropbox' -server on both the GNU/Linux machine and the OS X machine; the -official Google Drive client was used to automatically sync files from -the Google Drive directory to Google Drive' server on OS X and -\verb+rclone+\cite{program:rclone} was used to sync files from the -Google Drive directory to Google Drive's server on GNU/Linux. - -\subsubsection{Issues found} - -\begin{itemize} -\item When a file was modified on another computer, on this computer - combox assumed that first shard (shard0) will be updated first and - also counted on the existence of the first shard (shard0). It was - observed that the order in which the shards were updated were - unpredictable on this computer and if the first shard (shard0) was - stored in the Dropbox directory, it will momentarily disappear - before the most updated shard becomes available in the Dropbox - directory; this broke combox. This issue was fixed on - 2015-08-25\cite{git:bug-four-fix}. This issue is not got to do with - the nature of the setup but it is related to the Dropbox's behavior - elaborated in section \ref{ch-5-2gnus-issues}. -\item The official Google Drive client when it pulls an updated - version of the file from Google Drive' server, instead directly - updating the respective file on the computer, it deletes the older - version of the file and creates the latest version of the file at - the respective location in the Google Drive directory; this behavior - of the Google Drive confused and broke combox. This issue was fixed - 2015-09-06 by making combox under the official Google Client's - behavior\cite{git:bug-googledc-fix}. -\item When a non-empty directory was move/renamed on another computer, - the old directory was not getting properly deleted on this computer; - this was happening because the files under the directory being - renamed were not deleted when it was time for \verb+NodeDirMonitor+ - to \verb+rmdir+ the old directory. This issue again is not specific - to the nature of the setup but was found while testing combox on - this setup. This issue was fixed on - 2015-09-12\cite{git:bug-six-fix}. -\item It was found that \verb+combox.file.rm_path+ function failed - when it was given a non-existent path to remove; this issue was - fixed on 2015-09-12\cite{git:bug-seven-fix}. -\end{itemize} - -\subsubsection{Demo} - -Demo of combox being used on a GNU/Linux machine and OS X machine can -be viewed at \url{https://ricketyspace.net/combox/combox-gnu-osx.webm} - -\verb+lyra+ is the GNU/Linux (virtual) machine and -\verb+dhcp-129-1-66-1+ is the OS X machine that is being used for the -demo. The OS X machine is accessed through VNC\cite{article:vnc}. - -Description of what happens in the demo follows: - - - (\verb+lyra+) create file \verb+cat.stevens+ with content ``peace train''. - - - (\verb+lyra+) sync Google Drive using \verb+rclone+. - - - (\verb+dhcp-129-1-66-1+) verify that file \verb+cat.stevens+ is - created with content ``peace train''. - - - (\verb+dhcp-129-1-66-1+) append string ``moonshadow'' to file - \verb+cat.stevens+. - - - (\verb+lyra+) sync Google Drive using \verb+rclone+. - - - (\verb+lyra+) verify that the file \verb+cat.stevens+ was updated - (modified); last line must have the string ``moonshadow''. - - - (\verb+lyra+) append string ``father and son'' to the file - \verb+cat.stevens+. - - - (\verb+lyra+) sync Google Drive using \verb+rclone+. - - - (\verb+dhcp-129-1-66-1+) verify that the file \verb+cat.stevens+ - was updated (modified); last line must have the string ``father and - son''. - - - (\verb+dhcp-129-1-66-1+) rename file \verb+cat.stevens+ to - \verb+yusuf.islam+ - - - (\verb+lyra+) sync Google Drive using \verb+rclone+. - - - (\verb+lyra+) verify that the file \verb+cat.stevens+ was renamed - to \verb+yusuf.islam+. - -\subsection{Testing with a USB stick as a node} - -combox was run on a GNU/Linux machine and an OS X machine and a file -was alternatively created/modified/deleted on one of the machine and -it was verified if the repsective file was also -create/modified/deleted on the other machine. The GNU/Linux machine -was a physical machine (\verb+grus+) running Debian GNU/Linux stable; -The OS X machine was on Mavericks (10.9). The node directories to -scatter files' shards were the Dropbox directory, Google Drive -directory and the USB stick (\verb+ZAPHOD+, FAT filesystem). The -official Dropbox client was used to automatically sync files from -Dropbox directory to Dropbox' server on both the GNU/Linux machine and -OS X machine; the official Google Drive client was used to -automatically sync files from the Google Drive directory to Google -Drive' server on OS X and \verb+rclone+\cite{program:rclone} was used -to sync files from the Google Drive directory to Google Drive's server -on GNU/Linux; the same USB stick (\verb+ZAPHOD+) was used on bothe -GNU/Linux and Dropbox to store the third shard (shard2) of a file. - -\subsubsection{Caveats} - -\begin{itemize} -\item When a removable USB disk is used as a node, combox must be - turned off before ejecting/unmounting the USB disk; combox does not - expect a node directory to disappear when it is running, if the USB - disk is removed when combox is running, then combox goes to a - undefined state. - -\item When a file modified on machine A is synced to machine B, combox - must be turned on first before turning on Dropbox and Google Drive - clients and the shard in the USB disk needs to be ``touched'' for - combox to detect that the file was modified on the remote computer - and update the file locally on this machine. - -\item File rename/move does not work. To make it work, core - functionality of combox must be re-written. -\end{itemize} - -\subsubsection{Demo} - -Demo of combox being used with a USB stick as the third node can be -view at \url{https://ricketyspace.net/combox/combox-usb-node-demo.webm} - -\verb+grus+ is the GNU/Linux machine and \verb+dhcp-129-1-66-1+ is the -OS X machine that is being used for the demo. \verb+ZAPHOD+ is the -FAT32 USB stick used as the third node. - -Description of what happens in the demo follows: - - - (\verb+grus+) start combox. - - - (\verb+grus+) create a file called \verb+simon.and.garfunkel+ with - content ``the boxer''. - - - (\verb+grus+) sync Google Drive using \verb+rclone+. - - - (\verb+grus+) stop combox. - - - (\verb+grus+) unmount USB stick (\verb+ZAPHOD+) from \verb+grus+. - - - (\verb+dhcp-129-1-66-1+) mount USB stick (\verb+ZAPHOD+) to - (\verb+dhcp-129-1-66-1+). - - - (\verb+dhcp-129-1-66-1+) start Dropbox client. - - - (\verb+dhcp-129-1-66-1+) start Google Drive client. - - - (\verb+dhcp-129-1-66-1+) start combox. - - - (\verb+dhcp-129-1-66-1+) verify that the file - \verb+simon.and.garfunkel+ with content ``the boxer'' was created. - - - (\verb+dhcp-129-1-66-1+) append string ``mrs. robinson'' to file - \verb+simon.and.garfunkel+. - - - (\verb+dhcp-129-1-66-1+) stop combox. - - - (\verb+dhcp-129-1-66-1+) stop Google Drive client. - - - (\verb+dhcp-129-1-66-1+) stop Dropbox client. - - - (\verb+dhcp-129-1-66-1+) unmount the USB stick (\verb+ZAPHOD+) - from (\verb+dhcp-129-1-66-1+). - - - (\verb+grus+) mount the USB stick (\verb+ZAPHOD+) to - (\verb+grus+). - - - (\verb+grus+) start combox. - - - (\verb+grus+) start Dropbox client. - - - (\verb+grus+) sync Google Drive using \verb+rclone+. - - - (\verb+grus+) touch \verb+simon.and.garfunkel.shard2+ in the USB - stick (\verb+ZAPHOD+). - - - (\verb+grus+) verify that the file \verb+simon.and.garfunkel+ is - updated; the last line must contain the string ``mrs. robinson''. - - - (\verb+grus+) remove the file \verb+simon.and.garfunkel+. - - - (\verb+grus+) sync Google Drive using \verb+rclone+. - - - (\verb+grus+) unmount the USB stick (\verb+ZAPHOD+) from - (\verb+grus+). - - - (\verb+grus+) stop Dropbox client. - - - (\verb+dhcp-129-1-66-1+) mount the USB stick (\verb+ZAPHOD+) to - (\verb+dhcp-129-1-66-1+). - - - (\verb+dhcp-129-1-66-1+) start Google Drive client. - - - (\verb+dhcp-129-1-66-1+) start Dropbox client. - - - (\verb+dhcp-129-1-66-1+) start combox. - - - (\verb+dhcp-129-1-66-1+) verify that the file - \verb+simon.and.garfunkel+ was deleted. - - -\section{Stress testing} - -Large number of files of different sizes were dumped to the combox -directory between an one second interval to see how combox responds to -high load. The file dump size was varied from \verb+424.798190MiB+ (27 -files) to \verb+10800.000000MiB+ (180 files); the average time taken -to split a file and the total time to process all files were -calculated for each dump. - -Stress testing was first done on \verb+2015-11-08+. In mid November -the \verb+ComboxDirMonitor+ was drastically modified to make it use -the file Lock shared the instances of -\verb+NodeDirMonitor+\cite{git:bug-eleven-fix}; my hunch was that this -change in \verb+ComboxDirMonitor+ directly affected the performance of -combox and therefore the results that were got from stress testing on -\verb+2015-11-08+ would no longer be valid. Stress testing was again -done on \verb+2016-01-16+; the results of this stress test are in -sections \ref{5-st-424} to \ref{5-st-10800}, section \ref{5-st-tu} -gives information about the tools used for stress testing, section -\ref{5-st-o} contains the observations and comparisons between this -stress test and the one done on \verb+2015-11-08+, lastly section -\ref{5-st-if} reveals the issues that were found with combox by virtue -of doing the stress tests. - -\subsection{flac dump (27 files - 424.798190MiB)}\label{5-st-424} - -\begin{center} -\begin{tabular}{ll} -field & value\\ -\hline -delay between a file dump & 1s\\ -start time of processing & 11:00:54\\ -end time of processing & 11:01:38\\ -total time taken to process all files & 00:00:44\\ -no. of files & 27\\ -total size of all files & 445433187.000000 bytes (424.798190MiB)\\ -avg. file size & 16497525.000000 bytes (15.733266MiB)\\ -avg. time to split and encrypt a file & 352.583370 ms\\ -\end{tabular} -\end{center} - -\subsubsection{Differences from previous stress test (2015-11-08)} - -\begin{itemize} -\item Total time to process all files was faster by 1min3secs. -\item Average time to split and encrypt a file reduced by - 28.337963000000002ms. -\end{itemize} - -\subsection{20MiB - 90MiB dump (27 files - 1620.000000MiB)}\label{5-st-1620} - -\begin{center} -\begin{tabular}{ll} -field & value\\ -\hline -delay between a file dump & 1s\\ -start time of processing & 12:26:45\\ -end time of processing & 12:29:07\\ -total time taken to process all files & 00:02:22\\ -no. of files & 27\\ -total size of all files & 1698693120.000000 bytes (1620.000000MiB)\\ -avg. file size & 62914560.000000 bytes (60.000000MiB)\\ -avg. time to split and encrypt a file & 2670.596556ms\\ -\end{tabular} -\end{center} - -\subsubsection{Differences from previous stress test (2015-11-08)} - -\begin{itemize} -\item Total time to process all files was slower by 4secs. -\item Average time to split and encrypt a file reduced by - 25.52536999999984ms. -\end{itemize} - -\subsection{20MiB - 90MiB dump (99 files - 5940.000000MiB)}\label{5-st-5940} - -\begin{center} -\begin{tabular}{ll} -field & value\\ -\hline -delay between a file dump & 1s\\ -start time of processing & 13:10:16\\ -end time of processing & 13:19:26\\ -total time taken to process all files & 00:09:10\\ -no. of files & 99\\ -total size of all files & 6228541440.000000 bytes (5940.000000MiB)\\ -avg. file size & 62914560.000000 bytes (60.000000MiB)\\ -avg. time to split and encrypt a file & 2979.647586ms\\ -\end{tabular} -\end{center} - -\subsubsection{Differences from previous stress test (2015-11-08)} - -\begin{itemize} -\item Total time to process all files was faster by 59secs. -\item Average time to split and encrypt a file increased by - 206.20906100000002ms. -\end{itemize} - -\subsection{20MiB - 90MiB dump (180 files - 10800.000000MiB)}\label{5-st-10800} - -\begin{center} -\begin{tabular}{ll} -field & value\\ -\hline -delay between a file dump & 1s\\ -start time of processing & 13:42:06\\ -end time of processing & 14:00:10\\ -total time taken to process all files & 00:18:04\\ -no. of files & 180\\ -total size of all files & 11324620800.000000 bytes (10800.000000MiB)\\ -avg. file size & 62914560.000000 bytes (60.000000MiB)\\ -avg. time to split and encrypt a file & 3423.087539ms\\ -\end{tabular} -\end{center} - -\subsubsection{Differences from previous stress test (2015-11-08)} - -\begin{itemize} -\item Total time to process all files was slower by 1min2secs -\item Average time to split and encrypt a file increased by - 399.87623299999996ms. -\end{itemize} - -\subsection{Tools used}\label{5-st-tu} - -The \verb+dump+ script\cite{program:dump} was used to dump files to -the combox directory between one second intervals; a night of Emacs -Lisp indulgence made it possible to quickly slurp the required data -from the combox output and calculate the average time to split and -encrypt a file and the total amount of time taken to process the files -for a given dump\cite{program:dumps.el}; lastly \verb+org-mode+ was -used to document all data gathered during stress -testing\cite{doc:benchmarks.org}. - -\subsection{Observations}\label{5-st-o} - -\begin{figure}[h] -\centering -\input{graphs/tot-time.tex} -\caption{time to process all files} -\label{fig:5-st-tt} -\end{figure} - -\begin{figure}[h] -\centering -\input{graphs/avg-time-sae.tex} -\caption{avg. time to split and encrypt} -\label{fig:5-st-atsae} -\end{figure} - - -\begin{itemize} -\item Figure \ref{fig:5-st-tt} shows the time it takes combox to - process files for a given file dump\footnote{A ``file dump'' here - means a bunch of files copied to the combox directory between 1 - sec intervals.}. As can be observed from the graph, the total time - taken to process all the files tends almost linearly increase with - the increase in the size of the file dump\footnote{The ``size of the - file dump'' is the total size of all files in a given file dump.}. -\item Figure \ref{fig:5-st-atsae} show the average time it takes - combox to split and encrypt a file for a given file dump. There is a - steep increase in the average time from the \verb+424.798190MiB+ - dump and the \verb+1620.000000MiB+ dump, after which the average - time to split and encrypt a file seems to almost linearly increase; - The main reason for this is that the average file size for dumps - from \verb+1620.000000MiB+ to \verb+10800.000000MiB+ are the same. -\end{itemize} - -\begin{figure}[h] -\centering -\input{graphs/tot-time-diff.tex} -\caption{time to process all files - difference between 2015 and 2016} -\label{fig:5-st-tt-diff} -\end{figure} - -\begin{figure}[h] -\centering -\input{graphs/avg-time-sae-diff.tex} -\caption{avg. time to split and encrypt - difference between 2015 and 2016} -\label{fig:5-st-atsae-diff} -\end{figure} - -\begin{itemize} -\item Figure \ref{fig:5-st-tt-diff} shows the graphs for the total - amount of time taken to process all files for a given file dump in - the \verb+2016-01-16+ and \verb+2015-11-8+ stress test. The amount - of time needed to process all fills seems to be reduced for the - \verb+5940.000000MiB+ file dump when compared to the \verb+2015+ - stress test results and it seems to be slightly higher for the - \verb+10800.000000MiB+ file dump when compared to the \verb+2015+ - stress test. -\item Similarly, figure \ref{fig:5-st-atsae-diff} shows the graphs for - the average time to split and encrypt for a given file dump in the - \verb+2016-01-16+ and the \verb+2015-11-8+ stress test. The average - time taken seems to able almost the same for the - \verb+424.798190MiB+ and the \verb+1620.000000+ dump, but for the - \verb+5940.000000MiB+ and the \verb+10800.000000MiB+ dump the - average time taken seems to higher for the \verb+2016+ stress test - when compared to the \verb+2015+ stress test. -\end{itemize} - -\subsection{Issues found}\label{5-st-if} - -\begin{itemize} -\item Initially when combox was stress tested with huge files, combox - would get overwhelmed leading to the computer running out of memory - and the load average sometimes peaking at \verb+8+. At first, it was - assumed that there was a bug in combox which caused this to happen, - but later it was found that \verb+watchdog+\cite{pylib:watchdog} was - generating a large number ``file modified'' events when a huge file - (\verb+~500MiB+ was modified). To prevent \verb+watchdog+ from - generating a large number ``file modified'' events for a single - modification of a huge file, a delay proportional to the size of the - file was created in the \verb+on_modified+ callback methods in both - \verb+ComboxDirMonitor+ and - \verb+NodeDirMonitor+\cite{git:bug-ten-fix}, this fixed the - issue. Also, this it might be useful to note here that this was - ``the'' hardest issue I dealt with in working on combox. -\end{itemize} \ No newline at end of file -- cgit v1.2.3