Nach meinen Beobachtungen als Java-Entwickler auf Windows-Workstations ist NTFS im Vergleich zu Linux-Dateisystemen langsam. Die Frage ist, gibt es irgendetwas im NTFS-Treiber, das manuell optimiert werden kann, z. B. mehr Arbeitsspeicher für den Cache? Einige experimentelle Algorithmen aktivieren? Wenn das nicht verfügbar ist, gibt es vielleicht ein anderes Dateisystem, das unter Windows verwendet werden kann, vielleicht sogar kommerziell, das schneller als NTFS ist?
Um es klar auszudrücken, ich versuche nicht, die Kompilierungsgeschwindigkeit für Maven-Projekte zu verbessern, sondern möchte eine allgemeine Verbesserung für das Betriebssystem erzielen. Ich habe das Gefühl, dass NTFS im Vergleich zu Linux-Dateisystemen längst veraltet und langsam ist. Es kommt mir komisch vor, dass das beliebteste Betriebssystem der Welt nur ein Dateisystem hat, das noch manuell defragmentiert werden muss. Vielleicht gibt es eine Alternative?
Update: Hier ist, was nach meinen Beobachtungen langsam ist. Ich baue / verpacke ein Projekt, was viele Lese- / Schreibvorgänge auf der Festplatte bedeutet. Das Build-System ist plattformübergreifend (Java, Maven), sodass ich beispielsweise beim Booten in Ubuntu genau dieselben Aktionen ausführen kann.
Unter Linux sind meine Builds mindestens 1/3 schneller. Daher die Frage nach dem Dateisystem. Es tut mir leid, wenn es verlegt ist.
Antworten:
Während ich gerne etwas wie ZFS für Windows-Hosts sehen würde, ist NTFS kein schreckliches Dateisystem. Es unterstützt die meisten "modernen" Dateisystemfunktionen (erweiterte Attribute, Journaling, ACLs, wie Sie es nennen), wird jedoch vom Explorer und den meisten anderen Apps behindert, die keine dieser Funktionen unterstützen.
Eine Sache, die seine Leistung absolut beeinträchtigt, ist, dass "zu viele" Einträge in einem Verzeichnis vorhanden sind. Übergeben Sie ein paar tausend Einträge in einem Verzeichnis, wird alles langsamer. In diesem Fall wartet der gesamte Computer nicht mehr darauf, dass NTFS Einträge erstellt oder entfernt.
Ich habe mit einer App gearbeitet, die HTML-basierte Dokumente für .NET-Assemblys generiert hat. Es wird eine Datei pro Eigenschaft, Methode, Klasse, Namespace usw. erstellt. Bei größeren Assemblys werden 20 + k-Dateien angezeigt, die alle in einem einzigen Verzeichnis gespeichert werden. Der Computer verbrachte einige Stunden, während der Build für NTFS blockiert wurde.
Theoretisch unterstützt Windows Dateisystem-Plugins, die natives ZFS, ext3 oder was auch immer (sogar FUSE) ermöglichen würden. In der Praxis sind die APIs nicht dokumentiert, sodass Sie völlig auf sich allein gestellt sind.
Könnten Sie jetzt, da Sie Java-Entwicklung durchführen, ein anderes Betriebssystem auf Ihrem Computer installieren oder eine VM über Windows verwenden?
Vielleicht möchten Sie auch einige plattformunabhängige Benchmarks für Dateisysteme ausprobieren (iozone, bonnie ... es gibt wahrscheinlich modernere, die ich nicht so recht kenne, vielleicht sogar einige, die in Java geschrieben sind), um festzustellen, ob dies der Fall ist Eigentlich das Dateisystem, das Sie zurückhält oder wenn es etwas anderes ist. Vorzeitige Optimierung und all das ...
quelle
Ich vermute, dass die wirkliche Lösung darin besteht, Ihr Build-System so umzuschreiben, dass es die native Windows-Dateisystem-API anstelle der Unix-API (fopen usw.) selbst unter dem Portabilitätsframework verwendet. Aber das wird nicht passieren, so dass Sie im Grunde genommen an dem Leistungsniveau festhalten, das sie für akzeptabel hielten.
Wenn Sie Systeme verwenden, die ursprünglich nicht für Windows geschrieben wurden, stellen Sie häufig fest, dass die Verzeichnisüberquerung sehr schlecht gehandhabt wurde. Stellen Sie daher sicher, dass Sie einen sehr flachen Verzeichnisbaum haben.
quelle
Es gibt ein Dateisystem, das von neuem Windows-Betriebssystem unterstützt wird UND schneller als NTFS ist. Es ist exFAT. Es besteht die Möglichkeit, es für das Systemlaufwerk zu verwenden. Aber es ist unbekannt, welche Komplikationen es haben könnte.
Sie können es jedoch auch für andere Partitionen verwenden. Es ist schneller mit zufälligen Lese- / Schreibvorgängen. Perfekt zum Beispiel für eine SSD.
quelle
opendir()
(oder einem gleichwertigen) Anruf passiert .Haben Sie ein Antivirenprogramm, das bei der Zugriffs- / Schreibprüfung für Ihren Projektordner ausgeführt wird?
Beim Kompilieren werden viele kleine Dateien schnell hintereinander gelesen und geschrieben, was den Virenscanner überfordern kann. Fügen Sie Ihren Projektordner zur Liste der ausgeschlossenen Ordner hinzu und prüfen Sie, ob sich die Situation dadurch verbessert.
Unter Linux haben Sie (wahrscheinlich) keine Antivirensoftware ...
quelle