web-dev-qa-db-fra.com

Pourquoi les lectures 4k dans les repères hdd / ssd sont-elles plus lentes que les écritures?

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 4 Ko (QD = 1): 26,985 Mo/s [6588.1 IOPS]
  • écriture aléatoire 4 Ko (QD = 1): 135,603 Mo/s [33106.2 IOPS]
  • Lecture aléatoire 4 Ko (QD = 32): 177,003 Mo/s [43213.6 IOPS]
  • Lecture aléatoire de 4 Ko (QD = 32): 178,397 Mo/s [43554.0 IOPS]

m.2 SSD:

  • 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 de 4 Ko (Q = 32, T = 1): 744,328 Mo/s [181720.7 IOPS]
  • Écriture aléatoire 4 Ko (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 de 4 Ko (Q = 1, T = 1): 56,585 Mo/s [13814.7 IOPS]
  • Écriture aléatoire 4 Ko (Q = 1, T = 1): 170,449 Mo/s [41613.5 IOPS]

HDD:

  • 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 4 Ko (QD = 1): ,546 Mo/s [133.4 IOPS]
  • Écriture aléatoire 4 Ko (QD = 1): ,757 Mo/s [184.9 IOPS]
  • Lecture aléatoire de 4 Ko (QD = 32): 1,582 Mo/s [386.3 IOPS]
  • Écriture aléatoire 4 Ko (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 l'inverse pour "QD32".

Dans certains forums, les gens disent que c'est une limitation concernant la structure de la puce SSD, mais comme d'habitude, les disques durs présentent le même comportement, il semble être une autre raison?!

9
mgutt

TL; DR: C'est parce que le SSD vous ment et vous dit que l'écriture est faite avant. 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 en écriture.

Commençons par le cas QD1. Le SSD signalera l’écriture terminée au système d’exploitation une fois les données reçues et sauvegardées dans une mémoire cache localement sur le lecteur, mais avant qu’il ne les ait réellement écrites sur la NAND. Cela fait une grande différence car écrire des données sur NAND est plutôt lent. Pour les lectures, il doit en fait lire les données à partir de NAND avant de pouvoir les renvoyer (à moins qu’elles les aient lues plus tôt et qu’elles les conservent toujours dans le cache, mais cela est très peu probable avec des lectures aléatoires).

L'inconvénient est qu'il peut y avoir une perte de données écrites sur le disque SSD en cas de coupure de courant soudaine, mais que cela n'a pas encore été fait par la NAND. Certains SSD d'entreprise incluent un super condensateur qui stocke suffisamment d'énergie pour finir d'écrire les données dans le cache sur NAND en cas de coupure de courant soudaine.

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

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

Si vous examinez les lectures aléatoires 4k QD1 sur de nombreux disques SSD SATA, elles semblent toutes fonctionner entre 20 et 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 les données sur 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 disques 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 fait l’objet de grandes améliorations.

Une chose que peut faire un contrôleur SSD pour réduire considérablement le temps de latence est la lecture ou l’écriture sur plusieurs disques NAND en parallèle, ce qui masque la majeure partie du temps de latence de 3. Si vous effectuez des lectures aléatoires QD32 4k avec NCQ, le SSD peut gérer la lecture. demandes hors d'usage et assurez-vous qu'il lit autant de meurtres NAND en parallèle que possible.

Pour QD32 4k écrit de manière aléatoire, le SSD effectue une opération appelée combinaison d’écriture. Lorsque le contrôleur SSD reçoit beaucoup de petites demandes d’écriture, il les met en cache localement et qu’un tampon assez grand a été construit, il le scinde en morceaux de taille idéale et les écrit dans plusieurs disques NAND en parallèle, afin de masquer Latence NAND. Un autre avantage de la combinaison d'écriture réside dans le fait que la plupart des disques SSD ont aujourd'hui une taille de page (la plus petite quantité pouvant être lue ou écrite) d'une taille supérieure à 4 Ko, et combiner les écritures jusqu'à atteindre la taille de la page permet d'éviter de nombreuses amplifications d'écriture. C'est pour faire ces choses que les SSD sont si agressifs en cache d'écriture.

7
Mr Alpha