Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

10.02.2003, 19:17

Optimierung und Prelink

Hi zusammen,

irgendwie bin ich etwas irritiert. Ich hatte bei mir bisher immer SuSE (zuletzt 8.1 laufen) und seit 2 Wochen versuche ich mich an Gentoo. Ich habe Gentoo nach Anleitung von gentoo.org installiert und mit den Optimierungen -march=athlon-xp -pipe -o2 kompiliert. Anschließend habe ich rein aus Neugierde mal Prelink nach der Doku von gentoo.org ausgeführt. Nachdem ich nun 2 Wochen Gentoo laufen hatte, habe ich meine alte Platte mit SuSE 8.1 drangehängt und gebootet. Der Bootvorgang dauert um einiges länger als bei Gentoo aufgrund der Hardwareerkennung und sonstigen Spielereien. Das merkwürdige: Nachdem ich nun nochmal KDE 3.1 gestartet hatte, musste ich feststellen, dass die Geschwindigkeit dieselbe ist. Gentoo war also kein Stück schneller als mein SuSE im Betrieb. Dabei dachte ich gerade, dass KDE deutlich schneller sein müsste durch Selbstkompilieren und Prelink.

Was mir bei Prelink auch nicht klar ist: Ich habe prelink nach der Doku installiert und meine Binaries patchen lassen. Aber der Geschwindigkeitsvorteil ist mir nicht oder nur minimal (Einbildung) aufgefallen. Wenn ich KDE beende und direkt darauf nochmal starte, läd es wesentlich schneller. (Weil die Libs dann schon im Speicher sind?) Aber ist dies nicht gerade das, was prelink machen sollte? Dürfte denn dann gar kein Unterschied mehr sein, ob schonmal gestartet oder nicht? Ist es nicht gerade die Aufgabe von Prelink die Libs vorher in den Speicher zu laden? Oder mach ich da irgendwas falsch? Muss prelink beim Booten ausgeführt werden? Weiß ja nicht, wie genau prelink funktioniert, aber ich hätte mir mehr erhofft, zumal auf der Doku von eventuell 50% Geschwindigkeitsvorteil die Rede ist. Aber selbst ohne Prelink müsste Gentoo doch schneller als mein SuSE sein. Zumindest dachte ich das bis heute.

Mike

2

10.02.2003, 19:28

Hi,
seit die Distributionen auf gcc3.2 und glibc 2.3 umgestellt haben sowie ihre Binaries für 586 bzw 686 kompilieren ist der Geschwindigkeitsvorteil ziemlich zusammengeschrumpft.
Das ist allerdings auch nicht der Grund warum ich gentoo habe, sondern zum einen das Portage System, mit dem man nicht auf rmp(s) und ihren schönen z.T. unerklärlichen Abhängigkgeiten angewiesen ist, und zum anderen weil gentoo leichter zu durchschauen ist. Änderst Du mit yast etwas so laufen etwa 15-20 scripte, die alles und jeden irgendwie updaten und neustarten. Wenn Du da was manuell machen musst, bist Du recht schnell am Ende... Und dann hast Du mit gentoo natürlich ständig eine aktuelle Distribution. Oder schon mal versucht von 7.3 auf 8.0 upzudaten?

Dim

3

11.02.2003, 00:14

Hi,

aber müsste es mit prelink nicht deutlich schneller sein? Im Grunde hätte ich gar nicht alles kompilieren müssen. Hätte auch die vorkompilierten Pakete von Gentoo nehmen können, wäre genauso effektiv.

Mike

4

11.02.2003, 00:46

Wer sagt denn, dass SuSE nicht selbst prelinking verwendet? :wink:
Mandrake macht es definitiv, wuerde mich nicht wundern, wenn es andere Distributionen auch tun..

Und full ack zu dem, was dimitri geschrieben hat, DAS sind auch fuer mich die waren Vorteile Gentoo's, nicht so sehr die Geschwindigkeit.
Denn groessten Geschwindigkeitsvorteil merkst du im Vergleich der Optimierungen auf i386 vs. i586, eine weitere Optimierung auf athlon, p3 usw, bringt nicht mehr soo viel.
Natuerlich, dein Gentoo IST wahrscheinlich schneller als SuSE, wenn du richtig auf dein System optimiert hast, aber dieser kleine Geschwindigkeitsvorteil macht sich nur bei sehr rechenintensiven Aufgaben bemerkbar.

