58 Stimmen

RAM-Drive zum Kompilieren - gibt es so etwas?

Eine Antwort (siehe unten) auf eine der Fragen hier auf Stack Overflow brachte mich auf die Idee für ein großartiges kleines Stück Software, das für Programmierer überall von unschätzbarem Wert sein könnte.

Ich stelle mir eine RAM-Drive-Software vor, aber mit einem entscheidenden Unterschied: Sie würde einen echten Ordner auf meiner Festplatte spiegeln. Genauer gesagt - den Ordner, der das Projekt enthält, an dem ich gerade arbeite. Auf diese Weise würden alle Builds fast sofort erfolgen (oder zumindest um einige Größenordnungen schneller). Das RAM-Laufwerk würde seinen Inhalt im Hintergrund mit dem Festplattenlaufwerk synchronisieren und dabei nur ungenutzte Ressourcen verwenden.

Eine schnelle Google-Suche ergab nichts, aber vielleicht weiß ich einfach nicht, wie man googelt. Vielleicht kennt jemand eine solche Software? Vorzugsweise kostenlos, aber angemessene Gebühren wären auch OK.

Hinzugefügt: Es wurden einige Lösungen vorgeschlagen, die ich gleich zu Beginn verworfen habe. Sie lauten (in keiner bestimmten Reihenfolge):

  • Kaufen Sie ein schnelleres Festplattenlaufwerk ( SSD vielleicht oder 10K RPM). Ich möchte keine Hardware-Lösung. Software ist nicht nur potenziell billiger (Freeware, wer möchte?), sondern kann auch in Umgebungen eingesetzt werden, in denen Hardware-Modifikationen unerwünscht oder sogar unmöglich wären - beispielsweise im Büro.
  • Überlassen Sie das Zwischenspeichern dem Betriebssystem/der Festplatte - es weiß besser, wie es Ihren freien Arbeitsspeicher nutzen kann. Das Betriebssystem/die Festplatte verfügt über allgemeine Cache-Algorithmen, die alles zwischenspeichern und versuchen vorherzusagen, welche Daten in Zukunft am meisten benötigt werden. Sie haben keine Ahnung, dass für mich mein Projektordner Priorität hat. Und wie wir alle wissen, wird dort sowieso nicht viel zwischengespeichert ;)
  • Es gibt jede Menge RAM-Drives; verwenden Sie eine davon. Tut mir leid, das wäre leichtsinnig. Ich muss meine Daten immer dann auf die Festplatte zurücksynchronisieren, wenn ich ein bisschen Zeit habe. Im Falle eines Stromausfalls könnte ich es ertragen, die letzten fünf Minuten Arbeit zu verlieren, aber nicht alles seit meinem letzten Check-in.

Hinzugefügt 2: Eine Idee, die aufkam - verwenden Sie ein normales RAM-Laufwerk plus einen Hintergrund-Ordner-Synchronisierer (aber ich meine Hintergrund ). Gibt es so etwas?

Hinzugefügt 3: Interessant. Ich habe gerade ein einfaches RAM-Laufwerk bei der Arbeit ausprobiert. Die Wiederherstellungszeit sinkt von ~14 Sekunden auf ~7 Sekunden (nicht schlecht), aber die inkrementelle Erstellung dauert immer noch ~5 Sekunden - genau wie auf der HDD. Irgendwelche Ideen, warum? Es verwendet aspnet_compiler et aspnet_merge . Vielleicht machen sie etwas mit anderen temporären Dateien an anderer Stelle?

Hinzugefügt 4: Oh, eine schöne neue Reihe von Antworten! :) OK, ich habe noch ein paar Infos für alle Neinsager :)

Einer der Hauptgründe für diese Idee ist nicht die oben erwähnte Software (14 Sekunden Bauzeit), sondern eine andere, auf die ich damals keinen Zugriff hatte. Diese andere Anwendung hat eine 100 MB große Codebasis, und ihre vollständige Erstellung dauert etwa 5 Minuten. Ah ja, es ist in Delphi 5 Der Compiler ist also nicht allzu fortschrittlich. :) Wenn man den Quellcode auf ein RAM-Laufwerk legt, ergibt sich ein GROSSER Unterschied. Ich habe es unter eine Minute gebracht, glaube ich. Ich habe nicht nachgemessen. Also für alle, die sagen, dass das Betriebssystem Dinge besser zwischenspeichern kann - ich bin da anderer Meinung.

Verwandte Frage:

RAM-Disk zur Beschleunigung von IDE

Anmerkung zum ersten Link: Die Frage, auf die sie verweist, wurde gelöscht, weil sie ein Duplikat war. Sie fragte:

