Warum ist die NTFS-Leistung im Vergleich zu beispielsweise Linux / ext3 so schlecht? Am häufigsten sehe ich das, wenn ich (große) Quellbäume von Subversion auschecke. Das Auschecken unter NTFS dauert etwa 10 bis 15 Minuten, während das entsprechende Auschecken unter Linux (auf nahezu identischer Hardware) eine Größenordnung schneller dauert (1 bis 1,5 Minuten).
Vielleicht ist dies spezifisch für den Umgang mit vielen kleinen Dateien und NTFS ist besser, wenn es um große Dateien geht, aber warum sollte das so sein? Wäre eine Verbesserung der NTFS-Leistung für kleine Dateien für die Windows-Leistung im Allgemeinen nicht von großem Vorteil?
EDIT: Dies ist nicht als "NTFS saugt im Vergleich zu ext3" entzündliche Frage gemeint; Ich bin wirklich daran interessiert, warum NTFS in bestimmten Fällen schlecht abschneidet. Ist es nur schlechtes Design (was ich bezweifle) oder gibt es andere Probleme, die ins Spiel kommen?
quelle
Antworten:
NTFS hat dieses Ding eine Master File Table genannt . Es klingt wirklich cool, wenn Sie darüber lesen.
Sie können sehen, dass ext3 bis zu 95% der Festplatte auslastet, während das Vorhandensein der MFT bedeutet, dass NTFS nicht wirklich möchte, dass Sie mehr als 90% Ihrer Festplatte auslasten. Aber ich gehe davon aus, dass dies nicht Ihr Problem ist und dass es sich um die vielen Vorgänge bei vielen kleinen Dateien handelt.
Einer der Unterschiede ist, was passiert, wenn Sie eine kleine Datei erstellen. Wenn eine Datei kleiner als ein Block ist, wird sie nicht in ihren eigenen Block geschrieben, sondern in der MFT gespeichert. Das ist schön, wenn die Datei genau so bleibt, wie sie erstellt wurde. In der Praxis bedeutet dies jedoch, dass der Vorgang ziemlich langsam ist, wenn svn eine Datei berührt, um sie zu erstellen, dann zu dieser Datei hinzufügt, daraus entfernt oder sie nur so weit ändert, dass sie nicht in den eigenen Block verschoben werden kann. Auch das einfache Lesen vieler kleiner Dateien stellt eine Belastung für die MFT dar, in der sich alle Dateien befinden, mit einem Vielfachen pro Block. Warum sollte es das tun? Es wird präventiv die Fragmentierung vermieden und mehr der Blöcke effektiver verwendet, und im Allgemeinen ist das eine gute Sache.
Im Gegensatz dazu werden in ext2 und 3 die Dateiblöcke für jede Datei an der Stelle gespeichert, an der sich die Verzeichnismetadaten für das Verzeichnis befinden, in dem sie sich befinden (wenn möglich, wenn Ihre Festplatte nicht fragmentiert ist und Sie ungefähr 20% freien Speicherplatz haben). Das bedeutet, dass beim Öffnen von Verzeichnissen durch svn eine Reihe von Blöcken im 16-MB-Cache auf Ihrem Laufwerk und dann wieder im Kernel-Cache kostenlos zwischengespeichert werden. Diese Dateien enthalten möglicherweise die SVN-Datei und die Revisionsdateien für Ihr letztes Update. Dies ist praktisch, da dies wahrscheinlich einige der Dateien sind, die svn als nächstes betrachtet. NTFS schafft das nicht, obwohl große Teile der MFT im System zwischengespeichert werden sollten, sind sie möglicherweise nicht die Teile, die Sie als Nächstes benötigen.
quelle
Nun, Ihr spezielles Problem liegt daran
Was Sie sehen, ist einfach ein Artefakt von etwas, das für ein bestimmtes Betriebssystem mit Leistungsannahmen für dieses Betriebssystem entwickelt wurde. Dies funktioniert normalerweise schlecht, wenn es auf andere Systeme übertragen wird. Andere Beispiele wären Gabeln oder Einfädeln. Unter UNIX besteht die traditionelle Art, etwas zu parallisieren, darin, einen anderen Prozess zu erzeugen. Unter Windows, wo das Starten von Prozessen mindestens fünfmal länger dauert, ist dies eine wirklich schlechte Idee.
Im Allgemeinen können Sie keine Artefakte eines bestimmten Betriebssystems für ein anderes mit einer völlig anderen Architektur festlegen. Vergessen Sie auch nicht, dass in NTFS viele Dateisystemfunktionen fehlen, die zu diesem Zeitpunkt in UNIX-Dateisystemen weit verbreitet waren, z. B. Journaling und ACLs. Diese Dinge haben ihren Preis.
An einem Tag, an dem ich viel Freizeit habe, plante ich, ein SVN-Dateisystemmodul zu schreiben, das die Funktionen von NTFS nutzt, z Streams (sollte das separate
.svn
Verzeichnis überflüssig machen). Es wäre eine schöne Sache, aber ich bezweifle, dass die SVN-Entwickler in absehbarer Zukunft solche Dinge umsetzen werden.Randnotiz: Ein einzelnes Update in einem großen SVN-Repository, das ich verwende, hat ungefähr 250.000 Dateivorgänge gekostet. Eine kleine Stimme sagt mir, dass dies wirklich viel für 24 Dateien ist, die sich geändert haben ...
quelle
Hier finden Sie Informationen zu NTFS von Microsoft . Es mag übertrieben für das sein, wonach Sie suchen, aber wenn Sie es studieren, können Sie sich ein Bild davon machen, mit welchen Szenarien NTFS Probleme hat.
quelle