Und nochmal zum Prelinking, und seiner Funktionsweise: Die Addressen der Funktionen von Shared Libraries muessen beim Programmstart noch an den Addressraum des Programmes "angepasst" werden. Beim Prelinking wird das sozusagen schon vorher erledigt, die Informationen im Programm abgelegt, und dadurch entfaellt diese Prozedur beim Programmstart, und dass fuehrt zu schnelleren Ladezeiten, vor allem bei Programmen, die gegen viele/grosse Bibliotheken gelinkt sind, wie z.B. KDE.
Und nein, du machst das schon richtig, das Prelinking musst du nur einmal ausfuehren.


Gruss, cytrox

5

11.02.2003, 17:14

Hi,

danke für Deine Antwort. Dann hat das auch gar nichts mit dem object-prelinking zu tun, das ich kenne, bei dem die Libs schon vorher in den Speicher geladen werden und dann sofort zu Verfügung stehen oder? Wie kann ich dann dieses umsetzen? Das müsste ja nochmals einen erheblichen Vorteil beim Programmstart von z.B. KDE oder Mozilla bieten.

Mike

6

11.02.2003, 18:57

Ja, das object prelinking ist was anderes. Wobei man da wieder zwischen objprelink und combreloc unterscheiden muss, beides wird in diesem Zusammenhang genannt.
Ersteres, objprelink, bezieht sich ausschliesslich auf C++ Programme/Bibliotheken, (genauer auf die Virtuellen Funktionen in diesen). Vereinfacht gesagt, werden die Addressen von virtuellen Funktionen in Tabellen (virtual tables) verwaltet, und auch diese Addressen muessen beim Programmstart angepasst werden (relocations).
Erbt nun eine Klasse von einer Basisklasse mit virtuellen Funktionen, erhaelt sie eine eigne virtual table, fuer die dann wiederum relocations noetig sind. Bedenkt man nun, dass z.B. im Falle von KDE so ziemlich jede Klasse von der Klasse QWidget so an die hundert virtuelle Funktionen erbt, kommt da einiges zusammen.
Durch objprelink wird das ganze nun soweit vereinfacht, dass fuer jede virtuelle Funktion nur noch eine relocation noetig ist, und nicht mehr mehrere, dadurch schnellere Ladezeiten.
Combreloc dagegen cached sozusagen die noetigen relocations und beschleunigt so den Startvorgang.
Seit einiger Zeit ist combreloc Standard in Gentoo, brauchst dich also nicht selbst darum zu kuemmern.

Und noch um ein Missverstaendnis aufzuklaeren, das hat nichts mit dem Landen der Libraries in den Speicher zu tun, dass wird ja immer getan, ob prelink oder nicht: Das Programm startet, und die benoetigten Bibliotheken werden geladen und ihre Symbole in den Addressbeich des Programmes eingeblendet. Der Unterschied ist nur, dass beim Prelinking (im Ideallfall) alle Relocations, die dabei noetig sind, entfallen, und der Speicherverbrauch etwas geringer ist, da zwei Programme, bei denen eine von beiden benoetigte Bibliothek an der gleichen Addresse eingeblendet ist, sich die betreffenden Speicherseiten "teilen" koennen.

Gruss, cytrox

7

11.02.2003, 23:24

Hi,

ich hatte das bei Diskussionen, warum Windowsprogramme wie IE etc. unter Windows schneller starten als z.B. Konqueror unter Linux so verstanden, dass bei Windows bereits alle benötigten Libs im Speicher sind und dann nur noch das Fenster dargestellt werden muss für z.B. IE oder andere Windowsprogramme. So dachte ich, wäre es auch unter Linux umsetzbar. Dass beim Starten von Linux eine Liste vorgegebener Libraries von Programmen, die man oft benutzt bereits geladen werden, so dass der Konqueror z.B. diese Libraries direkt nutzen kann und innerhalb kurzer Zeit dargestellt wird. Habe gehört, dass Mozilla oder Netscape unter Windows ebenfalls eine Funktion in dieser Art anbieten. Dass also die Libs vorher geladen werden und das Darstellen des Programmfensters somit in kürzester Zeit möglich ist. Ist so etwas nicht unter Linux möglich? Finde es ab und zu etwas frustrierend, dass ein IE unter Windows auf meinem Rechner 10 x so schnell gestartet hat, wie mein Konqueror jetzt unter Linux :-)


Mike

8

12.02.2003, 08:15

Hi,
wie lange braucht den Konqui bei Dir? Also beim ersten start bei mir etwa 2 Sekunden und dann knapp 1 Sekunde.
Denke nicht das dass unter Windows 10mal schneller geht.

Dim

9

12.02.2003, 11:48

knapp 2 sek OHNE prelink ! :)
- :: AMD XP 2500+ :: Gentoo :: -
www.Unixboard.de - German Linux Community
www.Gentooforum.de - German Gentoo Community