Freigeben über


Mit der neuen API können Apps "TRIM and Unmap"-Hinweise an Speichermedien senden.

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 für die Datei selbst verwaltet (z. B. virtuelle Festplattendateien).

Was ist TRIM?

Festkörperlaufwerke (Solid State Drives, SSDs) sind in der Regel speicherbasierte blocklöschende Gerä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 benötigt werden. Die einzige Zeit, die die SSD als "schmutzig" kennzeichnen kann, ist, wenn sie überschreiben. In anderen Fällen, z. B. wenn eine Datei gelöscht wird, behält die SSD diese Sektoren bei, da das Löschen nur als Masterdateitabelle (MFT) und nicht als Vorgang für alle Bereiche der Datei ausgeführt wird. In Windows 7 haben wir eine Standardmethode für die Kommunikation mit SSDs zu 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, z. B. "Deletefile".

Andere Verwendungen von TRIM in der Speicherwelt

Wie SSDs nutzen Speicherbereichsnetzwerke (SANs) und die neuen Windows 8-Feature-Software spaces-Implementierungen TRIM-Befehlshinweise, um ihre Räume in dünn bereitgestellten Umgebungen zu verwalten. SANs und Software Spaces weisen Speicherregionen in Größen zu, die größer als Sektoren oder Cluster sind (von 1 MB bis 1 GB). Wenn sie TRIM-Hinweise für ihre Zuordnungsgröße erhalten (oder größer als die Zuordnungsgröße), kann san/SSD eine Region aufheben, 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 freigegebenen Speicherplatz entsprechend verbrauchen können. Sie verschieben daten in der Regel nicht in Regionen dezuweisungen oder verfolgen TRIM-Bereiche nicht in entteilte 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 reduzieren, wodurch die Kosten reduziert werden. Die T10 SCSI-Spezifikation definiert den Befehl "Zuordnung aufheben" (ähnlich dem BEFEHL TRIM); Hier gilt der Befehl für alle Arten von Speicher, einschließlich HDDs, SSDs und anderen. Der Befehl "UnMap" hilft dabei, physische Blöcke aus der Zuordnung 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;

File TRIM wird nach Möglichkeit oder asynchron (nicht gepuffert) über den Puffer an den Device IOCTL DSM-Befehl TRIM übergeben. Dies ist dem BEFEHL TRIM für ATA-Geräte und unMap-Befehle für SCSI-Geräte zugeordnet. Der Datei TRIM-Code sendet die Regionen nacheinander, wie in den oben angegebenen Bereichen angegeben.

Datei TRIM wartet nicht auf Rückgaben vom Gerät, da die BEFEHLE TRIM und Unmap als Hinweise auf die zugrunde liegenden Speichermedien definiert sind und Rückgabecodes nicht erwartet werden.

End-to-End-Workflow:

  1. Kürzen der Anrufdatei
    1. Datei TRIM untersucht Eingaben auf Fehler
    2. Datei TRIM bricht die Ausmaße in LCN-Regionen auf.
    3. Datei TRIM rundet nach oben und unten für falsch ausgerichtete Bereiche auf, die an TRIM übergeben werden
    4. Datei TRIM löscht Einträge im Cache, die sich auf die TRIM-Bereiche beziehen
    5. Datei TRIM übergibt IOCTL_DSM (Trim) pro Region
  2. Datei TRIM gibt oder Fehler zurück.
    1. Fehlerüberprüfung bei Eingabegültigkeit
    2. Wenn nur einige der Bereiche gültig sind, wird ein Fehler für den vollständigen API-Aufruf zurückgegeben.

Anwendungsfälle

virtuelle Festplatte (VHD) von Consumer, die auf einer SSD bereitgestellt ist:

Die VHD wird zunächst auf nicht verwendeten Medien "sauber" bereitgestellt. Da die VHD verwendet wird, verbraucht die VHD Teile des Speichermediums für Dateien usw. Wenn Dateien im Speichermedium 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 Löschdatei in der VHD-Umgebung auftritt. Die File_TRIMs werden in die SSD übersetzt, sodass die SSD-Leistung optimiert werden kann.

Consumer-VHD auf einem dünn bereitgestellten SAN montiert:

Die VHD wird zunächst auf einer Mindestplatte einer dünn bereitgestellten Umgebung montiert. Da Dateien in der VHD gespeichert werden, wächst der Speicherbedarf der VHD in Vielfachen von Platten. Wenn Dateien in der VHD entfernt werden, ruft die Hyper-V File_TRIM an das zugrunde liegende dünn bereitgestellte SAN auf. Wenn die TRIMs größer als die SLAB-Granularität sind, kann das SAN nun ein SLAB entfernen und somit den Platzbedarf der VHD auf diesem SAN reduzieren.

Wenn die VHD auf einem Windows 8-basierten Server vorhanden ist, sendet der Speicheroptimierer auch TRIMs, um den Plattenbedarf der VHD von innerhalb der bereitgestellten VHD zu reduzieren.

Tests

In früheren Betriebssystemversionen gibt es keine vergleichbaren APIs. Es sollte keine Auswirkungen auf die Leistung der tatsächlichen API selbst geben, obwohl das Speichermedium (sofern ordnungsgemäß implementiert) eine bessere Schreibleistung aufweisen kann. Die API sollte sehr sorgfältig verwendet werden; Es sollten nur Soweit, die nicht mehr benötigt werden, weitergegeben werden, da diese Ausdehnungen dauerhaft aus dem Speichermedium entfernt werden.

Betriebsmittel