{"id":49,"date":"2006-04-26T08:59:50","date_gmt":"2006-04-26T06:59:50","guid":{"rendered":"http:\/\/my.stargazer.at\/?p=49"},"modified":"2007-06-19T15:43:44","modified_gmt":"2007-06-19T13:43:44","slug":"system-tuning-mit-prelink","status":"publish","type":"post","link":"https:\/\/my.stargazer.at\/de\/2006\/04\/26\/system-tuning-mit-prelink\/","title":{"rendered":"System Tuning mit Prelink"},"content":{"rendered":"<p>Zuerst m\u00f6chte ich einmal kl\u00e4ren was Prelinking ist, bevor ich dazu komme, wie man es anwendet. Viele Programme &#8211; um nicht zu sagen fast alle &#8211; verwenden so genannte Shared Libraries, welche beim Start geladen werden m\u00fcssen.<\/p>\n<p><!--more--><\/p>\n<p>Das Nachladen der Shared Libs ist bei kleineren Programmen nicht das Problem, doch nehmen wir einmal eine gr\u00f6ssere Anwendung wie z.B. KDE. Aufgrund seiner zahlreichen Abh\u00e4ngigkeiten ist er ein gutes Beispiel f\u00fcr l\u00e4ngere Ladezeiten, welchen ja beim Start aufgel\u00f6st werden m\u00fcssen.<\/p>\n<p>Da sich auf einem normalen System die Libraries nicht \u00e4ndern sind zum Linken immer wieder exakt die selben Informationen n\u00f6tig. Diesen Umstand kann man ausn\u00fctzen, indem man diese Informationen statisch speichert, indem man dieses Linken durchf\u00fchrt und an der entsprechenden Datei anh\u00e4ngt. Daher der Ausdruck Prelinken, da das Programm ja schon bereits vor dem Ausf\u00fchren linked.<\/p>\n<p>Um den oben beschriebenen Vorgang auszuf\u00fchren ben\u00f6tigen wir ein Programm, welches wie nicht anders zu erwarten <em>prelink<\/em> heisst. Also lassen wir uns dieses Teil von Portage installieren:<\/p>\n<blockquote><p><code>emerge prelink<\/code><\/p><\/blockquote>\n<p>Um Prelink effektiv nutzen zu k\u00f6nnen m\u00fcssen unsere Programme mit PIC (Position Independent Code) compiliert werden. Dies ist am Einfachsten durch das entsprechende USE-Flag zu realisieren.<\/p>\n<p>Unter Gentoo-Linux ist es eine Kleinigkeit die entsprechenden Pakete neu zu bauen, da ja Portage nicht dumm ist:<\/p>\n<blockquote><p><code>emerge --update --deep --newuse world<\/code><\/p><\/blockquote>\n<p>Nachdem dies geschafft ist k\u00f6nnen wir zum eigentlichen Vorgang des Prelinkens schreiten. Die Config f\u00fcr Prelink in <em>\/etc\/prelink.conf<\/em> ist selbsterkl\u00e4rend, weshalb ich nicht extra auf sie eingehe.<\/p>\n<blockquote><p><code>prelink -amR<\/code><\/p><\/blockquote>\n<p>die Parameter sind einfach:<br \/>\n-a ist der Parameter f\u00fcr alle Programmdateien<br \/>\n-m beh\u00e4lt den virtuellen Speicherbereich bei, da wir sehr viele Dateien prelinken<br \/>\n-R steht f\u00fcr Zufall (Random), womit die Zu- bzw Anordnung der Adressen zuf\u00e4llig passiert, was die Sicherheit gegen Puffer\u00fcberl\u00e4ufe erh\u00f6ht.<\/p>\n<p><strong>ACHTUNG: Prelinken ben\u00f6tigt Speicherplatz. Sollte nicht ausreichend Festplattenspeicher vorhanden sein kann es vorkommen dass das System zerst\u00f6rt wird!<\/strong><\/p>\n<p>Auch hier sind nun nach Abschluss des Vorgangs Nacharbeitenn\u00f6tig, damit wir unser System schneller bekommen. KDE verwendet <em>kdeinit<\/em>, was wir nun nicht mehr ben\u00f6tigen. Setzen wir also <em>KDE_IS_PRELINKED=&#8220;true&#8220;<\/em> in <em>\/etc\/env.d\/99kde-env<\/em> um KDE \u00fcber unsere Prelink-Aktion zu informieren.<\/p>\n<p>Zusammenfassend kann gesagt werden, dass man durch Prelink die Startzeit von grossen Anwendungen verk\u00fcrzen kann. Sollte es bei bestimmten Programmen nicht klappen, kann man dies r\u00fcckg\u00e4ngig machen (siehe <em>man prelink<\/em>). Wenn wir Dateien auf unserem System durch z.B. Updates oder einen Recompile \u00e4ndern geht das prelinking verloren, was es n\u00f6tig macht die Prozedur nochmal laufen zu lassen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zuerst m\u00f6chte ich einmal kl\u00e4ren was Prelinking ist, bevor ich dazu komme, wie man es anwendet. Viele Programme &#8211; um nicht zu sagen fast alle &#8211; verwenden so genannte Shared Libraries, welche beim Start geladen werden m\u00fcssen.<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[218,217],"class_list":["post-49","post","type-post","status-publish","format-standard","hentry","category-it-related-stuff","tag-tuning","tag-prelink"],"_links":{"self":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/49","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/comments?post=49"}],"version-history":[{"count":0,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/49\/revisions"}],"wp:attachment":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media?parent=49"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/categories?post=49"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/tags?post=49"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}