Danila (Dayfing)
Retour aux articles
3 074 mots14 min

Choisir un SSD NVMe : PCIe 5.0 ou 4.0, DRAM, TLC ou QLC, TBW

Pour la plupart des stations de travail et des PC de jeu, ce qui détermine le ressenti d'un SSD NVMe, ce n'est pas le débit séquentiel maximal inscrit sur la boîte, mais la latence en lecture aléatoire 4K à faible profondeur de file, la vitesse d'écriture une fois le cache SLC plein, la présence de DRAM ou d'un HMB bien conçu, et le refroidissement. Le PCIe 5.0 n'est rentable que si la charge transfère en continu de gros fichiers et si le SSD occupe un slot x4 relié au processeur. Un serveur ajoute deux exigences : une endurance exprimée en DWPD et une protection contre les coupures de courant. Les sections suivantes montrent comment vérifier chaque point avec fio, smartctl et nvme-cli.

Débit séquentiel ou 4K aléatoire à faible profondeur de file

Les débits séquentiels se mesurent avec de gros blocs et des files profondes. Ils décrivent la copie d'une vidéo, la restauration d'une image disque ou le chargement des poids d'un modèle. Compiler du code, lancer des applications ou interroger une base de données plus grande que la RAM produit au contraire de petites lectures, et chaque thread attend en général la fin d'une lecture avant d'émettre la suivante. Le SSD ne voit alors qu'une file d'une à quelques commandes.

À une profondeur de file de 1, le nombre d'IOPS est égal à une seconde divisée par la latence moyenne. Si une lecture de 4 KiB prend 80 microsecondes, un thread obtient 12 500 IOPS, soit environ 51 MB/s. Diviser la latence par deux double ce chiffre, alors que doubler la bande passante PCIe ne change rien. C'est pourquoi des SSD aux débits séquentiels très différents peuvent sembler identiques sur un poste de bureau.

Cherchez les résultats en lecture et en écriture aléatoires 4K à QD1, ainsi que les latences p99 ou p99.9 sous charge mixte, et mesurez ce que les fabricants ne publient pas avec les tâches fio ci-dessous. Un serveur a aussi besoin d'IOPS à forte profondeur de file, car de nombreux clients créent un vrai parallélisme. Un index HNSW qui ne tient pas en mémoire, comme dans le guide de recherche hybride avec pgvector, transforme chaque requête en une chaîne de lectures aléatoires dépendantes, où la latence de queue compte davantage que les GB/s.

Génération PCIe, nombre de lignes et câblage des slots M.2

Le PCIe 3.0, 4.0 et 5.0 fonctionne à 8, 16 et 32 GT/s par ligne avec un codage 128b/130b. Le plafond dans un sens vaut GT/s × 128/130 ÷ 8 GB/s par ligne, si bien qu'un lien x4 culmine vers 3,9, 7,9 et 15,8 GB/s avant le surcoût du protocole. Le SSD et le slot négocient la génération et la largeur les plus élevées qu'ils prennent tous deux en charge : un SSD PCIe 5.0 fonctionne à la vitesse 4.0 dans un slot PCIe 4.0, et un SSD x4 dans un slot x2 ne reçoit que la moitié des lignes.

Sur les cartes mères de bureau, certains slots M.2 utilisent des lignes du processeur et d'autres dépendent du chipset. Le chipset dispose d'une seule liaison vers le processeur, partagée par l'USB, le SATA, le réseau et tous les autres slots du chipset. Les cartes partagent aussi des lignes : occuper un slot M.2 donné peut désactiver des ports SATA ou faire passer le slot graphique en x8. Le schéma fonctionnel ou le tableau des slots du manuel de la carte mère indique le câblage. Lisez-le avant d'acheter.

Placez le disque système et le projet ou la base de données le plus actif dans un slot relié au processeur, et réservez les slots du chipset aux jeux et aux archives. Le PCIe 5.0 se justifie pour la vidéo à haut débit, la copie de jeux de données et le chargement de gros fichiers de modèles, décrit dans le guide du matériel pour LLM locaux. Pour le jeu et le développement courant, un bon SSD PCIe 4.0 à faible latence QD1 est en général le meilleur choix.

