Difference between revisions of "Pre Linking"

From eLinux.org
Jump to: navigation, search
(Fix link.)
m (Added Category:Boot Time)
 
(9 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 
== Description ==
 
== Description ==
 
Pre-Linking is a mechanism for linking programs to shared libraries ahead of time.
 
Pre-Linking is a mechanism for linking programs to shared libraries ahead of time.
In general, every time an application is run it must have it's external symbols resolved - looked up in the shared library symbol table, and fixed up in the program binary to refer to the correct offsets in the library. To use prelinking, a special utility is run which does this resolution and fixup once for the program. This saves the cost of linking at runtime.  
+
In general, every time an application is run it must have its external symbols resolved - looked up in the shared library symbol table, and fixed up in the program binary to refer to the correct offsets in the library. To use prelinking, a special utility is run which does this resolution and fixup once for the program. This saves the cost of linking at runtime.  
  
 
There is an existing package from RedHat which provides this feature.
 
There is an existing package from RedHat which provides this feature.
Line 7: Line 7:
 
A drawback of this is that if the shared library is changed, the fixups are no longer correct, and the program must be fixed-up again.  This is much less of an issue in an embedded situation, where the programs and libraries are less likely to change than in a desktop or server Linux system.
 
A drawback of this is that if the shared library is changed, the fixups are no longer correct, and the program must be fixed-up again.  This is much less of an issue in an embedded situation, where the programs and libraries are less likely to change than in a desktop or server Linux system.
  
 
+
== Overview of linking ==
 +
There is an excellent paper with an overview of dynamic linking issues at: [http://web.archive.org/web/*/http://www.cis.upenn.edu/~mwh/papers_DB/ieee_computer97.pdf Pre Linking Overview]
 +
This paper describes not only pre-linking, but lazy linking and more exotic systems, like compile-on-load.
  
 
== Expected Improvement ==
 
== Expected Improvement ==
Line 17: Line 19:
  
 
== Resources ==
 
== Resources ==
=== Projects ===
+
 
==== RedHat prelinking system ====
+
=== RedHat prelinking system ===
 
*The prelink package is at: http://people.redhat.com/jakub/prelink/
 
*The prelink package is at: http://people.redhat.com/jakub/prelink/
 
*A white paper is at: [http://people.redhat.com/jakub/prelink/prelink.pdf prelink]
 
*A white paper is at: [http://people.redhat.com/jakub/prelink/prelink.pdf prelink]
 +
 +
prelink currently supports the following architectures: alpha, arm, cris, i386, ia64, ppc32, ppc64, s390, sh, sparc32, sparc64, x86_64. At present the glibc dynamic linker is required to prelink executables and load prelinked code, uClibc does not support it.
  
 
=== Instructions for using prelinking with Gentoo ===
 
=== Instructions for using prelinking with Gentoo ===
The following page has information on how to use prelinking with a Debian system:
+
The following page has information on how to use prelinking with a Gentoo system:
  
 
http://www.gentoo.org/doc/en/prelink-howto.xml
 
http://www.gentoo.org/doc/en/prelink-howto.xml
Line 33: Line 37:
 
*Resident - Resident Good (comparisons with prebind)
 
*Resident - Resident Good (comparisons with prebind)
 
http://www.shiningsilence.com/dbsdlog/2004/01/20/215.html
 
http://www.shiningsilence.com/dbsdlog/2004/01/20/215.html
 +
  
 
== Specifications ==
 
== Specifications ==
Line 38: Line 43:
  
 
== Patches ==
 
== Patches ==
No kernel patches required, although a kernel version of 2.4.10 or above is a requirement.
+
No kernel patches required for kernels 2.4.10 and later.
  
 
== Case Studies ==
 
== Case Studies ==
Line 50: Line 55:
 
; Time without change : 2479 ms
 
; Time without change : 2479 ms
 
; Time with change : 125 ms
 
; Time with change : 125 ms
; Source : page 19 of [http://tree.celinuxforum.org/CelfPubWiki/ITJ2005Detail1_2d2?action=AttachFile&do=get&target=CELF_Technical_Jamboree_June13.pdf   Making Mobile Phone with CE Linux]
+
; Source : page 19 of [http://tree.celinuxforum.org/CelfPubWiki/ITJ2005Detail1-2?action=AttachFile&do=get&target=CELF_Technical_Jamboree_June13.pdf Making Mobile Phone with CE Linux]
  
 
=== Case 2 ===
 
=== Case 2 ===
Line 68: Line 73:
 
** http://tree.celinuxforum.org/CelfPubWiki/JapanTechnicalJamboree13#head-ab59e6354d343ec0a804b5f440d35b5dcc27304c
 
** http://tree.celinuxforum.org/CelfPubWiki/JapanTechnicalJamboree13#head-ab59e6354d343ec0a804b5f440d35b5dcc27304c
 
*** Evaluation report by Mr. Yagi (Mitsubishi)
 
*** Evaluation report by Mr. Yagi (Mitsubishi)
 +
 +
[[Category:HOWTOs]]
 +
[[Category:Boot Time]]

Latest revision as of 07:47, 29 May 2015

Description

Pre-Linking is a mechanism for linking programs to shared libraries ahead of time. In general, every time an application is run it must have its external symbols resolved - looked up in the shared library symbol table, and fixed up in the program binary to refer to the correct offsets in the library. To use prelinking, a special utility is run which does this resolution and fixup once for the program. This saves the cost of linking at runtime.

There is an existing package from RedHat which provides this feature.

A drawback of this is that if the shared library is changed, the fixups are no longer correct, and the program must be fixed-up again. This is much less of an issue in an embedded situation, where the programs and libraries are less likely to change than in a desktop or server Linux system.

Overview of linking

There is an excellent paper with an overview of dynamic linking issues at: Pre Linking Overview This paper describes not only pre-linking, but lazy linking and more exotic systems, like compile-on-load.

Expected Improvement

[This is not measured yet.]

We expect that with use of prelinking, there will be a slight reduction in boot time for Linux system, in the area of initial application loading.

We need to use this system and measure the effect of prelinking for a determined set of applications.

Resources

RedHat prelinking system

prelink currently supports the following architectures: alpha, arm, cris, i386, ia64, ppc32, ppc64, s390, sh, sparc32, sparc64, x86_64. At present the glibc dynamic linker is required to prelink executables and load prelinked code, uClibc does not support it.

Instructions for using prelinking with Gentoo

The following page has information on how to use prelinking with a Gentoo system:

http://www.gentoo.org/doc/en/prelink-howto.xml

Related Projects

http://mail-index.netbsd.org/tech-userlevel/2002/12/01/0000.html

  • Resident - Resident Good (comparisons with prebind)

http://www.shiningsilence.com/dbsdlog/2004/01/20/215.html


Specifications

None so far.

Patches

No kernel patches required for kernels 2.4.10 and later.

Case Studies

Case 1 - Panasonic mobile phone prelink

Panasonic used pre-linking on their Linux-based mobile phones. These used a 2.4.x Linux kernel, for an ARM processor. Measuring the time to load a single multimedia application with regular dynamic linking and pre-linking, showed that pre-linking could save a lot of time.

Hardware 
ARM9 (unspecified CPU frequency)
Kernel Version 
2.4.20 (based on Monta Vista Linux CEE 3.1), glibc 2.3
Time without change 
2479 ms
Time with change 
125 ms
Source 
page 19 of Making Mobile Phone with CE Linux

Case 2

Case 3

Future Work

This item is a work-in-progress, and we are just getting started.

Material from CELF presentations

ARM Prelink

MIPS Prelink