Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Plattformen
Clients – Windows 8 Server – Windows Server 2012
BESCHREIBUNG
TRIM-Hinweise benachrichtigen das Laufwerk, dass bestimmte Sektoren, die zuvor zugewiesen wurden, nicht mehr von der App benötigt werden und gelöscht werden können. Dies wird in der Regel verwendet, wenn eine App große Speicherplatzzuweisungen über eine Datei erstellt und dann die Zuordnungen zur Datei selbst verwaltet (z. B. virtuelle Festplattendateien).
Was ist TRIM?
Solid-State-Laufwerke (SSDs) sind in der Regel flashspeicherbasierte Blocklöschgeräte; Dies bedeutet, dass daten, wenn Daten in die SSD geschrieben werden, nicht überschreiben und an anderer Stelle geschrieben werden müssen, bis der Block gesammelt werden kann. Da die SSD keinen internen Mechanismus zum Bestimmen hat, dass bestimmte Blöcke entfernt werden, und andere sind erforderlich. Das einzige Mal, wenn die SSD einen Sektor "schmutzig" markieren kann, wenn er überschreiben wird. In anderen Fällen, z. B. wenn eine Datei gelöscht wird, behält die SSD diese Sektoren bei, da die Löschung nur als Masterdateitabelle (MFT) ausgeführt wird, und nicht als Vorgang für alle Bereiche der Datei. In Windows 7 haben wir eine standardweise Kommunikation mit SSDs über Sektoren eingeführt, die nicht mehr benötigt werden. Dieser Befehl wird in der T13-Spezifikation als TRIM-Befehl definiert; NTFS sendet den TRIM-Befehl für einige normale Inlinevorgänge wie "deletefile".
Andere Verwendungen von TRIM in der Speicherwelt
Wie SSDs, Speicherbereichsnetzwerke (SANs) und die neuen Windows 8 feature Software Spaces-Implementierungen nutzen TRIM-Befehlshinweise, um ihre Leerzeichen in dünn bereitgestellten Umgebungen zu verwalten. SANs und Software Spaces weisen Speicherbereiche in Größen zu, die größer als Sektoren oder Cluster sind (überall von 1 MB bis 1 GB). Wenn sie TRIM-Hinweise für ihre Zuordnungsgröße (oder größer als die Zuordnungsgröße) erhalten, kann das SAN/SSD einen Bereich dezuweisen, um den Speicherplatz für andere Dateien freizugeben. Sie durchlaufen in der Regel alle TRIM-Hinweise an die zugrunde liegenden Medien (SSD oder HDD), damit sie den freizugebenden Speicherplatz entsprechend nutzen können. Sie verschieben daten in der Regel nicht in die Zuteilung von Regionen, oder verfolgen sie nicht die Zuweisung von TRIM-Bereichen zu zugewiesenen Regionen (wenn die Region leer ist).
Dünn bereitgestellte SANs verwenden die TRIM-Hinweise, die an sie übergeben werden, um den gesamt physischen Speicherbedarf zu verringern, wodurch die Kosten reduziert werden. Die T10 SCSI-Spezifikation definiert den Befehl 'Unmap' (ähnlich wie der TRIM-Befehl); Hier gilt der Befehl für alle Arten von Speicher, einschließlich HDDs, SSDs und andere. Der Befehl "UnMap" hilft, physische Blöcke aus der Zuweisung des SAN zu entfernen.
Verwenden der neuen API
#define FSCTL_FILE_LEVEL_TRIM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 130, METHOD_BUFFERED, FILE_WRITE_DATA)
Where
typedef struct _EXTENT_PAIR {
ULONGLONG Offset;
ULONGLONG Length;
} EXTENT_PAIR, *PEXTENT_PAIR;
typedef struct _FILE_LEVEL_TRIM {
//
// A count of how many Offset:Length pairs are given
//
DWORD PairCount;
//
// All the pairs.
//
EXTENT_PAIR Pairs[1];
} FILE_LEVEL_TRIM, *PFILE_LEVEL_TRIM;
Die Datei TRIM wird über den Puffer übergeben, falls möglich oder asynchron (nicht puffert) an den Befehl "Device IOCTL DSM" (Device IOCTL DSM). Dies wird dem TRIM-Befehl für ATA-Geräte und den Befehl "UnMap" für SCSI-Geräte zugeordnet. Der Datei-TRIM-Code sendet die Regionen ein-nach-eins, wie dies oben angegeben ist.
Die Datei TRIM wartet nicht auf Rückgaben vom Gerät, da die Befehle "TRIM" und "Unmap" als Hinweis auf die zugrunde liegende Speichermedien definiert sind und Rückgabecodes nicht erwartet werden.
End-to-End-Workflow:
Anrufdatei-Kürzung
- File TRIM untersucht Eingaben für Fehler
- Die Datei-TRIM löst die Ausmaße in LCN-Regionen auf.
- Die Datei-TRIM rundet nach oben und unten für falsch ausgerichtete Regionen ab, die in TRIM übergeben werden
- Datei TRIM löscht Einträge im Cache, die sich auf die TRIM-Bereiche beziehen
- File TRIM übergibt IOCTL_DSM (Trim) pro Region
Datei-TRIM gibt zurück oder Fehler
- Fehlerüberprüfung erfolgt bei eingabegültigkeit
- Wenn nur einige der Umfange gültig sind, wird ein Fehler für den vollständigen API-Aufruf zurückgegeben.
Anwendungsfälle
Auf einer SSD bereitgestellte virtuelle Festplatte (VHD) des Verbrauchers:
Die VHD wird zunächst auf nicht verwendeten Medien "sauber" bereitgestellt. Da die VHD verwendet wird, verwendet der VHD Teile der Speichermedien für Dateien usw. Wenn Dateien in den Speichermedien gelöscht werden, werden diese Dateien nicht aus der SSD entfernt, da die vollständige VHD als eine Datei auf der SSD gespeichert wird. Die Hyper-V-Umgebung ruft File TRIM für alle Regionen auf, die gelöscht werden, wenn die Datei in der VHD-Umgebung auftritt. Die File_TRIMs werden in die SSD übersetzt, sodass die SSD-Leistung optimiert werden kann.
Consumer VHD, der auf einem dünn bereitgestellten SAN installiert ist:
Die VHD wird zunächst auf einem Mindestlaber einer dünn bereitgestellten Umgebung montiert. Da Dateien im VHD gespeichert werden, wächst der Speicherbedarf der VHD in mehreren Platten. Wenn Dateien in der VHD entfernt werden, ruft hyper-V File_TRIM dem zugrunde liegenden dünn bereitgestellten SAN auf. Wenn die TRIMs größer als die SLAB-Granularität sind, kann das SAN jetzt ein SLAB entfernen und somit den Platzbedarf der VHD auf diesem SAN reduzieren.
Wenn die VHD auf einem Windows 8 basierten Server ansässig ist, sendet der Speicheroptimierer auch TRIMs, um den Platzbedarf der VHD von innerhalb der bereitgestellten VHD zu verringern.
Tests
In früheren Betriebssystemversionen gibt es keine vergleichbaren APIs. Es sollte keine Leistungswirkung von der tatsächlichen API selbst geben, obwohl die Speichermedien (falls ordnungsgemäß implementiert) eine bessere Schreibleistung anzeigen können. Die API sollte sehr sorgfältig verwendet werden; Nur Ausschläge, die nicht mehr benötigt werden, sollten übergeben werden, da diese Ausmaße dauerhaft aus dem Speichermedium entfernt werden.