Vérifier le lien négocié

Comparez le lien actuel au maximum dans sysfs :

cd /sys/class/nvme/nvme0/device
cat current_link_speed current_link_width max_link_speed max_link_width

Un SSD PCIe 4.0 x4 dans un slot adapté indique 16.0 GT/s PCIe et une largeur de 4. Une valeur inférieure désigne le câblage du slot, une génération forcée dans le firmware de la carte, un riser ou un partage de lignes.

Contrôleur, cache DRAM et HMB

Le contrôleur fait correspondre les adresses logiques aux pages NAND par la couche de traduction flash (FTL). Une table plate avec une entrée de 4 octets par page de 4 KiB occupe 1/1024 de la capacité, d'où le ratio souvent cité d'environ 1 GB de DRAM par TB de NAND. Un SSD équipé de DRAM garde l'essentiel de cette table près du contrôleur, si bien que les lectures aléatoires sur une large plage restent rapides.

Les SSD sans DRAM utilisent le Host Memory Buffer (HMB) et empruntent de la RAM système pour une partie de la table. Le SSD demande une taille dans le champ hmpre de l'Identify Controller, en unités de 4 KiB, et Linux la plafonne avec nvme.max_host_mem_size_mb, soit 128 MiB par contrôleur par défaut. Le HMB convient aux usages de bureau qui touchent une partie limitée du SSD. Il aide moins quand les E/S aléatoires couvrent des centaines de gigaoctets, comme avec les bases de données et les images de machines virtuelles.

nvme id-ctrl /dev/nvme0 | grep -E '^(mn|fr|hmpre|hmmin|vwc|wctemp|cctemp) '
cat /sys/module/nvme/parameters/max_host_mem_size_mb

Une valeur hmpre non nulle sur un SSD sans DRAM confirme la prise en charge du HMB. Le tampon est petit, mais si la mémoire système est déjà juste, le guide de la mémoire DDR5 aide à la dimensionner.

TLC, QLC et cache SLC

La TLC stocke trois bits par cellule et la QLC quatre. Plus de bits par cellule signifie plus de capacité par puce, mais une programmation plus lente et moins de cycles d'écriture et d'effacement. Les SSD grand public masquent cette lenteur avec un cache SLC : les données entrantes sont écrites à un bit par cellule, puis transférées plus tard en TLC ou en QLC.

Le cache est limité et souvent dynamique : il rétrécit à mesure que le SSD se remplit. Quand une longue écriture l'épuise, la vitesse tombe au niveau post-cache, qui tend à être plus bas en QLC. Les recommandations matérielles de Ceph appellent ce phénomène « cliffing » et avertissent que les performances soutenues peuvent chuter nettement une fois un cache limité rempli.

Cherchez dans les tests ou les fiches techniques la taille du cache à un taux de remplissage donné et la vitesse d'écriture post-cache. Si vous écrivez souvent des dizaines de gigaoctets d'un coup, par exemple lors de l'import de vidéos, de copies d'images de VM ou de sauvegardes, choisissez de la TLC et gardez de l'espace libre. La QLC convient aux bibliothèques surtout lues : jeux, médias et fichiers de modèles.

Endurance : TBW, DWPD et garantie

Le TBW est l'indice d'endurance défini par JEDEC JESD218 : le nombre de téraoctets décimaux que l'hôte peut écrire selon la charge de la classe du SSD tant que celui-ci conserve sa capacité et respecte les exigences de taux d'erreurs, de taux de défaillance et de rétention hors tension. Le DWPD exprime le même budget en écritures complètes par jour de garantie :

DWPD = TBW / (capacity_TB × 365 × warranty_years)
TBW  = DWPD × capacity_TB × 365 × warranty_years

Un SSD hypothétique de 2 TB noté 1 200 TBW sur cinq ans donne 1200 / (2 × 365 × 5), soit environ 0,33 DWPD. Un poste qui écrit 50 GB par jour consomme environ 91 TB en cinq ans. Une base de données qui réécrit tout le SSD chaque jour a besoin de davantage, et Ceph conseille au moins 1 DWPD pour ses pools exigeants.

