Zuerst möchte ich einmal klären was Prelinking ist, bevor ich dazu komme, wie man es anwendet. Viele Programme - um nicht zu sagen fast alle - verwenden so genannte Shared Libraries, welche beim Start geladen werden müssen.

Das Nachladen der Shared Libs ist bei kleineren Programmen nicht das Problem, doch nehmen wir einmal eine grössere Anwendung wie z.B. KDE. Aufgrund seiner zahlreichen Abhängigkeiten ist er ein gutes Beispiel für längere Ladezeiten, welchen ja beim Start aufgelöst werden müssen.

Da sich auf einem normalen System die Libraries nicht ändern sind zum Linken immer wieder exakt die selben Informationen nötig. Diesen Umstand kann man ausnützen, indem man diese Informationen statisch speichert, indem man dieses Linken durchführt und an der entsprechenden Datei anhängt. Daher der Ausdruck Prelinken, da das Programm ja schon bereits vor dem Ausführen linked.

Um den oben beschriebenen Vorgang auszuführen benötigen wir ein Programm, welches wie nicht anders zu erwarten prelink heisst. Also lassen wir uns dieses Teil von Portage installieren:

emerge prelink

Um Prelink effektiv nutzen zu können müssen unsere Programme mit PIC (Position Independent Code) compiliert werden. Dies ist am Einfachsten durch das entsprechende USE-Flag zu realisieren.

Unter Gentoo-Linux ist es eine Kleinigkeit die entsprechenden Pakete neu zu bauen, da ja Portage nicht dumm ist:

emerge --update --deep --newuse world

Nachdem dies geschafft ist können wir zum eigentlichen Vorgang des Prelinkens schreiten. Die Config für Prelink in /etc/prelink.conf ist selbsterklärend, weshalb ich nicht extra auf sie eingehe.

prelink -amR

die Parameter sind einfach:
-a ist der Parameter für alle Programmdateien
-m behält den virtuellen Speicherbereich bei, da wir sehr viele Dateien prelinken
-R steht für Zufall (Random), womit die Zu- bzw Anordnung der Adressen zufällig passiert, was die Sicherheit gegen Pufferüberläufe erhöht.

ACHTUNG: Prelinken benötigt Speicherplatz. Sollte nicht ausreichend Festplattenspeicher vorhanden sein kann es vorkommen dass das System zerstört wird!

Auch hier sind nun nach Abschluss des Vorgangs Nacharbeitennötig, damit wir unser System schneller bekommen. KDE verwendet kdeinit, was wir nun nicht mehr benötigen. Setzen wir also KDE_IS_PRELINKED="true" in /etc/env.d/99kde-env um KDE über unsere Prelink-Aktion zu informieren.

Zusammenfassend kann gesagt werden, dass man durch Prelink die Startzeit von grossen Anwendungen verkürzen kann. Sollte es bei bestimmten Programmen nicht klappen, kann man dies rückgängig machen (siehe man prelink). Wenn wir Dateien auf unserem System durch z.B. Updates oder einen Recompile ändern geht das prelinking verloren, was es nötig macht die Prozedur nochmal laufen zu lassen.

Vorheriger Beitrag Nächster Beitrag