2010-08-09 4 views
14

In meinem Unternehmen erforschen wir derzeit verschiedene Strategien zur Beschleunigung unserer CI-Builds. Wir haben unsere Builds profiliert und festgestellt, dass wir durch einen I/O-Engpass eingeschränkt sind. Wir haben einige Optionen, um damit in naher Zukunft fertig zu werden (~ 1-2 Monate), aber würden wirklich gerne eine Verbesserung sehen jetzt.Ist es sinnvoll, eine Ramdisk auf einem Build-Server zu verwenden?

Ich schlug vor, eine Ramdisk als Checkout- und Buildfile-Speicherort zu verwenden. Die Build-Ausgaben und Protokolle würden natürlich auf einer physischen Platte gespeichert werden.

Ist das eine vernünftige Sache oder gibt es signifikante Nachteile bei diesem Ansatz? Ich suche nicht nach Antworten, die die Hardwareseite der Dinge betreffen, sondern eher, wenn die Interaktion zwischen gewöhnlichen Build-Systemen (z. B. MSBuild) und einer Ramdisk irgendwelche Probleme verursacht und wenn es andere Risiken gibt, die ich beachten muss.

+0

Eine einfache Anmerkung: Ich nehme an, Sie sprechen hier über nächtliche Builds? In diesem Fall müssen Sie natürlich das Maximum an Builds von Grund auf neu testen und testen. Wenn es tägliche Builds wären, schlage ich vor, die Buildzeit um maximal 5 Mn zu halten, damit Entwickler ein schnelles Feedback zu möglichen Problemen bekommen können Jedes commit: In diesem Fall ist es meistens nützlich, * incremental * compilation zu machen, dh, mache einfach ein svn (hg/git/etc.) update, und benutze Make (oder Ant, Nant, etc) um zu re -compile was sich geändert hat. Mit einem gut geschriebenen Makefile könnte es auch die Dinge dramatisch beschleunigen. Nur meine 0.02 € :-) –

+0

Ich spreche hier über CI (Build nach jedem Commit). Wir nutzen bereits inkrementelle Builds dafür, aber danke. –

+1

@Christophe Muller, eine generelle Aussage machen, dass ein Build "maximal 5 Mn" sein sollte, ist wirklich lächerlich, ohne die Umgebung, die Größe und die Anforderungen des Builds zu kennen. Wir haben ein Produkt, das auf einem CI-Server läuft und in weniger als zwei Minuten kompiliert und verpackt wird. Wir haben ein anderes Produkt, das mehrere .NET-Lösungen, mehrere native Windows-Dienste, mehrere Adobe Flex-Projekte, Komponententests, Codeabdeckung, Paketierung und automatisierte Bereitstellung in einem Test-Rack umfasst. Der gesamte Prozess (nicht bei jedem Check-in) läuft über zweieinhalb Stunden *. –

Antwort

8

Solange Sie genug Speicher haben, ist es eine sehr vernünftige Sache zu tun.

Der einzige wirkliche Nachteil ist natürlich, dass Ihr Build beim Herunterfahren/Stromausfall verloren geht, was normalerweise kein großes Problem für die CI-Builds ist.

2

Ich habe gerade einige Tests auf meinem "Build-Server" (eigentlich ein Powershell-Skript) durchgeführt, der 3600 Dateien von Subversion auscheckt, kompiliert (DOT.NET) und einige Unit-Tests ausführt.

Auf meiner normalen (nicht superschnellen) Festplatte dauert der Vorgang 35 Sekunden.

Die Verwendung des Dataram RamDisk-Tools mit dem Standard-FAT32-Setup unter Windows 7 dauert 45 Sekunden.

Neuformatierung mit NTFS bringt das auf 30 Sekunden herunter.

Aber die Verwendung einer SSD (in meinem Fall eine OCZ Vertex 2) dauert nur 27 Sekunden.

Ich habe mehrere Testläufe gemacht, aber die Zeiten sind immer gleich.

Was können wir daraus lernen?

Eine Ram-Disk ist nicht immer schneller, stellen Sie sicher, dass Sie verschiedene Produkte mit verschiedenen Einstellungen testen.

Ein Solid State Drive ist vielleicht sogar schneller als eine RAM-Disk, was mich überrascht hat.

+0

Ich habe eine DataRam RAM-Festplatte und eine SSD und die Ran-Festplatte ist deutlich schneller. Etwas wirkt faul, wenn man sieht, dass die Ramdisk mehr Zeit benötigt als die ssd. Außerdem ist dieser Build schon ziemlich schnell und die meiste Zeit ist wahrscheinlich nicht I/O-gebunden. 35 Sekunden sind sehr schnell für einen Checkout/Build. Unser Build ist viel größer - hat über eine Stunde mit Unit Tests begonnen, bevor wir optimiert haben und es auf zehn Minuten gebracht haben. –

+0

Interessant, ich hatte erwartet, dass die RamDisk viel schneller ist als eine HD oder SSD, daher war ich von meinen Ergebnissen enttäuscht. Ich bin immer noch dabei, meinem Build-Prozess weitere Projekte und Tests hinzuzufügen und werde meine Tests später erneut durchführen. Wenn Sie schon genug RAM haben, ist eine RAM-Disk auch billiger und verschleißt die SSD nicht. Danke für deine Eingabe Samuel. –

+5

Das klingt nicht richtig. Kurz vor dem Cache ist nichts schneller als RAM; nicht einmal eine SSD. Haben Sie Ihre RAM-Disk zufällig so groß gemacht, dass nicht genug Speicher übrig war, damit der Build-Prozess seine Arbeit tatsächlich ausführen konnte? Das könnte dazu geführt haben, dass Speicher in das Dateisystem ausgelagert wurde, was offensichtlich einen umgekehrten Effekt hätte. – McKrassy