From ArchWiki
Revision as of 13:42, 6 October 2010 by Zom (talk | contribs)
Jump to: navigation, search

Readahead-fedora is originally developed by fedora, and contrary to ureadahead it doesn't require patching the kernel. It creates a list of files to put in the page cache before they're needed, thus reducing boot time.


  • It doesn't require patching the kernel.
  • It can take multiple lists of files to be preloaded, and sort them according to their position on the disk.
  • It preloads the inode tables on ext2-based file systems.
  • It opens the files without making the system update their access time, therefore avoiding extra disk writes. (Though, this shouldn't matter when using relatime or noatime I think)
  • It uses a lightweight monitoring daemon.

(List shamelessly stolen from the debian package description, original here)


Ying has created a PKGBUILD for this project, it can be found here.

Note: libprelude currently doesn't build with libtool-2.4. Either downgrade to 2.2.10-3 or wait for a workaround.


All configuration is done through /etc/readahead.conf. Some interesting variables might be:


A value in seconds that determine how long the collector should run.


A path to your init program. Change this if you use anything other than sysvinit.

RAC_EXECIGN="/sbin/readahead /usr/sbin/preload"

If you want the collector to ignore syscalls from certain programs, this is where you set their paths.

RAC_EXCLUDE="/proc /sys /dev /var/log /var/run /var/lock /home /tmp /var/tmp /media /selinux /mnt"

Directories to ignore while collecting. Anything that isn't needed during boot should probably be here to keep the list slimmed down.


To automatically start readahead and update the list, create /etc/rc.d/functions.d/readahead and add this to the file:

# File for starting readahead and readahead-collector

. /etc/readahead.conf

readahead-early() {
  if [ -e /.readahead ]; then
    stat_busy "Starting readahead-collector - collecting data"
    stat_busy "Starting readahead - early read"
      /sbin/readahead  /etc/readahead.d/*.early

readahead-later() {
  if [ -e /.readahead ]; then
      sleep 8
      touch /.switch-collector-to-later
      rm /.readahead
    stat_busy "Starting readahead - later read"
      sleep 1.6
      /sbin/readahead  /etc/readahead.d/*.later

add_hook sysinit_start readahead-early
add_hook multi_start readahead-later
Note: This should be enabled by default in newer versions of the package.
Note: If this breaks console-kit in KDE, you might need to use sysinit_end instead of multi_start

Now all you have to do is

$ touch /.readahead

to let readahead-collector profile your system next boot.

Automated profiling

This is actually really easy. With the above function, just add a cron job that creates the file /.readahead every month or so.

Manually reprofile the system

There are two ways to do this, either just run

$ touch /.readahead

as root, or you can temporarily add


to the kernel line in your bootloader. You should also disable auditd, because auditd deletes all audit rules during boot, which is contraproductive for the collector. Now, you just need to reboot and let the collector profile your system.

Trimming down boot-times

You can move the following around to start X earlier. This can potentially cause some major issues. Use with care.

#su:S:wait:/sbin/sulogin -p

# Example lines for starting a login manager
#x:5:respawn:/usr/bin/xdm -nodaemon
#x:5:respawn:/usr/sbin/gdm -nodaemon
#x:5:respawn:/usr/bin/kdm -nodaemon
#x:5:respawn:/usr/bin/slim >& /dev/null

rm:2345:wait:/etc/rc.multi > /dev/null
su:S:wait:/sbin/sulogin -p

# End of file

You can also try the quick-boot package in AUR. However, this could break your system if you don't know what you're doing. Use with caution.


You might wonder what this file does while profiling:

readahead-later() {
  if [ -e /.readahead ]; then
      sleep 8
      touch /.switch-collector-to-later
      rm /.readahead

Readahead-fedora uses two steps to read and create the cache, called "early" and "later". Why it does it this way is to have a small, neat cache that it initially reads. This basically contains the basic files needed to boot together with X. After it's read those files and started X, it reads the "later" cache for starting the various daemons and services. This way, it tries to be a bit smarter and dynamic in hiding load times.