Schlechte NTFS-Leistung


21

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?


4
Vielleicht könnte dies umformuliert werden, sodass Sie sich fragen, wie Sie die Leistung von NTFS verbessern können, wenn Sie mit vielen kleinen Dateien arbeiten, anstatt zu fragen, warum NTFS im Vergleich zu ext3 nicht funktioniert.
ChrisInEdmonton

Stimmen Sie mit @Chris überein, diese Frage ist irgendwie sinnlos wie sie ist.
Sasha Chedygov

4
Nun, ich bin wirklich daran interessiert, warum NTFS eine schlechte Leistung erbringt. Wenn die Antwort "mache X, um es schneller zu machen" ist, dann großartig, aber ich würde mich damit zufrieden geben, das Problem zu verstehen.
JesperE

Ah, okay, tut mir leid, dass ich dich missverstanden habe.
Sasha Chedygov

2
Wenn Sie übrigens SVN auf einem Windows-Computer verwendeten, verfügte dieser Computer über einen Virenscanner mit aktiviertem Echtzeitschutz? Das könnte schlimm sein.
Dlamblin

Antworten:


35

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.


2
Sie haben Recht, dass hier kleine Dateien gespeichert sind, aber ich bin mir nicht sicher, warum dies die MFT belasten sollte. Wäre es nicht viel einfacher, diese Dateien zu lesen, da Sie so gut wie garantiert viele dieser Dateien in den Cache ziehen, wenn Sie eine von ihnen ziehen?
ChrisInEdmonton

1
@ChrisInEdmonton Es sind die Aktualisierungen der MFT, die es betonen, da Sie keine Blöcke berühren, in denen benachbarter Speicherplatz verfügbar ist, sondern Dinge verschieben und auch die zwischengespeicherten Teile der MFT ungültig machen. Ich gebe Ihnen zu, dass die MFT auf dem Papier eine sehr schnelle Möglichkeit sein sollte, mit kleinen Dateien umzugehen. In der Praxis ist das einfach nicht sinnvoll.
Dlamblin

6

Nun, Ihr spezielles Problem liegt daran

  1. Subversion selbst stammt aus der UNIX-Welt, die Windows-Version geht daher von ähnlichen Leistungsmerkmalen aus.
  2. Die NTFS-Leistung ist bei Millionen kleiner Dateien nicht besonders gut.

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 .svnVerzeichnis ü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 ...


1
Aber warum ist die NTFS-Leistung schlecht, wenn es um Millionen kleiner Dateien geht? Musste das geopfert werden, um etwas anderes zu bekommen?
JesperE

3

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.