Les écritures de l'hôte ne sont pas des écritures NAND. Les petites écritures aléatoires, un SSD plein et l'absence de TRIM augmentent le facteur d'amplification d'écriture (WAF). Un exemple détaillé dans les documents JEDEC estime l'endurance par TBW < (capacity × NAND P/E cycles) / (2 × WAF). Gardez de l'espace libre, activez TRIM et prenez plus de capacité pour les charges riches en écritures.

Beaucoup de garanties grand public prennent fin à l'échéance ou au TBW annoncé, selon ce qui arrive en premier. JESD218 fixe aussi la rétention hors tension d'un SSD arrivé à son endurance nominale : un an à 30 °C pour la classe client et trois mois à 40 °C pour la classe entreprise. Un SSD débranché n'est pas une archive, suivez donc le guide de sauvegarde 3-2-1.

Température, throttling et dissipateurs

Chaque contrôleur publie deux seuils dans l'Identify Controller. Au seuil WCTEMP, il continue à fonctionner mais demande plus de refroidissement ou moins de charge. Au seuil CCTEMP, il peut brider fortement ses performances, s'arrêter ou perdre des données. La NVM Express Base Specification 2.4 définit ces températures en kelvins et recommande un seuil d'avertissement de 343 K, soit environ 70 °C.

Les SSD PCIe 5.0 et les SSD PCIe 4.0 rapides ont généralement besoin d'un dissipateur sous charge prolongée. Utilisez-en un seul, soit le capot M.2 de la carte mère avec son pad thermique, soit celui du SSD, et vérifiez qu'un flux d'air le traverse. Dans un portable ou un boîtier compact, un SSD moins gourmand peut soutenir plus de travail qu'un modèle plus rapide qui bride. Le journal SMART compte les minutes passées au niveau de chaque seuil ou au-dessus. Si le compteur d'avertissement augmente en usage normal, améliorez le refroidissement.

Protection contre les coupures et SSD d'entreprise

Les SSD grand public confirment une écriture dès que les données atteignent un tampon volatil, et comptent sur l'hôte pour le vider par une commande flush avant la coupure. Le journal SMART compte les coupures soudaines dans le champ Unexpected Power Losses, appelé Unsafe Shutdowns dans les révisions précédentes de la spécification, et la spécification avertit que des données peuvent être corrompues sur tout SSD non protégé contre les pertes d'alimentation.

Les SSD d'entreprise dotés d'une protection contre les coupures (PLP) utilisent des condensateurs pour écrire en NAND les données et métadonnées en tampon après la perte d'alimentation. Les écritures confirmées survivent, et les flush se terminent sans attendre la NAND. Les logiciels qui appellent fsync en permanence, comme les bases de données, les journaux d'écriture anticipée, les périphériques ZFS intent log et Ceph, tournent donc plus vite et de façon plus prévisible, et Ceph recommande des SSD d'entreprise avec PLP.

nvme id-ctrl /dev/nvme0 | grep -E '^vwc '
cat /sys/block/nvme0n1/queue/write_cache

Le champ vwc indique si le contrôleur signale un cache d'écriture volatil, et la valeur write back dans write_cache signifie que Linux envoie des flush au SSD. La fiche technique fait foi pour la PLP. Ne désactivez jamais les flush ni les barrières du système de fichiers sur un SSD grand public pour améliorer un benchmark.

Tester un nouveau SSD avec fio

Testez avant que le SSD contienne des données, et utilisez des fichiers sur son système de fichiers, car écrire sur un périphérique brut comme /dev/nvme0n1 détruit son contenu. Les tâches utilisent les E/S directes et io_uring. Sur les anciens noyaux, utilisez --ioengine=libaio. fio prépare d'abord le fichier de test, si bien que les lectures portent sur des données réellement écrites.

cd /mnt/newdrive

