Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 23 Jan 2012 22:55:03 +0100
From:      Edward Tomasz =?utf-8?Q?Napiera=C5=82a?= <trasz@FreeBSD.org>
To:        freebsd-hackers@freebsd.org
Subject:   Speeding up the loader(8).
Message-ID:  <20120123215503.GA64787@geosci>

next in thread | raw e-mail | index | archive | help
Some time ago I've spent some time on trying to speed up loading
modules by the loader(8).  Result can be found at:

http://people.freebsd.org/~trasz/fast-loader-3.diff 

This patch solves three issues:

1. As it is now, the code in biosdisk.c tries very hard to split
   reasonably sized (up to 64kB, IIRC) requests into smaller ones.

2. The code in biosdisk.c rereads the partition table and probably
   some filesystem metadata every time a file gets opened, i.e.
   for every module.  These reads bypass the bcache.

3. The code in bcache.c doesn't really implement an LRU - it implements
   'least recently added' algorithm, i.e. a kind of queue.  Not that
   it matters much, since it flushes the elements two seconds after
   caching them anyway.  I replaced it with Least Frequently Used.
   LRU didn't behave well, as it tended to replace metadata with data
   used only once.

In my tests under VMWare Fusion, this cut the modules loading time
by half.  I don't intend to commit the patch as-is - the first part
looks dangerous (the splitting was probably done for a reason),
the second is hackish, and the third doesn't improve anything by itself.
I'm working on something else at a moment; feel free to pick this up.

-- 
If you cut off my head, what would I say?  Me and my head, or me and my body?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120123215503.GA64787>