Pourquoi les lectures 4K dans les benchmarks hdd / ssd sont-elles plus lentes que les écritures?

12

Il existe plusieurs outils de référence disponibles pour tester la vitesse d'un lecteur de PC.

Voici un exemple de référence d'un SSD SATA:

  • Lecture séquentielle: 718,498 Mo / s
  • Écriture séquentielle: 777,414 Mo / s
  • Lecture aléatoire 512 Ko: 160,541 Mo / s
  • Écriture aléatoire 512 Ko: 838,930 Mo / s
  • Lecture aléatoire 4Ko (QD = 1): 26,985 Mo / s [6588,1 IOPS]
  • Écriture aléatoire 4Ko (QD = 1): 135,603 Mo / s [33106,2 IOPS]
  • Lecture aléatoire 4Ko (QD = 32): 177,003 Mo / s [43213,6 IOPS]
  • Écriture aléatoire 4Ko (QD = 32): 178,397 Mo / s [43554.0 IOPS]

SSD m.2:

  • Lecture séquentielle (Q = 32, T = 1): 829,119 Mo / s
  • Écriture séquentielle (Q = 32, T = 1): 677,645 Mo / s
  • Lecture aléatoire 4KiB (Q = 32, T = 1): 744,328 Mo / s [181720,7 IOPS]
  • Écriture aléatoire 4KiB (Q = 32, T = 1): 144,876 Mo / s [35370,1 IOPS]
  • Lecture séquentielle (T = 1): 785,600 Mo / s
  • Écriture séquentielle (T = 1): 789,973 Mo / s
  • Lecture aléatoire 4KiB (Q = 1, T = 1): 56,585 Mo / s [13814,7 IOPS]
  • Écriture aléatoire 4KiB (Q = 1, T = 1): 170,449 Mo / s [41613,5 IOPS]

Disque dur:

  • Lecture séquentielle: 114,988 Mo / s
  • Écriture séquentielle: 111,043 Mo / s
  • Lecture aléatoire 512 Ko: 39,260 Mo / s
  • Écriture aléatoire 512 Ko: 57,409 Mo / s
  • Lecture aléatoire 4Ko (QD = 1): 0,546 Mo / s [133,4 IOPS]
  • Écriture aléatoire 4Ko (QD = 1): 0,757 Mo / s [184,9 IOPS]
  • Lecture aléatoire 4Ko (QD = 32): 1,582 Mo / s [386,3 IOPS]
  • Écriture aléatoire 4Ko (QD = 32): 0,700 Mo / s [171,0 IOPS]

Dans tous les cas, "Random Read 4KB Q1" est plus lent que l'écriture et dans la plupart des cas, c'est le contraire pour "QD32".

Dans certains forums, les gens disent que c'est une limitation concernant la structure de la puce SSD, mais comme les disques durs habituels montrent le même comportement, cela semble être une autre raison?!

mgutt
la source

Réponses:

9

TL; DR: C'est parce que le SSD vous ment et dit que l'écriture est terminée avant qu'elle ne le soit. Il ne peut pas s'en tirer avec la même chose pour les lectures.

La version la plus longue de la réponse est la mise en cache de l'écriture.

Commençons par le cas QD1. Le SSD signale l'écriture comme terminée au système d'exploitation une fois qu'il a reçu les données et les a enregistrées localement dans un cache sur le lecteur, mais avant de les avoir réellement écrites sur la NAND. Cela fait une grande différence, car l'écriture de données dans NAND est assez lente. Pour les lectures, il doit lire les données de la NAND avant de pouvoir les renvoyer (à moins qu'il ne les ait lues plus tôt et les ait toujours en cache, mais cela est très peu probable avec des lectures aléatoires).

L'inconvénient est que face à une perte de puissance soudaine, il peut y avoir une perte de données écrites sur le SSD mais qui ne l'ont pas encore fait sur la NAND. Certains disques SSD d'entreprise incluent un super condensateur qui stocke suffisamment d'énergie pour terminer l'écriture des données dans le cache sur la mémoire NAND en cas de perte soudaine de puissance.

Vous voyez la même chose pour les disques durs car ils font également la mise en cache d'écriture. Ils ne sont tout simplement pas aussi agressifs à ce sujet. Pourquoi le SSD est-il si agressif? Pour répondre à cela, nous devons passer à l'examen du cas QD32, qui est à la fois plus compliqué et plus intéressant.

Ce n'est pas vrai ce que vous dites, les lectures aléatoires sont généralement plus rapides que les écritures aléatoires sur QD32. Cela dépend beaucoup des disques SSD que vous regardez.

Si vous regardez les lectures aléatoires 4k QD1 sur de nombreux SSD SATA, elles semblent toutes fonctionner dans la plage de 20 à 30 Mo / s. Pourquoi donc? C'est parce que les lectures aléatoires 4k QD1 concernent principalement les latences et non le débit. La latence provient de trois parties:

  1. La latence d'interface de SATA / AHCI qui implique de dire au lecteur quoi faire et d'envoyer les données.
  2. Le contrôleur lui-même doit déterminer quoi faire avec les données et les instructions qu'il a reçues.
  3. Temps nécessaire pour lire ou écrire réellement les données dans un dé NAND.

Ni 1. ni 3. n'ont beaucoup changé depuis longtemps, et c'est pourquoi les lectures aléatoires 1k QD1 n'ont pas beaucoup changé non plus.

Le passage récent des SSD de SATA / AHCI à PCIe / NVMe a considérablement réduit la latence de 1., c'est pourquoi certains SSD m.2 et PCIe ont récemment montré de grandes améliorations ici.

Une chose qu'un contrôleur SSD peut faire pour aider grandement à la latence est de lire ou d'écrire sur plusieurs puces NAND en parallèle et de cette façon masquer la majeure partie de la latence de 3. Si vous effectuez des lectures aléatoires QD32 4k avec NCQ, le SSD peut gérer la lecture demandes hors service et assurez-vous qu'il lit à partir d'autant de matrices NAND en parallèle que possible.

Pour les écritures aléatoires QD32 4k, le SSD fait quelque chose appelé combinaison d'écriture. Lorsque de nombreuses petites demandes d'écriture arrivent dans le contrôleur SSD, elles les mettent en cache localement et lorsqu'une mémoire tampon d'écriture suffisamment importante a été constituée, le contrôleur la divise en morceaux de bonne taille et écrit les morceaux en plusieurs matrices NAND en parallèle, là encore pour aider à masquer le Latence NAND. Un autre avantage de la combinaison d'écriture est que la plupart des disques SSD ont aujourd'hui une taille de page (la plus petite quantité pouvant être lue ou écrite) supérieure à 4k, et la combinaison d'écritures jusqu'à ce que vous atteigniez la taille de la page permet d'éviter beaucoup d'amplification d'écriture. C'est pour faire cela que les SSD sont si agressifs dans la mise en cache de l'écriture.

Mr Alpha
la source