Was ist der Engpass bei der Übertragung einer großen Anzahl kleiner Dateien?

Was ist der Engpass bei der Übertragung einer großen Anzahl kleiner Dateien?

Beim Erstellen einer Sicherungskopie einer Sammlung von Ordnern mit Quellcode (wobei mir später klar wurde, dass ich bestimmte Ordner mit Bibliotheksdateien wie ausschließen konnte node_modules) bemerkte ich, dass die Dateiübertragungsgeschwindigkeit auf ein Minimum sank (wenige KB/s gegenüber den üblichen 60 MB/s, die das Sicherungslaufwerk zulässt).

Ich würde gerne verstehen, wo der Engpass liegt. Muss eine Berechnung durchgeführt werden, die sich mit dem reinen I/O überschneidet und so das Ganze verlangsamt, oder liegt es daran, dass der Dateisystemindex auf dem Ziellaufwerk eine zentrale Sperre hat, die zwischen den Dateien aktiviert und freigegeben werden muss?

Ich verwende NTFS auf dem Zielsicherungslaufwerk und es ist eine Festplatte.

Antwort1

Das Problem besteht darin, dass auf den Dateisystemkatalog, der angibt, wo sich die Dateien auf der Festplatte befinden, mehrfach zugegriffen werden muss.

Für jede Datei muss die Kopie Folgendes tun:

  • Öffnen Sie die Quelldatei aus dem Quellkatalog
  • Erstellen einer Zieldatei im Zielkatalog
  • Kopieren Sie die Datei
  • Schließen Sie die Quelldatei und markieren Sie den Katalogeintrag als gelesen
  • Schließen Sie die Zieldatei und markieren Sie ihren Katalogeintrag als erstellt.

Dies führt dazu, dass die Köpfe der Quell- und Zielfestplatten bei jedem Kopieren einer Datei mehrmals von den Dateimetadaten im Katalog zur Datei selbst wechseln.

Auf einer SSD würde das nicht viel ausmachen, aber auf einer Festplatte kann es das Kopieren einer großen Anzahl kleiner Dateien sehr verlangsamen. Im Grunde würde die Festplatte hauptsächlich die Köpfe bewegen, was ein viel langsamerer Vorgang ist als Lesen oder Schreiben.

Windows könnte den RAM außerdem nicht effektiv als Cache verwenden, da das Schließen einer Datei dazu führt, dass diese auf die Festplatte geschrieben wird.

verwandte Informationen