Konfigurieren des NTFS-Dateisystems für die Leistung


8

Wir haben eine Anwendung, die plant, etwa 1,1 TB XML-Dateien mit einer durchschnittlichen Größe von 8,5 KB zu speichern.

Dies sind fortlaufende Daten aus 18 Monaten, wobei täglich rund 200.000 neue Dateien erstellt werden.

Jede Datei wird nur einmal geschrieben und hat dann eine 3% ige Chance, in den folgenden 18 Monaten eine kleine Anzahl (<10) Mal gelesen zu werden.

Welche NTFS-Optionen stehen uns zur Verfügung, die die Leistung verbessern?

Aktuelle auf unserer Liste sind:

Bearbeiten

In Bezug auf die Fragmentierung: Wir planen die Verwendung von 2k-Clustergrößen für eine effiziente Nutzung des Speicherplatzes. Jede Datei wird nur einmal geschrieben (dh keine Datei bearbeitet). Dateien werden täglich nach 18 Monaten gelöscht.

Daher glauben wir nicht, dass Fragmentierung ein bedeutendes Problem sein wird.

Antworten:


7

Ich würde auch hinzufügen:

Deaktivieren Sie die Defragmentierung der Festplatte. Ändern Sie die Blockgröße auf 16 KB, damit jede Datei in einen einzelnen Block geschrieben wird.

Rational dafür:

Sie möchten täglich 1,7 GB Daten in 200.000 Dateien schreiben. Unter der Annahme, dass diese Dateien über einen 24-Stunden-Tag geschrieben werden, bedeutet dies ungefähr 3 Dateien pro Sekunde. Dies scheint kein signifikantes Problem für eine einzelne SATA-Festplatte zu sein. Ich vermute also, dass Sie andere Probleme sowie die Leistung der Festplatte haben.

(dh haben Sie genug Speicher? Oder pagen Sie den Speicher auch auf die Festplatte?)

jedoch

  1. Windows NTFS-Dateisysteme versuchen standardmäßig, Dateisysteme im Hintergrund zu defragmentieren. Durch die Defragmentierung der Festplatte wird die Leistung beeinträchtigt, während Sie die Festplatte defragmentieren. Da die Leistung bereits ein Problem zu sein scheint, wird dies die Sache für Sie nur noch schlimmer machen.

  2. Beim Schreiben großer Dateien besteht ein Gleichgewicht zwischen der Verwendung kleiner Clustergrößen und der E / A-Leistung. Dateien und die Dateizuordnungstabelle befinden sich nicht im selben Sektor auf der Festplatte. Wenn Sie also beim Schreiben von Dateien Blöcke zuweisen müssen, muss sich der Festplattenkopf ständig bewegen. Durch die Verwendung einer Clustergröße, mit der 95% Ihrer Dateien in jeweils einem Cluster gespeichert werden können, wird die E / A-Schreibleistung verbessert.

  3. Wie andere bereits betont haben, führt die Verwendung einer winzigen Clustergröße von 2 KB im Laufe der Zeit zu einer Fragmentierung. Stellen Sie sich das so vor: In den ersten 18 Monaten werden Sie Dateien auf eine saubere leere Festplatte schreiben, aber das Betriebssystem weiß nicht, dass nach dem Schließen keine Daten mehr zu jeder Datei hinzugefügt werden. Daher sind einige Blöcke auf der Datei verfügbar Beenden Sie jede Datei, falls diese Datei später erweitert wird. Lange bevor Sie die Festplatte füllen, werden Sie feststellen, dass der einzige freie Speicherplatz in Lücken zwischen anderen Dateien besteht. Nicht nur, dass das Betriebssystem bei der Auswahl einer Lücke für Ihre Datei nicht weiß, ob Sie eine 5-Block- oder eine 2-Block-Datei schreiben, sodass es keine gute Wahl treffen kann, wo Ihre Datei gespeichert werden soll.

Letztendlich geht es beim Engineering darum, mit widersprüchlichen Anforderungen umzugehen und die kostengünstigste Lösung für diese Ausgleichsanforderungen zu wählen. Ich vermute, dass der Kauf einer größeren Festplatte wahrscheinlich billiger ist als der Kauf schnellerer Festplatten.


Wir planten, aus Gründen der Effizienz der Speicherplatznutzung eine Blockgröße von 2 KB zu verwenden
Richard Ev

