Disabling prelink in software builds

John Gilmore gnu at toad.com
Tue May 17 15:58:30 EDT 2011

> > Any objections to prelink being disabled?

I object.  You are running a diskless, swapless system.  The whole
point of prelink is to make your read-only binaries actually remain
read-only, rather than requiring the dynamic linker to modify them
in memory.  This allows large numbers of pages of executables, their
data, linkage tables, etc, to be "paged out" by merely throwing them
away, whenever there's memory pressure -- which under Sugar and Browse
is all the time.  They can be "paged in" merely by reading them from
the prelinked executable files on flash.

If you don't run prelink, all these pages are stuck in RAM, because
they are modified by the linker before main() is ever called, and there's 
no way to page them out, so those page frames are permanently in use
even if the program never needs or uses any CPU time.  This reduces
the memory available for the programs that ARE trying to run.

In ordinary Linux systems that have swap space, non-prelinked
processes that are inactive can swap out their modified pages, onto a
small partition on the hard drive, freeing those page frames in DRAM
for use by active processes.  The XO doesn't have that luxury.

Measurements made immediately after booting, when there's little or no
memory pressure, won't tell you anything about this aspect of prelink.
You have to look at /proc/XXXXXX/smaps in a running system that IS
under memory pressure, to notice that much more of the memory of the
inactive processes has been released from DRAM, than in a
non-prelinked system under memory pressure.


More information about the Devel mailing list