# Lectures aléatoires 4K à profondeur de file 1 : ce que ressent un poste de bureau
fio --name=qd1-randread --filename=fio.test --size=32G \
  --ioengine=io_uring --direct=1 --rw=randread --bs=4k \
  --iodepth=1 --time_based --runtime=60 --ramp_time=5 \
  --lat_percentiles=1 --percentile_list=50:99:99.9

# 4K aléatoire mixte avec parallélisme : plus proche d'un serveur chargé
fio --name=qd32-randrw --filename=fio.test --size=32G \
  --ioengine=io_uring --direct=1 --rw=randrw --rwmixread=70 --bs=4k \
  --iodepth=32 --numjobs=4 --group_reporting --time_based --runtime=120

# Écriture séquentielle au-delà du cache SLC, débit enregistré chaque seconde
fio --name=seqwrite-cliff --filename=fio-big.test --size=300G \
  --ioengine=io_uring --direct=1 --rw=write --bs=1M --iodepth=8 \
  --write_bw_log=cliff --log_avg_msec=1000

Pour la tâche QD1, lisez la latence moyenne et le p99, pas seulement les IOPS. Pour la tâche mixte, comparez la latence p99.9 des SSD candidats. Dimensionnez la tâche de chute au-delà du cache attendu et en deçà de l'espace libre. Elle écrit cliff_bw.1.log, une ligne par seconde avec le temps en millisecondes et le débit en KiB/s, et un graphique montre le débit en cache, la chute et un éventuel throttling. Supprimez ensuite les fichiers de test. La documentation de fio décrit chaque option.

Lire l'état de santé avec smartctl et nvme-cli

smartmontools et nvme-cli lisent le même journal SMART / Health Information :

smartctl -x /dev/nvme0
nvme smart-log /dev/nvme0

nvme-cli 3.0, sorti en septembre 2026, renomme les commandes sous des formes comme nvme log smart et nvme id ctrl. Les noms avec trait d'union utilisés ici restent disponibles comme alias obsolètes et fonctionnent aussi avec nvme-cli 2.x.

  • Critical Warning : tout bit non nul exige une action. Les bits couvrent la réserve de blocs, la température, la fiabilité et le passage du support en lecture seule.
  • Available Spare : la réserve restante en pourcentage. Une baisse vers Available Spare Threshold signifie que le SSD retire des blocs.
  • Percentage Used : l'estimation de l'endurance consommée par le fabricant. Elle peut dépasser 100, ce qui ne signifie pas en soi une panne.
  • Data Units Written : des milliers d'unités de 512 octets. Multipliez par 512 000 pour obtenir des octets, donc 10 000 000 unités font 5,12 TB. Relevez la valeur chaque mois pour connaître votre DWPD réel.
  • Media and Data Integrity Errors : erreurs non corrigées. Toute hausse impose de vérifier les sauvegardes immédiatement.

Autotests et firmware

smartctl -t short /dev/nvme0
smartctl -l selftest /dev/nvme0
nvme fw-log /dev/nvme0
fwupdmgr get-updates
fwupdmgr update

L'autotest est facultatif dans la spécification NVMe, si bien que certains SSD le refusent. Configurez smartd ou votre supervision pour alerter sur les champs ci-dessus. Le firmware influe sur les performances, la gestion d'énergie et le traitement des erreurs : lisez les notes de version et sauvegardez avant une mise à jour. Le plugin NVMe de fwupd installe les mises à jour des fabricants qui publient sur LVFS et les active au redémarrage suivant. Les autres fabricants imposent leur propre outil, ou nvme fw-download puis nvme fw-commit avec leur image. Dans un miroir, mettez d'abord à jour un seul SSD. Si un SSD disparaît du bus sous Linux, cherchez d'abord un correctif de firmware ; le paramètre noyau nvme_core.default_ps_max_latency_us=0 désactive les transitions autonomes entre états d'alimentation à titre de diagnostic.

Alignement des partitions et TRIM sous Linux

fdisk et parted alignent les partitions sur la topologie d'E/S déclarée par le périphérique : conservez leurs valeurs par défaut et vérifiez le résultat :

