Behdad Esfahbod's daily notes on GNOME, Pango, Fedora, Persian Computing, Bob Dylan, and Dan Bern!

My Photo
Location: Toronto, Ontario, Canada

Ask Google.

Contact info
Hacker Emblem Become a Friend of GNOME I Power Blogger
follow me on Twitter
July 2003
August 2003
October 2003
November 2003
December 2003
March 2004
April 2004
May 2004
July 2004
August 2004
September 2004
November 2004
March 2005
April 2005
May 2005
June 2005
July 2005
August 2005
September 2005
October 2005
November 2005
December 2005
January 2006
February 2006
March 2006
April 2006
May 2006
June 2006
July 2006
August 2006
September 2006
October 2006
November 2006
December 2006
January 2007
February 2007
March 2007
April 2007
May 2007
June 2007
July 2007
August 2007
September 2007
October 2007
November 2007
December 2007
January 2008
February 2008
March 2008
April 2008
May 2008
June 2008
July 2008
August 2008
October 2008
November 2008
December 2008
January 2009
March 2009
April 2009
May 2009
June 2009
July 2009
August 2009
November 2009
December 2009
March 2010
April 2010
May 2010
June 2010
July 2010
October 2010
November 2010
April 2011
May 2011
August 2011
September 2011
October 2011
November 2011
November 2012
June 2013
January 2014
May 2015
Current Posts
McEs, A Hacker Life
Sunday, August 28, 2005
 I HATE prelink

While making last-minute clean ups for preload to handle deleted binaries and shared objects nicely, I figure out a disaster, which is prelink changing binaries every #^@&ing night :-(.

What happens then is that preload simply loses all the context information it has gathered about the binary, since it's a new binary there in place...

So I have to ignore the part of the file name after the magic string ".#prelink#.". What a hack...

I hate prelink too. I ran into the problem for a different reason while playing with checkpointing (
You can disable it in /etc/sysconfig/prelink.
Thanks Pradeep, but I'm afraid my mentor in Fedora does not like the idea of disabling prelink to run preload ;).
I lived under impression that prelink is some evil hack. And it's no longer needed when programs are linked with "-Wl,-O1" in LDFLAGS. Do you really still need prelink?
I can't imagine how -Wl,-O1 may have anything to do with prelinking. Lemme explain what prelink does: It reads all shared libraries installed on your system and assigns nonoverlapping address spaces to each of them and relocates them to that place, and saves them back to the disk. Then for every binary on the system too, prelinks it to some empty slot in the address space.

This way, at run time, most probably no relocation is needed, since all objects involved are already relocated to some location, and no clash happens. That's what prelink does. This cannot be done by the linker when compiling the application, since it involves altering the shared objects too.

Whether the prelinking is an effective way of optimizing the startup time, that's another question, and most probably not for anything other and OO.o and maybe Firefox.
Prelink gets you three things, which can be obtained via other routes:

1) As behdad has already stated, you get a faster startup time in code with many runtime relocations. This has most impact on large C++ applications, since they tend to have more relocations than C applications. There are hacks to minimise the number of relocations in other ways on some architecture (using relative addressing).

2) With the -R option, you get static address space randomisation. Obviously, something similar can also be done by the kernel.

3) The non-obvious benefit is the increase in shared memory. Because the relocations are present in the on-disk binary, they remain shared by the COW infrastructure; if they're done by the dynamic loader in memory, each binary gets its own copy of any pages that include a relocation. This adds up when you've got many different binaries running (as against many forked copies of one binary). The mergemem project looked at providing an equivalent behaviour in the kernel (by merging pages that came from one binary, were changed, but now match).
Thanks Simon for the detailed comment. The part about COW pages was new to me, never thought about it before.
I was mistaken by some email from old (pre-warty) days on Ubuntu mailing list. Thanks for clarification!
Post a Comment

Links to this post:

Create a Link

<< Archive
<< Home