Ubuntu boot speed fall in Hardy

Scott James Remnant scott at canonical.com
Thu May 22 08:13:44 UTC 2008


On Tue, 2008-05-13 at 14:07 +0200, Krzysztof Lichota wrote:

> >  > >  Where/how are these lists of blocks stored?
> >  >
> >  > They are stored in /prefetch directory as prefetch lists for each
> >  > traced app and for boot stages.
> >  > Each file contains list of tuples (device, inode, start-in-pages,
> >  > length-in-pages) which describe what to prefetch.
> >  >
> >  What creates these files?  A userspace daemon or the kernel module
> >  itself?  Is this a real filesystem or a virtual one?
> 
> The kernel module writes it. For boot prefetching, userspace script
> processes the lists as they are merged and sorted for last 3 runs.
> 
I noticed that you get lists (in /) for the phases, but files
in /prefetch for applications named PATH-stamp?

Could you give a little more detail on what files to expect, and what
the content/format of those files are?

> >  > >  What if the filesystem isn't mounted yet (/usr), how can the loading be
> >  > >  staged?
> >  >
> >  > Boot prefetching is split into 3 phases: initial boot (with only root
> >  > mounted), boot with all partitions mounted and GUI boot. Each stage
> >  > has separate prefetching list.
> >  >
> >  How are these phases delineated?  Does the kernel need to be told what
> >  stage it is in, or does userspace determine which set of prefetch files
> >  may be used?
> 
> Init scripts (similar to readahead scripts) are run and they tell
> kernel module which files to load and when.
> So boot prefetching can be easily changed by modifying these scripts,
> without touching the kernel part.
> 
I noticed the phases stuff.

Have you considered instead using cgroups to collate them?  Phases are
divided by time, which becomes problematic with a boot sequence running
in parallel.

A cgroups subsystem for prefetch would solve this, since cgroups are
inherited from parent to child.

E.g.

 * rcS is placed into the "boot" cgroup
   (thus all apps run by it are)
 * rc2 is placed into the "system" cgroup
 * gdm is placed into the "gui" cgroup

You can then still generate app prefetch lists for individual apps
(since apache can be started by hand, _and_ by rc2).  But also we can
generate combined lists for each cgroup.

Scott
-- 
Scott James Remnant
scott at canonical.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <https://lists.ubuntu.com/archives/ubuntu-devel-discuss/attachments/20080522/9ad347d9/attachment.sig>


More information about the Ubuntu-devel-discuss mailing list