lsblk -t /dev/nvme0n1
parted /dev/nvme0n1 align-check optimal 1
nvme id-ns -H /dev/nvme0n1 | grep 'LBA Format'

La commande align-check de parted indique si la partition 1 est alignée de façon optimale. La dernière commande liste les formats LBA pris en charge et marque celui qui est actif. Beaucoup de SSD sont livrés avec des secteurs de 512 octets et proposent aussi des secteurs de 4096 octets. nvme format --lbaf=<n> change de format mais efface l'espace de noms : décidez avant d'y stocker des données, après avoir vérifié que le chargeur d'amorçage, la couche RAID et l'hyperviseur gèrent les périphériques 4Kn.

TRIM indique au SSD quels blocs sont libres : le ramasse-miettes ne recopie plus les pages périmées, l'amplification d'écriture baisse et la vitesse post-cache se maintient. Préférez un TRIM périodique :

sudo systemctl enable --now fstrim.timer
sudo fstrim -av
lsblk --discard

Le manuel de fstrim juge un TRIM hebdomadaire suffisant pour la plupart des postes et des serveurs, et avertit qu'un TRIM fréquent ou l'option de montage discard peut réduire la durée de vie des SSD de mauvaise qualité. Btrfs active automatiquement discard=async sur les périphériques compatibles depuis le noyau 6.2. Des valeurs DISC-GRAN et DISC-MAX non nulles dans lsblk --discard indiquent que les requêtes discard atteignent le périphérique. dm-crypt ignore les discard par défaut, car ils peuvent révéler quels blocs sont occupés. Activez-les avec l'option discard de crypttab ou avec --allow-discards uniquement si cette fuite est acceptable. Gardez aussi de l'espace libre, car le cache SLC et le ramasse-miettes ont besoin de blocs libres.

Adapter le SSD à la machine

Critère PC de jeu Station de développement ou de création Serveur de bases de données ou de VM Stockage surtout en lecture
Interface PCIe 4.0, 5.0 facultatif PCIe 4.0, ou 5.0 dans un slot processeur U.2, E1.S, E3.S ou M.2 22110 PCIe 4.0 ou 3.0, slot chipset
4K aléatoire à QD1 Priorité haute Priorité haute Haute, plus IOPS à forte file et p99.9 Priorité basse
DRAM ou HMB HMB acceptable DRAM préférable DRAM HMB acceptable
NAND TLC, QLC pour une ludothèque TLC TLC entreprise QLC acceptable
Écriture post-cache Priorité basse Priorité haute Valeur en régime établi Basse sauf gros imports
Endurance 0,3 DWPD suffit À calculer selon vos écritures Au moins 1 DWPD Priorité basse
Protection contre les coupures Inutile Utile pour des bases locales Obligatoire Inutile
Refroidissement Dissipateur de la carte Dissipateur et flux d'air Ventilation du châssis Dissipateur de la carte

Liste de contrôle avant et après l'achat

  1. Décrivez la charge : écritures quotidiennes, plus grosse écriture ponctuelle, type d'accès et logiciels gros consommateurs de fsync.
  2. Vérifiez dans le manuel de la carte quels slots M.2 sont reliés au processeur et ce qu'ils désactivent.
  3. Prenez de la TLC avec DRAM pour les charges aléatoires ou d'écriture lourdes, et réservez HMB ou QLC aux usages surtout en lecture.
  4. Calculez le DWPD à partir du TBW et lisez les conditions de garantie.
  5. Pour un serveur, exigez la PLP, un indice DWPD et une procédure de mise à jour du firmware.
  6. Installez un seul dissipateur avec du flux d'air et contrôlez les compteurs de température au bout d'une semaine.
  7. Après l'installation, vérifiez la vitesse et la largeur du lien et notez la version du firmware.
  8. Lancez les trois tâches fio et conservez les résultats comme référence.
  9. Activez fstrim.timer, vérifiez l'alignement et fixez le format LBA avant d'y stocker des données.
  10. Surveillez Critical Warning, les erreurs de support, Available Spare et Percentage Used, et gardez des sauvegardes sur d'autres supports.

Plus d’articles