Falsche NTFS-Leistung

8045
JesperE

Warum ist die NTFS-Leistung im Vergleich zu Linux / ext3 so schlecht? Meistens sehe ich dies, wenn Sie (große) Quellbäume von Subversion auschecken. Das Auschecken dauert unter NTFS etwa 10-15 Minuten, während das Auschecken unter Linux (bei nahezu identischer Hardware) um eine Größenordnung schneller dauert (1 - 1,5 Minuten).

Vielleicht ist dies spezifisch für den Umgang mit vielen kleinen Dateien, und NTFS ist bei großen Dateien besser, aber warum sollte das so sein? Wäre die Verbesserung der NTFS-Leistung für kleine Dateien für die Windows-Leistung im Allgemeinen nicht von großem Nutzen?

BEARBEITEN: Dies ist nicht als "NTFS saugt im Vergleich zu ext3" zu verstehen. Ich bin wirklich daran interessiert, warum NTFS in bestimmten Fällen schlecht funktioniert. Ist es nur schlechtes Design (was ich bezweifle) oder gibt es andere Probleme, die ins Spiel kommen?

20
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 saugt. ChrisInEdmonton vor 14 Jahren 4
Stimmen Sie @Chris zu, diese Frage ist irgendwie sinnlos wie sie ist. Sasha Chedygov vor 14 Jahren 0
Nun, ich bin wirklich daran interessiert, warum NTFS schlecht funktioniert. Wenn die Antwort lautet "X machen, um es schneller zu machen", dann großartig, aber ich würde mich damit zufriedengeben, das Problem zu verstehen. JesperE vor 14 Jahren 3
Ah, okay, entschuldige, dass ich dich falsch verstanden habe. Sasha Chedygov vor 14 Jahren 0
Übrigens, wenn Sie SVN auf einem Windows-Computer verwendet haben, hatte dieser Computer einen Virenscanner mit aktiviertem Echtzeitschutz? Das könnte schlecht sein. dlamblin vor 14 Jahren 2
Ich habe in beide Richtungen ein Benchmarking durchgeführt, und obwohl der Virenscanner messbare Auswirkungen hatte, erklärte er die schlechte Leistung von NTFS nicht. JesperE vor 14 Jahren 0
In manchen Fällen ist exFAT vielleicht besser, da es nicht viele sperrige Funktionen von NTFS wie Berechtigungen, Komprimierung usw. enthält. phuclv vor 10 Jahren 0

3 Antworten auf die Frage

34
dlamblin

NTFS hat diese Sache, die als Master File Table bezeichnet wird . Es klingt wirklich cool, wenn Sie darüber lesen.

Sie sehen, dass ext3 bis zu 95% der Festplattennutzung gut macht, während das Vorhandensein der MFT bedeutet, dass NTFS nicht wirklich will, dass Sie mehr als 90% Ihrer Festplatte verwenden. Ich gehe jedoch davon aus, dass dies nicht Ihr Problem ist, und dass Ihr Problem mit den vielen Operationen an vielen kleinen Dateien zusammenhängt.

Einer der Unterschiede hier ist, was passiert, wenn Sie eine kleine Datei erstellen. Wenn eine Datei kleiner als eine Blockgröße 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 beim Erstellen war. In der Praxis bedeutet dies jedoch, dass wenn svn eine Datei berührt, um sie zu erstellen, diese dann hinzufügt, aus ihr entfernt oder nur geändert wird, indem sie nicht genug ist, um sie in ihren eigenen Block zu verschieben, der Vorgang ziemlich langsam ist. Auch das Lesen vieler kleiner Dateien belastet die MFT, an der sich alle befinden, mit Mehrfachen pro Block. Warum sollte es das tun? Es vermeidet präventiv die Fragmentierung und verwendet effektiv mehr Blöcke, und das ist im Allgemeinen eine gute Sache.

