Utiliser les SSD QLC comme RAIDZ (archive scientifique)?

Sep 21 2020

Nous construisons un système d'archivage et d'analyse scientifique de certaines données météorologiques.

La configuration est redondante, avec deux HP DL580, Proxmox (ZoL) et quelques GPU pour l'analyse. Sur chaque serveur, nous prévoyons 5 pools d'environ 50 To. Nous utilisons des SSD pour des raisons de densité et de vitesse de lecture. Nous travaillons avec des disques SSD HPE à forte lecture au cours des deux dernières années. Nous envisageons les changements suivants pour les prochains pools d'archives:

  • Utilisez des disques SSD HPE QLC «très optimisés en lecture». Ils sont livrés avec un DWPD réduit, en particulier pour les écritures aléatoires.
  • Passer du miroir rayé au raidZ2 (8 x 7,68 To)

Les données sont enregistrées sous forme de fichiers (25%) et dans une base de données (InnoDB, 75%), évidemment écrite une seule fois.

La combinaison raidZ2 - SSD QLC est-elle résonable pour ce type d'archive?

Existe-t-il des bonnes pratiques ou des pièges spécifiques à ZFS concernant l'endurance des disques SSD QLC?

Edit: exemple de sortie smartctl pour le SSD TLC actuel dans un miroir rayé

Copyright (*C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org  
=== START OF INFORMATION SECTION ===  
Device Model:     VK007680GWSXN  
Serial Number:      
LU WWN Device Id: 5 00a075 1266adce4  
Firmware Version: HPG2  
User Capacity:    7,681,501,126,656 bytes [7.68 TB]  
Sector Sizes:     512 bytes logical, 4096 bytes physical  
Rotation Rate:    Solid State Device  
Form Factor:      2.5 inches  
Device is:        Not in smartctl database [for details use: -P showall]  
ATA Version is:   ACS-3 T13/2161-D revision 5  
SATA Version is:  SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)  
Local Time is:    Mon Sep 21 21:11:42 2020 CEST  
SMART support is: Available - device has SMART capability.  
SMART support is: Enabled  
=== START OF READ SMART DATA SECTION ===  
SMART overall-health self-assessment test result: PASSED  
General SMART Values:  
Offline data collection status:  (0x00) Offline data collection activity
                    was never started.  
                    Auto Offline Data Collection: Disabled.  
Self-test execution status:      (   0) The previous self-test routine completed
                    without error or no self-test has ever 
                    been run.  
Total time to complete Offline   
data collection:        (26790) seconds.  
Offline data collection
capabilities:            (0x7b) SMART execute Offline immediate.
                    Auto Offline data collection on/off support.
                    Suspend Offline collection upon new
                    command.
                    Offline surface scan supported.
                    Self-test supported.
                    Conveyance Self-test supported.
                    Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                    power-saving mode.
                    Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                    General Purpose Logging supported.
Short self-test routine 
recommended polling time:    (   2) minutes.
Extended self-test routine
recommended polling time:    (  45) minutes.
Conveyance self-test routine
recommended polling time:    (   3) minutes.
SCT capabilities:          (0x0035) SCT Status supported.
                    SCT Feature Control supported.
                    SCT Data Table supported.
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   100   100   050    Pre-fail  Always       -       0  
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0  
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       4514  
 11 Unknown_SSD_Attribute   0x0012   100   100   000    Old_age   Always       -       5  
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       6  
171 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0  
172 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0  
173 Unknown_Attribute       0x0033   100   100   010    Pre-fail  Always       -       26  
174 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       5  
175 Program_Fail_Count_Chip 0x0033   100   100   001    Pre-fail  Always       -       0  
180 Unused_Rsvd_Blk_Cnt_Tot 0x003b   100   100   001    Pre-fail  Always       -       0  
184 End-to-End_Error        0x0032   100   100   000    Old_age   Always       -       0  
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0  
188 Command_Timeout         0x0032   100   100   000    Old_age   Always       -       7  
194 Temperature_Celsius     0x0022   067   057   000    Old_age   Always       -       33 (Min/Max 22/43)  
196 Reallocated_Event_Count 0x0033   100   100   001    Pre-fail  Always       -       0  
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0  
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0  
199 UDMA_CRC_Error_Count    0x003e   100   100   000    Old_age   Always       -       0  
SMART Error Log not supported  
SMART Self-test Log not supported  
SMART Selective self-test log data structure revision number 1  
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS  
    1        0        0  Not_testing  
    2        0        0  Not_testing  
    3        0        0  Not_testing  
    4        0        0  Not_testing  
    5        0        0  Not_testing  
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.*

Réponses

3 Benoit Nov 06 2020 at 20:56

Nous avons implémenté la solution. Les lecteurs QLC semblent convenir à l'utilisation que nous en faisons.

Cependant, RAIDZ2 s'est avéré peu pratique:

La combinaison ashift = 12 avec 16K recordsize (taille des enregistrements appropriée pour notre DB) conduit à un prix élevé payé à parité.

En utilisant RAIDZ2, nous avions deux blocs de parité 4K écrits pour les données réelles 16K. Un tiers du stockage a été utilisé pour la parité. Nous sommes donc revenus aux miroirs rayés.

2 shodanshok Sep 22 2020 at 02:45

En raison de la façon dont les lecteurs HP rapportent leurs informations SMART, les données fournies ne sont pas extrêmement utiles. Cela dit, l'attribut 173 doit être le décompte d'effacements dans le pire des cas (c'est-à-dire l'usure) des blocs NAND. Avec seulement 26 cycles d'effacement maximum après 6 mois, votre SSD devrait être bon pendant 3000/26/2 = ~ 57,7 ans.

C'est clairement une exagération, car bien avant cela, vous devrez remplacer quelque chose d'autre dans votre serveur (ou même le SSD lui-même en raison d'une défaillance inattendue du contrôleur / NAND). C'est, cependant, un bon point de départ pour évaluer le SSD d'entreprise QLC: même avec 1/10 de l'endurance, vous bénéficierez d'une durée de service d'environ 5 ans - la même que celle que leur garantie couvre généralement.

De plus, les lecteurs QLC d'entreprise ont généralement des puces NAND évaluées à environ 1000 cycles, de sorte que l'endurance dans le monde réel devrait être nettement supérieure aux 5 années mentionnées ci-dessus.

En plus du fait que, selon votre question et vos commentaires, ces disques SSD vont passer la plupart de leur temps dans une charge de travail en lecture seule, l'utilisation des disques QLC ne devrait poser aucun problème , à moins que la vitesse d'écriture plus lente des disques QLC ne soit de toute importance pour votre charge de travail ou si vous prévoyez de laisser votre serveur hors tension pendant de longues périodes.

En ce qui concerne RAIDZ2, cela peut être un bon choix pour le SSD mais assurez-vous de créer votre pool avec ashift=12et de définir une recordsizepropriété raisonnablement petite (je suggère fortement 16K plutôt que la valeur par défaut de 128K).