Ich schaue mir dieses Setup an:
- Windows Server 2012
- 1 TB NTFS-Laufwerk, 4 KB-Cluster, ~ 90% voll
- ~ 10 Millionen Dateien in 10.000 Ordnern gespeichert = ~ 1.000 Dateien / Ordner
- Dateien meist recht klein <50 KB
- Virtuelles Laufwerk auf Festplattenarray gehostet
Wenn eine Anwendung auf Dateien zugreift, die in zufälligen Ordnern gespeichert sind, dauert das Lesen jeder Datei 60 bis 100 ms. Bei einem Testwerkzeug scheint die Verzögerung beim Öffnen der Datei aufzutreten. Das Lesen der Daten dauert dann nur einen Bruchteil der Zeit.
Zusammenfassend bedeutet dies, dass das Lesen von 50 Dateien leicht 3-4 Sekunden dauern kann, was viel mehr als erwartet ist. Das Schreiben erfolgt im Batch, sodass die Leistung hier kein Problem darstellt.
Ich habe bereits die Ratschläge zu SO und SF befolgt, um zu diesen Zahlen zu gelangen.
- Verwenden von Ordnern zum Reduzieren der Anzahl von Dateien pro Ordner ( Speichern einer Million Bilder im Dateisystem )
- Führen Sie
contig
zu defragmentieren Ordner und Dateien ( /programming//a/291292/1059776 ) - 8.3 Namen und letzte Zugriffszeit deaktiviert ( Konfigurieren des NTFS-Dateisystems für die Leistung )
Was tun mit den Lesezeiten?
- Betrachten Sie 60-100 ms pro Datei als in Ordnung (nicht wahr, oder?)
- Irgendwelche Ideen, wie das Setup verbessert werden kann?
- Gibt es Überwachungstools auf niedriger Ebene, die genau erkennen können, wofür die Zeit aufgewendet wird?
AKTUALISIEREN
Wie in den Kommentaren erwähnt, führt das System Symantec Endpoint Protection aus. Durch Deaktivieren werden jedoch die Lesezeiten nicht geändert.
PerfMon misst 10-20 ms pro Lesevorgang. Dies würde bedeuten, dass jeder Dateilesevorgang ~ 6 E / A-Lesevorgänge erfordert, oder? Wäre dies MFT-Lookup und ACL-Prüfungen?
Die MFT hat eine Größe von ~ 8,5 GB, was mehr als der Hauptspeicher ist.
quelle
Antworten:
Der Server hatte nicht genügend Speicher. Anstatt NTFS-Metadateidaten im Speicher zwischenzuspeichern, erforderte jeder Dateizugriff mehrere Festplattenlesevorgänge. Wie üblich ist das Problem offensichtlich, sobald Sie es sehen. Lassen Sie mich mitteilen, was meine Perspektive getrübt hat:
Der Server zeigte 2 GB verfügbaren Speicher sowohl im Task-Manager als auch in RamMap an. Daher entschied Windows, dass der verfügbare Speicher nicht ausreichte, um einen aussagekräftigen Teil der Metadateidaten aufzunehmen. Oder eine interne Einschränkung erlaubt es nicht, das letzte Speicherbit für Metadateidaten zu verwenden.
Nach dem Upgrade zeigt der RAM Task Manager nicht mehr Speicher an. RamMap meldete jedoch, dass mehrere GB Metadateidaten als Standby-Daten gespeichert sind. Anscheinend können die Standby-Daten erhebliche Auswirkungen haben.
Für die Analyse verwendete Tools:
fsutil fsinfo ntfsinfo driveletter:
um die NTFS-MFT-Größe (oder NTFSInfo ) anzuzeigenquelle