4
ahh die Freuden des technischen Urteils. Jeder von einer Datei verwendete Block muss aus dem freien Speicherplatz entfernt und einer Datei zugewiesen werden. Durch die Verwendung kleiner Blockgrößen verbessern Sie die Speicherplatzeffizienz und weniger Speicherplatz in teilweise verwendeten Blöcken. Sie verringern jedoch die E / A-Effizienz, wenn Sie die Blockzuweisung erhöhen.
Michael Shaw

2
Wenn Sie sich für eine solche Raumeffizienz entscheiden, fragmentieren Sie außerdem viel. Durch die Verwendung einer größeren Blockgröße wie von ptolemy vorgeschlagen, bei der jede Datei in einen Block passt, sollte die Fragmentierung ein sehr kleines Problem sein.
sysadmin1138

1
Nach meiner Erfahrung sollte die Komprimierung aktiviert sein - insbesondere, wenn Sie keine hohe Leserate erwarten. Wie viele Dateien in einem Verzeichnis? Ich persönlich hatte Probleme mit mehr als ein paar Tausend, wenn ich viel lesen möchte - nur zum Schreiben, es schien nicht viel zu bedeuten
warren


2

Um meinen Kommentar zu Ptolemäus 'Antwort näher zu erläutern ...

Wenn Sie Ihre Blockgröße so einstellen, dass ein sehr großer Teil jeder Datei in einem Block enthalten ist, erzielen Sie E / A-Effizienz. Bei einer Blockgröße von 2 KB und einer durchschnittlichen Dateigröße von 8,5 KB werden 50% Ihrer E / A-Vorgänge 5 Blöcke oder mehr umfassen. Wenn Sie eine Blockgröße von 16 KB festlegen, scheint die sehr große Mehrheit der Schreibvorgänge auf einen einzelnen Block zu erfolgen. Dies würde diese 3% der Lesevorgänge viel effizienter machen, wenn sie auftreten.

Eine zu berücksichtigende Sache ist Backup-E / A. Wenn Sie die Daten sichern, wird jede Datei mindestens einmal gelesen und ihre Verzeichniseinträge werden bei jedem Sicherungsdurchlauf überprüft. Wenn Sie dies sichern möchten, ziehen Sie bitte Sicherungs-E / A in Ihren Entwürfen in Betracht.

Vorsichtsmaßnahmen: Wenn Ihr zugrunde liegendes Speichersystem bereits eine Speichervirtualisierung durchführt (z. B. ein HP EVA-Festplattenarray oder andere Arrays dieser Klasse), ist dies nicht so wichtig. Eine Fragmentierung dieses Typs wird nicht bemerkt, da die Daten auf den tatsächlichen Laufwerken bereits physisch stark fragmentiert vorhanden sind. In diesem Fall ist die 2k-Blockgröße in Ordnung und beeinträchtigt die Leistung nicht so stark. Die Auswahl einer Blockgröße, die groß genug ist, um einen Großteil Ihrer erwarteten Dateigrößen aufzunehmen, führt weiterhin zu Leistungssteigerungen. Die Größe ist jedoch nicht so hoch.


Guter Punkt zur Fragmentierung des Dateisystems, wenn eine Abstraktion von der Speicherhardware vorliegt. Dies gilt auch für virtuelle Festplatten, die sich auf einem Festplattenarray befinden. Möglicherweise befindet sich NTFS über dem Datenspeicher-Dateisystem (z. B. VMFS), das sich wiederum über dem Festplatten-Array befindet.
Damorg

2

Spät für diese Party, könnte aber anderen zugute kommen, also ...

Re. Zunächst und vor allem bei der Clustergröße müssen Sie sich die Verteilung der Dateigrößen ansehen, damit Sie sowohl für eine geringe Fragmentierung als auch für die Verschwendung von Speicherplatz optimieren können, um die Größe von Clustern in der Nähe dieser Größe zu ändern, nicht im Durchschnitt - z. Wenn die meisten Dateien in der Nähe von 2 KB liegen, ist eine Clustergröße von 2 KB optimal. Wenn die Größe in der Nähe von 4 KB liegt, ist ein Cluster von 4 KB optimal, und so weiter. Wenn andere Dateigrößen gleichmäßig / zufällig verteilt sind, können Sie am besten eine durchschnittliche Dateigröße für die Clustergröße wählen oder Dateien in Partitionen mit unterschiedlichen Clustergrößen für unterschiedliche Dateigrößen speichern, wie dies bei einigen größeren Systemen der Fall ist, aber Sie ' Ich brauche dafür Software / Fs-Unterstützung.


1

Möglicherweise möchten Sie auch RAID für Ihr Design untersuchen. Es gibt verschiedene Formen von RAID, aber Sie sollten sich RAID 5 genauer ansehen, damit Sie gleichzeitig Dateien auf verschiedene Laufwerke schreiben können, die Daten sich jedoch immer noch auf einem Volume befinden. Dadurch erhalten Sie mehrere Leistungen:

