Pourquoi mon disque dur est-il si lent lors des tests de vitesse «4K»?


46

Quel est le problème avec ma vitesse à 4K? Pourquoi est-ce si lent? Ou est-ce censé être comme ça?

Capture d'écran du benchmark

Est-ce que ça va? Pourquoi ai-je une vitesse aussi basse à 4K?


13
C'est normal et attendu. "4K" dans ce contexte signifie lecture / écriture aléatoire (par blocs de 4 kilo-octets, d'où le "4K"), sur laquelle les disques durs mécaniques fonctionnent terriblement. C'est là que vous voulez un SSD. Voir ici pour une explication plus détaillée.
Bob

4 Ko est utilisé car il s'agit de la taille typique d'un cluster de disques, et de nombreux disques durs modernes, du secteur réel (la structure de bas niveau sur le disque lui-même). C'est-à-dire que la plus petite quantité de données susceptible d'être transférée à la fois en lecture ou en écriture, même si les données demandées sont plus petites. Intéressant que PAS de réponse sur cette page mentionne jusqu'à présent même des clusters ou des secteurs.
thomasrutter

2
@thomasrutter Parce que ce n'est pas pertinent pour la réponse. La partie importante est que ce test implique une recherche aléatoire. Peu importe (dans une certaine mesure) combien de données sont transférées et s'il s'agit d'un multiple de la taille du secteur du disque; l’essentiel est que le test transfère une quantité minimale de données afin de mesurer les performances recherchées.
Micheal Johnson

Ce test est-il sur une partition ou sur tout le disque? Les tests au niveau de la partition peuvent être beaucoup moins performants pour les accès 4K si vous avez un disque avec des secteurs physiques 4K mais des secteurs logiques 1K et si les limites de la partition sont mal alignées sur des secteurs chevauchants.
Toby Speight

Les outils de partitionnement modernes ont tendance à garantir que les partitions commencent et se terminent sur une limite de secteur; même la granularité de 1Mo est courante maintenant. L'ancien «secteurs de 63 512 octets», qui poserait des problèmes aux secteurs autochtones de 4 Ko, est révolu.
thomasrutter

Réponses:


85

Ce que vous rencontrez est typique des disques durs mécaniques et constitue l’un des principaux avantages des disques SSD: les disques durs offrent de terribles performances en matière d’accès aléatoire.

Dans CrystalDiskMark, "Seq" désigne un accès séquentiel, tandis que "4K" désigne un accès aléatoire (par tranches de 4 Ko à la fois, car un seul octet serait beaucoup trop lent et irréaliste 1 ).


Définitions

En gros, vous pouvez accéder à un fichier de deux manières différentes.

Accès séquentiel

L' accès séquentiel signifie que vous lisez ou écrivez le fichier plus ou moins octet après octet. Par exemple, si vous regardez une vidéo, vous devez la charger du début à la fin. Si vous téléchargez un fichier, il est téléchargé et écrit sur le disque du début à la fin.

Du point de vue du disque, il voit des commandes telles que "lire le bloc n ° 1, lire le bloc n ° 2, lire le bloc n ° 3, lire le bloc d'octets n ° 4" 1 .

Accès aléatoire

L' accès aléatoire signifie qu'il n'y a pas de motif évident pour les lectures ou les écritures. Cela ne doit pas signifier vraiment aléatoire; cela signifie vraiment "pas séquentiel". Par exemple, si vous démarrez de nombreux programmes à la fois, ils devront lire de nombreux fichiers éparpillés sur votre disque.

Du point de vue du lecteur, il voit des commandes du type "lire le bloc n ° 56, lire le bloc n ° 5463, lire le bloc n ° 14, lire le bloc n ° 5".

Des blocs

J'ai déjà mentionné des blocs plusieurs fois. Parce que les ordinateurs traitent de si grandes tailles (1 Mo ~ = 1000000 B), même un accès séquentiel est inefficace si vous devez demander au lecteur pour chaque octet - il y a trop de bavardage. En pratique, le système d'exploitation demande des blocs de données du disque à la fois.

Un bloc est juste une plage d'octets; Par exemple, le bloc n ° 1 peut être constitué des octets n ° 1 à n ° 512, le bloc n ° 2 de n ° 513 à n ° 1024, etc. Ces blocs ont une taille de 512 octets ou de 4096 octets, en fonction du lecteur. Mais même après avoir traité des blocs plutôt que des octets individuels, l'accès séquentiel aux blocs est plus rapide que l'accès aléatoire aux blocs.


Performance

Séquentiel