Was tun Sie, während Ihr Code kompiliert wird?

Und die Antwort von Dmitri Nesteruk die ich verlinkt habe, war:

Ich kompiliere fast augenblicklich. Das liegt zum Teil daran, dass meine Projekte klein sind, zum Teil an der Verwendung von RAM-Disks.

0 Stimmen

Warum ist eine Änderung der Hardware im Büro nicht möglich? Wir haben immer ein gewisses Budget zur Verfügung, wenn der Wert vorhanden ist. Außerdem bin ich bekannt dafür, Hardware mit meinem eigenen Geld zu kaufen, nur um meine Arbeit angenehmer zu gestalten.

2 Stimmen

In meinem Fall dauern die Builds ~15s inkrementell und ~30s vollständig. Nicht wirklich etwas, womit man den Chef überzeugen kann. Aber es wäre schön, wenn es 1s wäre :) Und ich möchte nicht mein eigenes Geld in so etwas investieren. Außerdem - es gibt viele Leute da draußen und jeder hat eine andere Geschichte. Viele haben vielleicht auch einen Nutzen davon.

4 Stimmen

Wenn ich Ihr Chef wäre, würde ich mich dafür interessieren, wie Sie die Bauzeit von 15-30 Sekunden auf 1 Sekunde reduzieren können. Jede Eine wahrnehmbare Verzögerung ist eine Gelegenheit zur Verbesserung. Die Produktivität der Entwickler wird durch jede Verzögerung direkt beeinträchtigt.

0voto

IanNorton Punkte 6850

Die Verlangsamung der Festplatte wird hauptsächlich durch Schreibvorgänge und möglicherweise auch durch Virenscanner verursacht. Sie kann auch von Betriebssystem zu Betriebssystem stark variieren.

Mit der Vorstellung, dass Schreibvorgänge am langsamsten sind, wäre ich versucht, einen Build einzurichten, bei dem Zwischenstufen (z. B., .o Dateien) und Binärdateien werden an einem anderen Ort, z. B. auf einem RAM-Laufwerk, ausgegeben.

Sie können dann diesen bin/Zwischenordner mit schnelleren Medien verknüpfen (mit einer symbolischer Link o NTFS-Knotenpunkt ).

0voto

Bob Cross Punkte 22071

Das klingt nach Festplatten-Caching, das Ihr Betriebssystem und/oder Ihre Festplatte automatisch für Sie übernimmt (zugegebenermaßen mit unterschiedlichem Leistungsgrad).

Mein Rat: Wenn Ihnen die Geschwindigkeit Ihres Laufwerks nicht gefällt, kaufen Sie ein Hochgeschwindigkeitslaufwerk nur für Kompilierzwecke. Das erspart Ihnen Arbeit und könnte die Lösung für Ihre Kompilierprobleme sein.

Seitdem diese Frage gestellt wurde, haben sich die rotierenden Festplatten im Vergleich zu den SSDs zu elenden Schildkröten entwickelt. Sie kommen der ursprünglich gewünschten RAM-Disk in einer SKU, die Sie bei Newegg oder Amazon kaufen können, sehr nahe.

-2voto

Hernán Punkte 4349

Wie James Curran sagt, wird die Anzahl der häufigen Code- und Datenseiten im Laufe der Zeit durch den Festplatten-Cache des Betriebssystems auf eine überschaubare Größe reduziert, da die meisten Programme dem Gesetz der Lokalität von Referenzen folgen.

RAM-Disks waren nützlich, als Betriebssysteme mit Einschränkungen wie dummen Caches (Win 3.x, Win 95, DOS) gebaut wurden. Der Vorteil von RAM-Disks geht gegen Null, und wenn Sie viel RAM zuweisen, wird dies dem Cache-Manager des Systems Speicher entziehen, was die Gesamtleistung des Systems beeinträchtigt. Als Faustregel gilt: Lassen Sie Ihren Kernel das machen. Das ist dasselbe wie bei den "Speicherdefragmentierungs"- oder "Optimierungs"-Programmen: Sie zwingen tatsächlich Seiten aus dem Cache heraus (so dass Sie schließlich mehr RAM erhalten), aber sie führen dazu, dass das System im Laufe der Zeit eine Menge Seitenfehler macht, wenn Ihre geladenen Programme anfangen, nach Code/Daten zu fragen, die ausgelagert wurden.

Wenn Sie also mehr Leistung wollen, brauchen Sie ein schnelles Festplatten-E/A-Hardware-Subsystem, vielleicht RAID, eine schnellere CPU, einen besseren Chipsatz (keinen VIA!), mehr physischen Arbeitsspeicher usw.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X