Partager via


Une nouvelle API permet aux applications d’envoyer des indicateurs « TRIM et Unmap » au support de stockage

Plates-formes

clients – Windows 8
serveurs – Windows Server 2012

Description

Les indicateurs TRIM informent le lecteur que certains secteurs précédemment alloués ne sont plus nécessaires par l’application et peuvent être vidés. Cela est généralement utilisé lorsqu’une application effectue des allocations d’espace volumineuses via un fichier, puis gère automatiquement les allocations dans le fichier (par exemple, les fichiers de disque dur virtuel).

Qu’est-ce que TRIM ?

Les disques SSD (Ssd) sont généralement des périphériques mémoire flash effacés ; cela signifie que lorsque les données sont écrites sur le DISQUE SSD, elles ne peuvent pas être sur-écrites en place et doivent être écrites ailleurs jusqu’à ce que le bloc puisse être récupéré par le garbage collect. Étant donné que le ssd n’a pas de mécanisme interne pour déterminer que certains blocs sont supprimés et d’autres sont nécessaires. Le seul moment où le DISQUE SSD peut marquer un secteur « sale » est lorsqu’il est sur-écrit. Dans d’autres cas, par exemple lorsqu’un fichier est supprimé, le DISQUE SSD conserve ces secteurs, car la suppression est effectuée en tant que modification MFT (Master File Table) uniquement, et non en tant qu’opération pour tous les secteurs du fichier. Dans Windows 7, nous avons introduit un moyen standard de communiquer avec les DISQUES SSD sur les secteurs qui ne sont plus nécessaires. Cette commande est définie dans la spécification T13 comme commande TRIM ; NTFS envoie la commande TRIM pour certaines opérations inline normales telles que « deletefile ».

Autres utilisations de TRIM dans le monde du stockage

Comme les DISQUES SSD, les réseaux de zone de stockage (SAN) et les nouvelles implémentations d’espaces logiciels windows 8 utilisent des indicateurs de commande TRIM pour gérer leurs espaces dans des environnements approvisionnés en mode mince. Les réseaux SAN et les espaces logiciels allouent des régions de stockage de tailles supérieures à celles des secteurs ou des clusters (de 1 Mo à 1 Go). Lorsqu’ils reçoivent des indicateurs TRIM pour sa taille d’allocation (ou supérieur à la taille d’allocation), le SAN/SSD peut désaffecter une région pour libérer de l’espace pour d’autres fichiers. Ils passent généralement tous les indicateurs TRIM au média sous-jacent (SSD ou HDD) afin qu’ils puissent consommer l’espace libéré selon les besoins. Ils ne déplacent généralement pas les données vers les régions de désaffecter, ni effectuent le suivi des zones TRIM vers des régions désaffectées (lorsque la région est vide).

Les réseaux SAN provisionnés de manière fine utilisent les indicateurs TRIM qui leur sont transmis pour réduire l’encombrement global du stockage physique, ce qui réduit le coût. La spécification T10 SCSI définit la commande « Unmap » (similaire à la commande TRIM) ; ici, la commande s’applique à tous les types de stockage, notamment les disques DURS, les DISQUES SSD et d’autres. La commande UnMap permet de supprimer les blocs physiques de l’allocation du SAN.

Comment utiliser la nouvelle 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;

Le fichier TRIM est transmis via la mémoire tampon si possible ou de manière asynchrone (non mis en mémoire tampon) à la commande DSM IOCTL de l’appareil. Cette opération est mappée à la commande TRIM pour les appareils ATA et à la commande UnMap pour les appareils SCSI. Le code TRIM du fichier envoie les régions un par un, comme spécifié par les étendues ci-dessus.

File TRIM n’attend pas les retours de l’appareil, car les commandes TRIM et Unmap sont définies comme des indicateurs pour le support de stockage sous-jacent et les codes de retour ne sont pas attendus.

flux de travail de bout en bout :

  1. Rogner le fichier d’appel
    1. File TRIM examine les entrées pour les erreurs
    2. File TRIM décompose les étendues dans les régions LCN
    3. File TRIM arrondit et descend pour les régions mal alignées qui sont passées dans TRIM
    4. File TRIM vide les entrées dans le cache qui sont liées aux zones TRIM
    5. File TRIM passe IOCTL_DSM (Trim) par région
  2. Fichier TRIM renvoie ou génère des erreurs
    1. La vérification des erreurs est effectuée sur la validité de l’entrée
    2. Si seules certaines des étendues sont valides, une erreur est retournée pour l’appel d’API complet

cas d’usage

disque dur virtuel consommateur monté sur un disque SSD :

Le disque dur virtuel est initialement monté sur un média « propre » inutilisé. Comme le disque dur virtuel est utilisé, le disque dur virtuel consomme des parties du support de stockage pour les fichiers, etc. Lorsqu’il supprime des fichiers dans le support de stockage, ces fichiers ne sont pas supprimés du disque SSD, car le disque dur virtuel complet est stocké en tant que fichier sur le DISQUE SSD. L’environnement Hyper-V appelle File TRIM pour toutes les régions supprimées lors de la suppression du fichier dans l’environnement de disque dur virtuel. Les File_TRIMs sont traduites en SSD afin que les performances du disque SSD puissent être optimisées.

disque dur virtuel consommateur monté sur un SAN approvisionné de manière dynamique :

Le disque dur virtuel est initialement monté sur une plaque minimale d’un environnement à provisionnement mince. À mesure que les fichiers sont stockés dans le disque dur virtuel, l’empreinte de stockage du disque dur virtuel augmente en plusieurs de plaques. Lorsque des fichiers sont supprimés dans le disque dur virtuel, le Hyper-V appelle File_TRIM à l’instance SAN provisionnée automatiquement sous-jacente. Si les TRIMs sont plus volumineuses que la granularité SLAB, le SAN peut maintenant supprimer une SLAB et donc réduire l’empreinte du disque dur virtuel sur ce SAN.

Si le disque dur virtuel réside sur un serveur Windows 8, l’optimiseur de stockage envoie également des triMs pour réduire l’encombrement de la plaque du disque dur virtuel à partir du disque dur virtuel monté.

Tests

Il n’existe aucune API comparable dans les versions antérieures du système d’exploitation. Il ne doit pas y avoir d’impact sur les performances de l’API proprement dite, bien que le support de stockage (s’il est implémenté correctement) puisse afficher de meilleures performances d’écriture. L’API doit être utilisée très soigneusement ; seules les étendues qui ne sont plus nécessaires doivent être transmises, car ces étendues seront définitivement supprimées du support de stockage.

Ressources