L'accès séquentiel est généralement plus rapide que l'accès aléatoire. En effet, l’accès séquentiel permet au système d’exploitation et au lecteur de prévoir ce qui sera nécessaire par la suite et d’en charger une grande partie à l’avance. Si vous avez demandé les blocs "1, 2, 3, 4", le système d'exploitation peut deviner que vous souhaitez "5, 6, 7, 8" ensuite, de sorte qu'il indique au lecteur de lire "1, 2, 3, 4. , 5, 6, 7, 8 "en une fois. De même, le lecteur peut lire en une fois la mémoire physique, plutôt que "chercher 1, lire 1,2,3,4, chercher 5, lire 5,6,7,8".

Oh, j'ai mentionné chercher à quelque chose. Les disques durs mécaniques ont un temps de recherche très lent en raison de leur disposition physique: ils sont constitués d’un certain nombre de disques métalisés lourds tournant autour desquels les bras physiques se déplacent pour lire le disque. Voici une vidéo d'un disque dur ouvert où vous pouvez voir les disques en rotation et les bras en mouvement.

Diagramme des internes du disque dur
Image de http://www.realtechs.net/data%20recovery/process2.html

Cela signifie qu'à tout moment, seul le bit de données situé sous la tête à l'extrémité du bras peut être lu. Le lecteur doit attendre deux choses: attendre que le bras se déplace vers le bon anneau ("piste") du disque et attendre que le disque tourne pour que les données nécessaires se trouvent sous la lecture. tête. Ceci est connu comme cherchant 2 . Les bras qui tournent et ceux qui bougent ont besoin de temps physique pour bouger, et ils ne peuvent pas être accélérés sans risquer de subir des dégâts.

Cela prend généralement très très longtemps, beaucoup plus longtemps que la lecture réelle. Nous parlons plus de 5 ms juste pour savoir où se trouve l'octet demandé, alors que la lecture réelle de l'octet est d'environ 0,00000625 ms par lecture séquentielle (ou 0,003125 ms par bloc de 512 B).

Aléatoire

En revanche, l’accès aléatoire n’a pas l’avantage de la prévisibilité. Donc, si vous voulez lire 8 octets aléatoires, peut-être à partir des blocs "8,34,76,996,112,644,888,341", le lecteur doit aller "chercher à 8, lire 8, chercher à34, lire 34, chercher à 76, lire 76, ..." . Remarquez comment il a besoin de chercher à nouveau pour chaque bloc? Au lieu d'une moyenne de 0,003125 ms par bloc séquentiel de 512 B, on passe maintenant à une moyenne de (recherche de 5 ms + lecture de 0,003125 ms) = 5,003125 ms par bloc. C'est beaucoup, beaucoup de fois plus lent. Des milliers de fois plus lent, en fait.

SSD

Heureusement, nous avons maintenant une solution: les SSD.

Un SSD, un disque SSD, est, comme son nom l’indique, un état solide . Cela signifie qu'il n'a pas de pièces mobiles . De plus, la façon dont un SSD est présenté signifie qu'il n'y a (en réalité 3 ) pas besoin de rechercher l'emplacement d'un octet; il sait déjà . C'est pourquoi un disque SSD a bien moins d'écart de performance entre accès séquentiel et aléatoire.

Il y a toujours un écart, mais cela peut être attribué en grande partie au fait de ne pas pouvoir prédire ce qui va suivre et de précharger ces données avant de les demander.


1 Plus précisément, les lecteurs LBA sont adressés par blocs de 512 octets (512n / 512e) ou de 4 ko (4 kN) pour des raisons d'efficacité. En outre, les programmes réels n’ont presque jamais besoin d’un octet à la fois.

2 Techniquement, chercher ne concerne que le déplacement du bras. Attendre que les données tournent sous la tête est une latence rotationnelle en plus du temps de recherche.

3 Techniquement, ils disposent de tables de consultation et de reconfiguration pour d'autres raisons, par exemple le nivellement par usure, mais elles sont totalement négligeables par rapport à un disque dur ...


@ KamilMaciorowski Je suis en train de repenser cette simplification maintenant, car cela éloigne mon calcul de temps de recherche et de lecture. Tant pis. Ce n'est pas trop important pour les concepts.
Bob

