2010-02-13 6 views
14

Wenn ich mit MSYS etwas kompiliere, kann der Schritt ./configure länger dauern als der make. Der gleiche Prozess in Linux hat jedoch eine schnelle Konfiguration und langsame Ausführung. Ist das nur eine Einstellung in MSYS, die mein System ausbremst? Hat jemand eine Lösung?Warum ist die Konfiguration in MSYS so langsam?

Antwort

21

Typische configure Skripte tun ein Los des Startens kleiner Teilprozesse. Auf Unix-ähnlichen Betriebssystemen geschieht dies mit den Funktionsaufrufen fork() und exec(), die eine ganz bestimmte Semantik haben, die beibehalten werden muss (zum Beispiel Copy-on-Write Shared Memory nach Forking). Unter Windows werden Subprozesse mit CreateProcess() erstellt, die eine sehr unterschiedliche Semantik haben (z. B. vollständig separater Speicherbereich vom übergeordneten). Um Unix-ähnliche Skripte und Programme korrekt ausführen zu können, muss MSYS eine Menge Emulationsarbeit leisten, um das Erstellen neuer Prozesse unter Windows wie fork()/exec() unter Unix zu ermöglichen. Dies endet langsamer als ein Betriebssystem, das diese Funktionsaufrufe nativ anbietet.

+2

Es ist eigentlich nicht so schlimm, CreateProcess auf Windows. Ich denke, Cygwin versucht Fork auf Windows zu emulieren, was es wahnsinnig langsam macht. Wenn bash nicht fork verwendet (ich nehme an, dass es fork verwendet, aber ich habe es nicht überprüft), um Prozesse zu starten, dann würde configure genauso schnell laufen. Auf meiner i7-Box, als ich versuchte, dieses "Problem" zu beheben, sah es so aus, dass Cygwin nur wenige Male pro Sekunde forkieren kann. Eine Möglichkeit, die Geschwindigkeit der Gabelung zu testen: while (true); date Datum; fertig uniq -c – Pavel

+1

+1 Pavel .. uclinux hatte das gleiche Problem, dass es ohne eine MMU laufen kann und alles mit Gabel verwendet eine sehr langsame vollständige Kopie – user1496062

0

Sie können auch alle laufenden Virenscanner ausschalten. Sie werden jedes Mal, wenn sie geladen wird, eine ausführbare Datei erneut scannen, was die Skriptleistung absolut zum Erliegen bringt.

Auch wenn Anti-Virus nicht läuft, vergessen Sie Windows Defender nicht. (Vielleicht möchten Sie auch die Benutzerkontensteuerung deaktivieren, obwohl ich nicht weiß, welche Auswirkungen dies auf die Programmladezeit hat.)

0

Es gibt eine Menge Festplattenzugriffe, die IMHO Dinge sehr verlangsamen. Zum Beispiel erstellt configure temporären Quellcode, der als Teil der durchgeführten Tests kompiliert wird. Dies erstellt eine Objektdatei, die erneut gelöscht werden muss. Was ich tue, um die Konfiguration zu beschleunigen, ist, die Quelle zu extrahieren, die ich auf einem RAM-Laufwerk erstellen und dort konfigurieren und kompilieren möchte. Ich empfehle die Verwendung von ImDisk (http://www.ltr-data.se/opencode.html/#ImDisk), die frei ist.