Speeding up the loader(8).
Edward Tomasz Napierała
trasz at FreeBSD.org
Mon Jan 23 22:25:15 UTC 2012
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?
More information about the freebsd-hackers
mailing list