Manuel de référence des paramètres réglables d'Oracle® Solaris 11.2

Quitter la vue de l'impression

Mis à jour : Décembre 2014
 
 

Configuration d'un comportement de vidage de cache correct pour les périphériques de stockage flash et NVRAM

ZFS est conçu pour fonctionner avec les périphériques de stockage qui gèrent un cache au niveau d'un disque. ZFS demande en général au périphérique de stockage de s'assurer que les données sont correctement placées sur un stockage stable en envoyant une demande de purge du cache. Pour le stockage JBOD, cela fonctionne comme prévu et sans problèmes. Pour de nombreuses baies de stockage basées sur NVRAM, un problème de performances risque de se produire si la baie traite la demande de purge et exécute une action avec cette dernière au lieu de l'ignorer. Certaines baies de stockage purgent leurs caches volumineux malgré le fait que la protection NVRAM rende ces caches aussi efficaces qu'un stockage stable.

ZFS produit une purge peu fréquente (toutes les 5 secondes environ) après les mises à jour de l'uberblock. La faible fréquence de la purge ne présente ici que peu de conséquences, aucun réglage n'est alors nécessaire. ZFS produit également une purge à chaque demande d'écriture synchrone émise par une application (O_DSYNC, fsync, validation NFS, etc.). L'avancement de ce type de purge est attendu par l'application et a une incidence sur les performances. Et ce, considérablement. D'un point de vue des performances, cela neutralise les avantages découlant de la possession d'un stockage basé sur NVRAM.

Il a récemment été établi que le réglage du vidage du cache contribue à améliorer les performances des périphériques flash utilisés en tant que périphériques de journalisation. Lorsque tous les LUN exposés à ZFS proviennent d'une baie de stockage protégée par NVRAM et que des procédures assurent qu'aucun LUN non protégé ne sera ajouté à l'avenir, vous pouvez régler ZFS pour qu'il n'émette pas de demandes de vidage en définissant zfs_nocacheflush. Si certaines LUN exposées à ZFS ne sont pas protégées par NVRAM, ce réglage peut engendrer des pertes de données, des dommages au niveau des applications ou même un endommagement du pool. Dans certaines baies de stockage protégées par NVRAM, la commande de purge du cache constitue une opération non effective. Par conséquent, un réglage dans cette situation ne fait pas de différences en termes de performances.

Lors d'une récente modification du SE, la sémantique de demande de vidage a été qualifiée de manière à indiquer aux périphériques de stockage d'ignorer les demandes s'ils disposent d'une protection correcte. Cette modification nécessite une correction de nos pilotes de disque pour que le périphérique NVRAM prenne en charge la sémantique mise à jour. Si le périphérique NVRAM ne reconnaît pas cette amélioration, suivez les instructions ci-après pour indiquer au SE Solaris de ne pas envoyer de commandes de synchronisation de cache à la baie de disques. Si vous appliquez ces instructions, assurez-vous que tous les LUN ciblés sont effectivement protégés par NVRAM.

Il arrive que les périphériques flash et NVRAM n'indiquent pas correctement au SE qu'ils sont des périphériques non volatils, et que les caches ne nécessitent pas de vidage. Le vidage de cache est une opération coûteuse. Des vidages inutiles peuvent considérablement diminuer les performances dans certains cas.

Consultez les restrictions de syntaxe zfs_nocacheflush suivantes avant d'appliquer les entrées réglables ci-dessous :

  • Vous pouvez inclure la syntaxe de réglage ci-dessous dans sd.conf mais il ne doit exister qu'une seule entrée sd-config-list par fournisseur/produit.

  • Si vous souhaitez saisir plusieurs entrées de périphériques, vous pouvez indiquer plusieurs paires d'ID fournisseur et de chaînes réglables sd sur la même ligne à l'aide de la syntaxe suivante :

    #              "012345670123456789012345","tuning    ",
    sd-config-list="|-VID1-||-----PID1-----|","param1:val1, param2:val2",
                   "|-VIDN-||-----PIDN-----|","param1:val1, param3:val3";

    Assurez-vous que la chaîne de l'ID du fournisseur (VID) est complétée de 8 caractères et que la chaîne de l'ID de produit (PID) est complétée de 16 caractères comme décrit dans l'exemple précédent.


Caution

Mise en garde  -  Toutes les commandes de synchronisation de cache sont ignorées par le périphérique. Leur utilisation est risquée.


  1. Servez-vous de l'utilitaire format pour exécuter la sous-commande inquiry sur un LUN de la baie de stockage. Par exemple :

    # format
    .
    .
    .
    Specify disk (enter its number): x
    format> inquiry
    Vendor:   ATA
    Product:  Marvell
    Revision: XXXX
    format>
  2. Sélectionnez l'un des éléments suivants en fonction de votre architecture :

    • Pour tous les périphériques, copiez le fichier /kernel/drv/sd.conf dans le fichier /etc/driver/drv/sd.conf.

    • Pour les périphériques flash F40, ajoutez l'entrée suivante à /kernel/drv/sd.conf. Dans l'entrée ci-dessous, assurez-vous que ATA est renseigné avec 8 caractères et que 3E128-TS2-550B01 contient 16 caractères. La longueur totale de la chaîne est égale à 24.

      sd-config-list="ATA  3E128-TS2-550B01","disksort:false, cache-nonvolatile:true, physical-block-size:4096";
    • Pour les périphériques flash F80, ajoutez l'entrée suivante à /kernel/drv/sd.conf. Assurez-vous que ATA est renseigné avec 8 caractères et que 3E128-TS2-550B01 contient 16 caractères. La longueur totale de la chaîne est égale à 24.

      sd-config-list="ATA  2E256-TU2-510B00","disksort:false, cache-nonvolatile:true, physical-block-size:4096";
      
    • Pour les périphériques flash F20 et F5100, sélectionnez l'un des éléments suivants en fonction de votre architecture. Dans les entrées ci-dessous, ATA est renseigné avec 8 caractères et MARVELL SD88SA02 contient 16 caractères. La longueur totale de la chaîne est égale à 24.

    • Ajoutez l'entrée suivante à /etc/driver/drv/sd.conf

      sd-config-list="ATA  MARVELL SD88SA02","throttle-max:32, disksort:false, cache-nonvolatile:true";
  3. Ajoutez des espaces avec précaution pour porter la longueur de l'ID fournisseur (VID) à 8 caractères (ici ATA) et celle de l'ID produit à 16 caractères (ici MARVELL) dans l'entrée sd-config-list, comme indiqué.

  4. Réinitialisez le système.

    Vous pouvez restaurer la valeur par défaut (0) de zfs_nocacheflush sans effet négatif sur les performances.

  5. Confirmez que le comportement de vidage est correct.

    Utilisez le script fourni dans Appendix A, Script de vérification système à des fins de vérification.