\chapter{Conclusions}% and Future Work}
\label{chap:conclusions}

We designed and implemented \emph{preload}, a Markov-based adaptive prefetching
scheme that works on application-level predictions.  Moreover, preload is
implemented in the user-space and does not change the application run-time
environment in any sense.  This is the first work experimenting with
file-system prefetching at this level as far as we know.

Our experimental results show promising improvements on application start-up
time compared to cold caches, and a decent hit rate compared to a na\"ive
prediction algorithm.  However, being in user-space introduces major obstacles
into making preload a competitive solution to the startup-time problem.  In
particular, not having full information about applications' I/O requests, and
lack of strong communication channels with the page-cache subsystem degrades
preload's effectiveness drastically, especially under tight memory conditions.

Another inherent problem with the preload design is high variance and low
prediction confidence caused by the relatively loose correlation of
application start-ups.  While we successfully build a model to track
application correlations, the fact that application launches are very rare
events compared to the timescale that computers work on, an application-level
prefetching scheme is condemned to consume huge prefetching memory over
practically infinite periods of time.  This memory can be used to improve
short-term cache behavior.

Finally, we come up with a set of recommendations for system developers on how
to improve boot-time, login-time, and application startup-time without falling
back to a prefetcher integrated with the cache subsystem in the kernel.  Of
course, a file-based prefetcher in the kernel can improve on top of that.