In ext2 und 3 dagegen werden Dateiblöcke für jede Datei neben dem Verzeichnis gespeichert, in dem sich die Verzeichnismetadaten für das Verzeichnis befinden, in dem sie sich befinden (wenn möglich, wenn Ihre Festplatte nicht fragmentiert ist und Sie etwa 20% freien Speicherplatz haben). Dies bedeutet, dass, während svn Verzeichnisse öffnet, eine Reihe von Blöcken grundsätzlich kostenlos in diesem 16-MB-Cache auf Ihrem Laufwerk und anschließend im Cache des Kernels zwischengespeichert werden. Diese Dateien können die .svn-Datei und die Revisionsdateien für Ihre letzte Aktualisierung enthalten. Das ist praktisch, da diese Dateien wahrscheinlich von svn als nächstes angesehen werden. NTFS kann dies nicht tun, obwohl große Teile der MFT im System zwischengespeichert werden sollten. Möglicherweise sind dies nicht die Teile, die Sie als nächstes benötigen.

Sie haben zwar Recht, dass hier kleine Dateien leben, aber ich bin mir nicht sicher, warum dies die MFT belasten sollte. Wäre es nicht viel einfacher, diese Dateien zu lesen, da Sie garantiert sicher sind, dass viele dieser Dateien in den Cache gezogen werden, wenn Sie eine davon ziehen? ChrisInEdmonton vor 14 Jahren 2
@ChrisInEdmonton Es sind die Aktualisierungen der MFT, die dies betonen. Wenn Sie keine Blöcke berühren, in denen benachbarte Speicherplätze verfügbar sind, verschieben Sie die Dinge und verschieben die zwischengespeicherten Teile der MFT. Ich gebe Ihnen zu, dass die MFT auf Papier eine sehr schnelle Art sein sollte, kleine Dateien zu bearbeiten. In der Praxis hält es einfach nicht aus. dlamblin vor 14 Jahren 1
6
Joey

Nun, dein spezielles Problem ist da

  1. Subversion selbst stammt aus der UNIX-Welt, die Windows-Version geht daher von ähnlichen Leistungsmerkmalen aus.
  2. Die NTFS-Leistung ist mit Millionen von kleinen Dateien wirklich 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 bricht normalerweise stark zusammen, wenn er auf andere Systeme übertragen wird. Andere Beispiele wären Gabelung vs. Threading. Bei UNIX-Likes ist die traditionelle Parallelisierung etwas, nur um einen anderen Prozess hervorzubringen. Unter Windows, wo Prozesse mindestens fünfmal länger dauern, ist dies eine wirklich schlechte Idee.

Im Allgemeinen können Sie nicht einfach Artefakte eines bestimmten Betriebssystems für ein anderes Betriebssystem mit sehr unterschiedlicher Architektur verwenden. Vergessen Sie auch nicht, dass NTFS viele Dateisystemfunktionen enthält, die in den zu diesem Zeitpunkt häufig verwendeten UNIX-Dateisystemen nicht vorhanden waren, z. B. Journaling und ACLs. Diese Dinge haben einen Preis.


Eines Tages, wenn ich viel Freizeit habe, plante ich, ein SVN-Dateisystemmodul zu schreiben, das die auf NTFS verfügbaren Funktionen nutzt, z. B. Transaktionsunterstützung (sollte das Problem "Millionen von kleinen Dateien berühren") und alternative Daten vermeiden Streams (sollte das separate .svnVerzeichnis nicht mehr benötigen ). Es wäre eine schöne Sache zu haben, aber ich bezweifle, dass die SVN-Entwickler in absehbarer Zeit solche Dinge umsetzen werden.

Randbemerkung: Für ein einzelnes Update eines großen SVN-Repositorys, das ich verwende, waren etwa 250.000 Dateivorgänge erforderlich. Eine winzige Stimme sagt mir, dass dies wirklich für 24 Dateien ist, die sich geändert haben ...

Aber warum ist die Leistung von NTFS schlecht, wenn es um die Unmenge kleiner Dateien geht? Mußte das geopfert werden, um etwas anderes zu bekommen? JesperE vor 14 Jahren 1
3
Kenneth Cochran

Hier finden Sie die Informationen von Microsoft zur Funktionsweise von NTFS. Es ist möglicherweise übertrieben für das, wonach Sie suchen, aber wenn Sie es studieren, können Sie ein wenig Licht in den Szenarien werfen, mit denen NTFS Probleme hat.