1) Sie erstellen unterwegs ein Backup. Auf diese Weise können Sie einen Laufwerksabsturz erleiden und sich erholen. RAID 1 würde eine gespiegelte Kopie erstellen, aber 5 beinhaltet Striping - RAID 1 würde Ihnen nur den Vorteil dieses Backups bieten ... obwohl 5 mehr involviert wäre und Sie mehr Laufwerke benötigen würden, um es einzurichten (mindestens 3 im Vergleich zu Die 2 für RAID 1), haben Sie andere Vorteile.

2) Das Striping erhöht auch die Leistung, da Sie mehrere Dateien gleichzeitig schreiben können (geschätzte 3 pro Sekunde, oben ...). Durch das Striping können die Dateien auf den Datenträgern "verteilt" werden, und jeder Datenträger nimmt nur teil von der Last. Je mehr Festplatten beteiligt sind, desto geringer ist die Belastung pro Festplatte, aber es würde einen Punkt geben, an dem Sie eine Grenze zwischen Leistung und Kosten erreichen würden ...

3) Wenn Sie die Daten sichern, kann die Sicherung ohne Beeinträchtigung der Schreibleistung erfolgen - natürlich abhängig von der Größe des Cache der Festplatten und der Form der Sicherung ... aber zum größten Teil würden Sie dies nicht tun Sie müssen nicht herunterfahren, um die Sicherungen aufzurufen.

So wie Sie das System eingerichtet haben, klingt es sogar so, als wären Sicherungen für Sie einfacher - Sie müssen jeweils nur die 24-Stunden-Daten sichern, da die Datei später nicht geändert wird. Sie könnten sogar einen Stapeljob schreiben, der die Daten komprimiert, wenn Sie sich Gedanken über den von den Dateien belegten Speicherplatz machen ... XML besteht hauptsächlich aus Text, sodass die Komprimierungsraten hoch sind und eine Dekomprimierung mit nur 3% selten erforderlich wäre der Dateien ... so können Sie die Komprimierung auf dem Laufwerk einschließen, ohne Angst vor einer Dekomprimierungszeit zu haben. Dies würde auch die erforderlichen Blockgrößen reduzieren und könnte die Effizienz des Systems weiter steigern, wobei die CPU an der Komprimierung der Daten beteiligt ist und nicht nur die Vermittlungsstelle für Daten ist. (IE Wenn Sie nur Daten gespeichert hätten, wäre dies eine Verschwendung dieses netten CPU-Prozessors in diesem System ...

Bei der Komprimierung würden Ihre 2K-Blöcke wahrscheinlich problemlos Ihre 8,5K-Dateien enthalten. Fügen Sie Striping und RAID-Backup zusammen mit einer kräftigen CPU und genügend Speicher hinzu, um keine laufenden Programme zwischenzuspeichern (falls überhaupt ein Cache verwendet wird), und Sie sind auf dem besten Weg zu einem guten System für das, was Sie tun möchten.


4
In Bezug auf # 1 - RAID ist kein Backup. Je. Es bietet Redundanz, die die Verfügbarkeit erhöht.
MDMarra

0

Dies ist ein einfaches Dienstprogramm zum Erhöhen der NTFS-Leistung, indem einige NTFS-Funktionen deaktiviert werden, die derzeit nicht so verwendet werden (oder nicht so wichtig sind).

https://gist.github.com/p3x-robot/185e5c1b699d726bcce1bb51d5ca82d8

rem execute as an Administrator

rem based on http://www.windowsdevcenter.com/pub/a/windows/2005/02/08/NTFS_Hacks.html
ram based on https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc938961(v=technet.10)

rem http://archive.oreilly.com/cs/user/view/cs_msg/95219 (some installers need 8dot3 filenames)
rem disable 8dot3 filenames
ram Warning: Some applications such as incremental backup utilities rely on this update information and do not function correctly without it.
fsutil behavior set disable8dot3 1

rem increase ntfs mtz size
fsutil behavior set mftzone 2

rem disable last access time on all files
fsutil behavior set disablelastaccess 1

echo now you can reboot

Ich habe mit einem npm-System ungefähr 200k einen Build und von 30 Sekunden auf SSD getestet, mit NVME waren es 20 Sekunden und nach dem Einstellen war die Geschwindigkeit auf 15 Sekunden gesunken (unter Linux sind es 3 Sekunden ....)
Patrik Laszlo
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.