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.

3voto

Dmitry Gusarov Punkte 1204

Ja, das gleiche Problem habe ich auch schon gehabt. Und nach erfolglosem Googeln habe ich gerade einen Windows-Dienst geschrieben, der das RAM-Laufwerk (eigentlich einen beliebigen Ordner, denn das RAM-Laufwerk kann z.B. in den Desktop eingebunden werden) faul sichert.

http://bitbucket.org/xkip/transparentbackup Sie können ein Intervall für die vollständige Überprüfung festlegen (Standard 5 Minuten). Und ein Intervall für die Überprüfung nur der gemeldeten Dateien (Standardwert 30 Sekunden). Scan erkennt geänderte Dateien anhand des Attributs "Archiv" (das Betriebssystem setzt dieses Attribut speziell für Archivierungszwecke zurück). Nur auf diese Weise geänderte Dateien werden gesichert.

Der Dienst hinterlässt eine spezielle Markierungsdatei, um sicherzustellen, dass die Zielsicherung genau eine Sicherung der Quelle ist. Wenn die Quelle leer ist und keine Markierungsdatei enthält, führt der Dienst eine automatische Wiederherstellung aus dem Backup durch. So können Sie das RAM Drive einfach zerstören und mit der automatischen Datenwiederherstellung neu erstellen. Es ist besser, ein RAM-Laufwerk zu verwenden, das in der Lage ist, beim Systemstart eine Partition zu erstellen, damit es transparent arbeitet.

Eine andere Lösung, die ich kürzlich entdeckt habe, ist SuperSpeed SuperCache .

Diese Firma hat auch eine RAM-Disk, aber das ist eine andere Software. SuperCache ermöglicht Ihnen die Verwendung von zusätzlichem RAM für die Zwischenspeicherung auf Blockebene (dies unterscheidet sich stark von der Zwischenspeicherung von Dateien), und eine weitere Option ist die vollständige Spiegelung Ihres Laufwerks in den RAM. In jedem Szenario können Sie angeben, wie oft schmutzige Blöcke auf die Festplatte zurückgeschickt werden sollen, so dass die Schreibvorgänge wie auf dem RAM-Laufwerk ablaufen, aber im Spiegelungsszenario auch die Lesevorgänge wie auf dem RAM-Laufwerk. Sie können eine kleine Partition erstellen, z. B. 2 GB (unter Windows), und die gesamte Partition dem RAM zuordnen.

Ein interessanter und sehr nützlicher Aspekt dieser Lösung ist, dass Sie die Zwischenspeicher- und Spiegelungsoptionen jederzeit mit nur zwei Klicks ändern können. Wenn Sie z. B. Ihre 2 GB für Spiele oder virtuelle Maschinen zurückhaben wollen, können Sie die Spiegelung sofort beenden und den Speicher wieder freigeben. Sogar geöffnete Datei-Handles werden nicht unterbrochen - die Partition arbeitet weiter, aber als normales Laufwerk.

EDIT: Ich empfehle auch dringend, den TEMP-Ordner auf ein anderes RAM-Laufwerk zu verschieben, da Compiler in der Regel viel Arbeit mit temp machen. In meinem Fall brachte es mir weitere 30 % Kompiliergeschwindigkeit.

3voto

krosenvold Punkte 73093

Ich habe nicht genau das, wonach Sie suchen, aber ich verwende jetzt eine Kombination aus Ramdisk y DRAM-Ramdisk . Da es sich um Windows handelt, habe ich eine harte 3-GB-Grenze für den Kernspeicher, was bedeutet, dass ich nicht zu viel Speicher für eine RAM-Disk verwenden kann. 4 GB mehr auf der 9010 sind wirklich eine tolle Sache. Ich lasse mein IDE all seine temporären Daten auf der Solid State RAM-Disk speichern und auch die Maven Repository. Die DRAM-RAM-Disk verfügt über ein Batterie-Backup zur Flash-Karte. Das klingt wie Werbung, aber es ist wirklich eine hervorragende Einrichtung.

Die DRAM-Platte hat zwei SATA-300-Anschlüsse und erreicht bei den meisten Tests eine durchschnittliche Suchzeit von 0,0 ms ;) Etwas für den Weihnachtsstrumpf?

2voto

Jay Bazuzi Punkte 43111
  1. Profil. Vergewissern Sie sich, dass Sie die einzelnen Optionen gut ausmessen. Sie können sogar Dinge kaufen, die Sie bereits abgelehnt haben, sie messen und zurückschicken, damit Sie wissen, dass Sie mit guten Daten arbeiten.

  2. Besorgen Sie sich eine Menge RAM. 2-GB-DIMMs sind sehr billig; 4-GB-DIMMs kosten etwas mehr als 100 US-Dollar pro Stück, aber das ist immer noch nicht viel Geld im Vergleich zu dem, was Computerteile noch vor ein paar Jahren kosteten. Unabhängig davon, ob Sie eine RAM-Disk verwenden oder das Betriebssystem einfach seine Arbeit machen lassen, wird dies helfen. Wenn Sie mit einem 32-Bit-Windows arbeiten, müssen Sie auf 64-Bit umsteigen, um mehr als 3 GB nutzen zu können.

  3. Live Mesh kann von Ihrem lokalen RAM-Laufwerk in die Cloud oder auf einen anderen Computer synchronisiert werden, so dass Sie ein aktuelles Backup erhalten.

  4. Nur Compiler-Ausgaben verschieben. Behalten Sie Ihren Quellcode auf der physischen Festplatte, aber lassen Sie .obj-, .dll- und .exe-Dateien auf dem RAM-Laufwerk erstellen.

  5. Betrachten Sie eine DVCS . Klonen Sie vom echten Laufwerk in ein neues Repository auf dem RAM-Laufwerk. "Pushen" Sie Ihre Änderungen häufig in das übergeordnete Repository zurück, z. B. jedes Mal, wenn alle Tests bestanden sind.

2voto

James Curran Punkte 98228

Ihr Betriebssystem speichert Dinge im Arbeitsspeicher zwischen. Eine RAM-Disk mag schneller erscheinen, aber das liegt daran, dass Sie die Zeiten für das "Kopieren auf die RAMDisk" und das "Kopieren von der RAMDisk" nicht mit einbeziehen. Die Zuweisung von Arbeitsspeicher an eine RAMDisk mit fester Größe reduziert lediglich den für die Zwischenspeicherung verfügbaren Speicher. Das Betriebssystem weiß besser, was im RAM sein muss.

2voto

Kuno Punkte 21

Ich hatte die gleiche Idee und habe ein wenig recherchiert. Ich fand die folgenden Tools, die das tun, wonach Sie suchen:

Das zweite konnte ich jedoch unter 64-Bit-Windows 7 überhaupt nicht zum Laufen bringen, und es scheint im Moment nicht gepflegt zu werden.

Die VSuite RAM-Disk hingegen funktioniert sehr gut. Leider konnte ich keine signifikante Leistungssteigerung im Vergleich zur SSD Scheibe an Ort und Stelle.

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