Vous devriez corriger la partie aléatoire Notice how it needs to look for every single byte?:: remplacez bytepar block(et changez l'exemple en conséquence). Le lecteur recherche la partie 4k (qui pourrait être encore divisée en un bloc de 512 octets, mais pas plus bas que cela. Il ne cherche pas entre chaque octet! Il cherche entre chaque bloc si le prochain bloc n'est pas juste derrière (ce qui arrive souvent Et il faut beaucoup de temps (quelques millisecondes) pour chercher (déplacer la tête autour du plateau et attendre que le bloc passe en dessous)
Olivier Dulac

2
Un petit diénote à 4 kiB / 512B. 4kiB est aussi la taille de la page, eh bien, presque tout, donc OS $ risquera de lire complètement le bloc de 4 Ko, même si les pilotes LBA lisent en 512 morceaux B. De plus, je ne pense pas que le problème réside dans le fait que le disque dur doit "trouver" un octet, pas plus que le SDD, qu'il ne soit nécessaire de faire pivoter physiquement pour corriger la position. Si vous accédez à nouveau au bloc, vous devez le rechercher à nouveau car le disque dur tourne continuellement. Tout remappage de bloc est susceptible d’être un effet secondaire (et le bloc remappé est généralement juste après un endommagé de toute façon, je crois que je souhaite minimiser la recherche).
Maciej Piechotka

(Peut-être une note de côté complète - je ne suis pas sûr à propos de NAND / NOR mais au moins l'adressage DDR n'est pas non plus complètement aléatoire comme son nom l'indique, mais fonctionne en rafale d'adresses. une taille de $ ligne de la plupart des processeurs mais peut être beaucoup plus grande pour d'autres applications.)
Maciej Piechotka

1
@OlivierDulac Je pense toujours que l'introduction de blocs peut être déroutante, mais j'ai essayé de l'expliquer. Réponse mise à jour.
Bob

3

Comme cela a déjà été souligné par d'autres réponses, "4K" désigne presque certainement un accès aléatoire par blocs de taille 4 Ko.

Chaque fois qu'un disque dur (et non un disque SSD) est invité à lire ou à écrire des données, deux retards importants interviennent:

  • Recherche de latence, pour que la tête de lecture / écriture "recherche" la piste circulaire (ou le "cylindre") correct sur le plateau, y compris le temps nécessaire à la tête pour se stabiliser sur la piste et se synchroniser avec les données stockées sur le plateau
  • Latence rotationnelle, pour que le plateau en rotation situé sous la tête de lecture / écriture tourne afin que la partie souhaitée de la piste (le "secteur") passe sous la tête

Les deux sont d'une durée relativement constante pour un lecteur donné. La latence de recherche dépend de la rapidité avec laquelle la tête peut être déplacée et de la distance à laquelle elle doit être déplacée, tandis que la latence en rotation dépend de la vitesse à laquelle le plateau tourne. De plus, ils n'ont pas beaucoup changé au cours des dernières décennies. Les fabricants utilisaient en fait des temps de recherche moyens, par exemple dans les publicités; ils ont à peu près cessé de le faire quand il y avait peu ou pas de développement dans la région. Aucun fabricant, surtout dans un environnement très concurrentiel, ne veut que ses produits aient une apparence meilleure que ceux de ses concurrents.

Un disque dur de bureau typique tourne à 7 200 tr / min, alors qu'un disque dur d'ordinateur portable peut tourner à environ 5 000 tr / min. Cela signifie que chaque seconde passe à 120 révolutions (lecteur de bureau) ou environ 83 révolutions (lecteur de portable). Comme le disque doit tourner en moyenne d’un demi-tour avant que le secteur souhaité passe sous la tête, on peut donc s’attendre à ce que le disque puisse traiter environ deux fois plus de demandes d’E / S par seconde, en supposant que

  • soit la recherche est effectuée alors que le disque est en rotation (il s'agit probablement d'une valeur sûre pour les disques durs aujourd'hui où I / O implique une recherche), et la latence de recherche n'est pas supérieure à la latence de rotation d'un I / O particulier
  • ou la tête se trouve déjà sur le bon cylindre, ce qui empêche le lecteur de chercher (cas particulier de ce qui précède, avec une latence de recherche de zéro)

Nous devrions donc pouvoir nous attendre à environ 200 E / S par seconde si les données auxquelles il est demandé d'accéder (en lecture ou en écriture) sont relativement localisées physiquement, la latence rotationnelle étant le facteur limitant. Dans le cas général, on peut s’attendre à ce que le disque puisse fonctionner de l’ordre de 100 E / S par seconde si les données sont réparties sur le ou les plateaux, ce qui nécessite une recherche considérable et fait de la latence de recherche le facteur limitant. . En termes de stockage, il s’agit du " IOPSperformances "du disque dur; ce ne sont pas les performances d'E / S séquentielles, qui constituent généralement le facteur limitant dans les systèmes de stockage du monde réel. réduisez considérablement le temps de latence de la recherche, car le mouvement physique de la tête de lecture / écriture devient une consultation de table dans les tables de couche de mappage flash, qui sont stockées électroniquement.)

Les écritures sont généralement plus lentes quand un vidage du cache est impliqué. Normalement, les systèmes d’exploitation et les disques durs essaient de réorganiser les écritures aléatoires pour transformer les E / S aléatoires en E / S séquentielles, dans la mesure du possible, afin d’améliorer les performances. S'il existe un obstacle explicite au vidage du cache ou à l' écriture du cache , cette optimisation est supprimée dans le but de garantir que l'état des données dans le stockage persistant correspond aux attentes du logiciel. En principe, le même raisonnement s'applique lors de la lecture lorsqu'il n'y a pas de cache disque impliqué, soit parce qu'il n'en existe aucun (ce qui est rare aujourd'hui sur les systèmes de type bureau) ou parce que le logiciel le contourne délibérément (ce qui est souvent le cas lors de la mesure des performances d'E / S). Ces deux solutions réduisent les performances potentielles IOPS maximales à celles du cas le plus pessimiste, soit 120 IOPS pour un lecteur à 7 200 tr / min.

  • À 100 IOPS à 4 Ko par E / S, nous obtenons une performance d'environ 400 Ko / s.
  • À 200 IOPS à 4 Ko par E / S, nous obtenons une performance d'environ 800 Ko / s.

Ce qui correspond exactement à vos chiffres. Les E / S aléatoires avec des blocs de petite taille constituent un facteur de perte de performances absolu pour les disques durs en rotation, raison pour laquelle il s'agit également d'une métrique pertinente.

En ce qui concerne les E / S purement séquentielles, un débit de l'ordre de 150 Mo / s n'est pas déraisonnable pour les disques durs à rotation modernes. Mais très peu d'E / S du monde réel sont strictement séquentielles, de sorte que dans la plupart des situations, les performances d'E / S purement séquentielles deviennent davantage un exercice théorique qu'un indicateur des performances du monde réel.


C’est une excellente réponse, et elle lit tellement mieux que la mienne :) Juste une petite remarque, au moins Seagate spécifie toujours une latence moyenne en matière de recherche de latence dans leurs fiches techniques . WD ne semble pas.
Bob

@ Bob Merci. Je voulais en fait dire dans les publicités et similaires; J'ai édité la réponse pour clarifier cela. Je pense qu'il est prudent de dire que très peu de personnes lisent les fiches techniques, même si cela serait probablement une expérience qui donne à réfléchir pour beaucoup ...
a CVn

2

4K fait référence à une E / S aléatoire . Cela signifie que le disque est invité à accéder à de petits blocs (taille de 4 Ko) en des points aléatoires du fichier de test. C'est une faiblesse des disques durs; la capacité d'accéder aux données à travers différentes régions du disque est limitée par la vitesse à laquelle le disque tourne et par la rapidité avec laquelle les têtes de lecture-écriture peuvent se déplacer. Les E / S séquentielles , où les blocs consécutifs sont accédés, sont beaucoup plus faciles car le lecteur peut simplement lire ou écrire les blocs lorsque le disque tourne.

Un lecteur SSD n’a pas de problème avec les E / S aléatoires, il suffit de rechercher où les données sont stockées dans la mémoire sous-jacente (généralement, la mémoire flash NAND, 3D XPoint ou même la DRAM) et la lecture. ou écrivez les données à l'emplacement approprié. Les disques SSD sont entièrement électroniques et n'ont pas besoin d'attendre sur un disque en rotation ou une tête de lecture-écriture en mouvement pour accéder aux données, ce qui les rend beaucoup plus rapides que les disques durs à cet égard. C'est pour cette raison que la mise à niveau vers un SSD augmente considérablement les performances du système.

Remarque secondaire: les performances d'E / S séquentielles sur un SSD sont souvent beaucoup plus élevées que sur un disque dur. Un SSD typique comporte plusieurs puces NAND connectées en parallèle au contrôleur de mémoire flash et peut y accéder simultanément. En répartissant les données sur ces puces, on obtient une configuration de lecteur similaire à RAID 0, ce qui augmente considérablement les performances. (Notez que de nombreux nouveaux disques, en particulier les moins chers, utilisent un type de NAND appelé TLC NAND, qui est généralement lent lors de l’écriture des données. ralentir considérablement une fois que le tampon est plein.)


IIRC, certains disques SSD NVMe utilisent même un cache DRAM.
Timuzhti

1
La plupart le font. Les SSD Dramless sont un peu bas.
Journeyman Geek
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.