
Wir haben eine Anwendung geschrieben, die kleine Schreibvorgänge (22 kB) in mehrere Dateien gleichzeitig ausführt (ein Thread führt im Auftrag anderer Threads asynchrone Schreibvorgänge in die Warteschlange an mehreren Standorten aus) und zwar auf demselben lokalen Datenträger (RAID1).
99,9 % der Schreibvorgänge haben eine geringe Latenz, aber gelegentlich (vielleicht alle ein bis zwei Minuten) kommt es ohne wirkliche Erklärung zu ein oder zwei Schreibvorgängen mit enormer Latenz (ich habe 10 Sekunden und mehr gesehen).
Plattform: Win2003 Server mit NTFS.
Überwachung: Sysinternals Process Monitor (siehe Link unten) und unsere eigene Anwendungsprotokollierung.
Wir haben zur Lösung des Problems verschiedene Dinge ausprobiert, die wir von einigen Websites zusammengetragen haben, z. B.:
Den ersten Teil von Dateinamen eindeutig machen, um die Namensgenerierung nach 8.3 zu erleichtern
Schreiben von Dateien in mehrere Verzeichnisse
Ändern des Intel Disk Write Caching
Windows-Datei-/Druckerfreigabe
Minimieren Sie den verwendeten Speicher
Gleichgewicht
Maximieren Sie den Datendurchsatz für die Dateifreigabe
Maximieren Sie den Datendurchsatz für Netzwerkanwendungen
System->Erweitert->Leistung->Erweitert
NtfsDisableLastAccessUpdate – fsutil-Verhalten verwenden, Disablelastaccess 1 festlegen
Deaktivieren Sie die 8.3-Namensgenerierung - verwenden Sie „fsutil behavior set disable8dot3 1“ + Neustart
Aktivieren Sie einen großen Dateisystem-Cache
Paging des Kernelcodes deaktivieren
IO-Seitensperrgrenze
Deaktivieren (oder Aktivieren) des Indexierungsdiensts
Aber nichts scheint einen großen Unterschied zu machen. Es gibt eine ganze Reihe von Dingen, die wir noch nicht ausprobiert haben, aber wir fragten uns, ob jemand auf dasselbe Problem gestoßen ist, einen Grund und eine Lösung (programmgesteuert oder nicht)?
Wir können das Problem mit IOMeter und einem einfachen Setup reproduzieren:
Starten Sie IOMeter und entfernen Sie mit der Schaltfläche „Trennen“ alle Worker-Threads außer dem ersten in „Topologie“.
Wählen Sie den Worker-Thread aus und setzen Sie auf der Registerkarte „Disk Targets“ ein Kreuz in das Kästchen neben der Festplatte, die Sie verwenden möchten, und geben Sie bei „Maximale Festplattengröße“ „2000000“ ein (HINWEIS: Es muss mindestens 1 GB freier Speicherplatz vorhanden sein; die Sektorgröße beträgt 512 Byte).
Erstellen Sie als Nächstes eine neue Zugriffsspezifikation und fügen Sie sie dem Worker-Thread hinzu:
Größe der Übertragungsanforderung = 22 kB
100 % sequentiell
Prozent der Zugriffsspezifikation = 100 %
Prozent Lesen/Schreiben = 100 % Schreiben
Ändern Sie die Aktualisierungsfrequenz der Ergebnisanzeige auf 5 Sekunden, die Laufzeit des Test-Setups auf 20 Sekunden und beide Einstellungen für „Anzahl der automatisch zu erzeugenden Worker“ auf Null.
Wählen Sie den Worker-Thread im Topologie-Bedienfeld aus und klicken Sie 59-mal auf die Schaltfläche „Worker duplizieren“, um 60 Threads mit identischen Einstellungen zu erstellen.
Klicken Sie auf die Schaltfläche „Los“ (grüne Flagge) und überwachen Sie die Registerkarte „Ergebnisse“. Die „Maximale I/O-Antwortzeit (ms)“ erreicht auf unserem Computer immer mindestens 3500. Unser Computer ist nicht gerade langsam (Xeon 8-Core-Rack-Server mit 4 GB und integriertem RAID).
Mich würde interessieren, was andere Leute bekommen. Wir haben das Gefühl, dass es etwas mit dem NTFS-Dateisystem zu tun haben könnte (unseres ist derzeit zu 75 % mit fragmentierten Dateien gefüllt) und wir werden ein paar Dinge rund um dieses Prinzip ausprobieren. Aber es hängt auch mit der Festplattenleistung zusammen, da wir es auf einer RAMDisk nicht sehen und es auf einem RAID10-Array nicht so schwerwiegend ist.
Für jede Hilfe bin ich sehr dankbar.
Richard
Klicken Sie mit der rechten Maustaste und wählen Sie „Link in neuem Tab öffnen“:
ProcMon-Ergebnis
Antwort1
Ich habe jetzt mehr Informationen zu diesem Thema.
Nachdem ich den beschriebenen IOMeter-Test auf 12 verschiedenen Maschinen mit unterschiedlicher Hardware durchgeführt habe, konnte ich ihn auf einen bestimmten RAID-Chipsatz eingrenzen (3 verschiedene Maschinen mit demselben Chipsatz zeigen dieses Verhalten bei RAID1 und RAID10). Alle anderen Maschinen haben ein um mindestens eine Größenordnung besseres Ergebnis.
Chipsatz: Intel 631xESB/632xESB SATA RAID (auch bekannt als ESB2)
Weitere Informationen und hoffentlich eine Antwort von Intel finden Sie in diesem Beitrag auf der Intel-Site:
Intel 631xESB/632xESB SATA RAID (auch bekannt als ESB2) schreibt langsam
Richard