Linux vérifie la vitesse du disque. Comment mesurer la vitesse du disque dur

Original : Testez la vitesse de lecture/écriture des lecteurs USB et SSD avec la commande dd sous Linux
Auteur : Lune d'argent
Date de publication : 12 juillet 2014
Traduction : N.Romodanov
Date de transfert : octobre 2014

Vitesse de l'appareil

La vitesse d'un appareil est mesurée en unités de quantité de données qu'il peut lire ou écrire par unité de temps. La commande dd est un simple outil de ligne de commande qui peut être utilisé pour lire et écrire des blocs de données arbitraires sur un disque et mesurer la vitesse à laquelle un transfert de données s'est produit.

Dans cet article, nous utiliserons la commande dd pour vérifier la vitesse de lecture et d'écriture des périphériques usb et ssd.

La vitesse de transfert des données dépend non seulement du disque, mais également de l'interface via laquelle il est connecté. Par exemple, le port USB 2.0 a une limite de vitesse fonctionnelle maximale de 35 Mo/s, donc même si vous branchez une clé USB 3 haute vitesse sur le port USB 2, la vitesse sera limitée à une valeur inférieure.

Il en va de même pour le périphérique SSD. Le périphérique SSD est connecté via des ports SATA, qui ont différentes versions. Sata 2.0 a une limite de vitesse théorique maximale de 3 Gbit/s, soit environ 375 Mo/s. Alors que SATA 3.0 prend en charge deux fois la vitesse.

Méthode d'essai

Montez le lecteur et accédez-y à partir d'une fenêtre de terminal. Utilisez ensuite la commande dd pour commencer par écrire le fichier, qui se compose de blocs de taille fixe. Ensuite, lisez le même fichier en utilisant la même taille de bloc.

La syntaxe générale de la commande dd est la suivante

Dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks

Lors de l'écriture sur disque, nous lisons simplement à partir de /dev/zero, qui est la source d'un nombre infini d'octets. Lors de la lecture à partir du disque, nous lisons le fichier précédemment écrit et l'envoyons à /dev/null, qui n'existe pas vraiment. Tout au long du processus, la commande dd surveille et signale la vitesse à laquelle le transfert se produit.

Périphérique SSD

Le périphérique SSD que nous utilisons est un lecteur SSD "Samsung Evo 120 Go". Il s'agit d'un périphérique ssd d'entrée de gamme lié au budget et aussi de mon premier disque SSD. C'est aussi l'un des SSD les plus performants du marché.

Dans ce test, le lecteur ssd est connecté à un port sata 2.0.

Vitesse d'enregistrement

Commençons par enregistrer sur ssd

$ dd if=/dev/zero of=./largefile bs=1M count=1024 1024+0 enregistrements en entrée 1024+0 enregistrements en sortie 1073741824 octets (1,1 Go) copiés, 4,82364 s, 223 Mo/s

La taille du bloc est en fait assez grande. Vous pouvez essayer d'utiliser une taille plus petite comme 64k ou même 4k.

Vitesse de lecture

Maintenant, au contraire, lisez le même fichier. Mais effacez d'abord le cache de la mémoire pour vous assurer que le fichier est réellement lu à partir du disque.

Pour vider le cache mémoire, exécutez la commande suivante

$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

Lisez maintenant le fichier

$ dd if=./largefile of=/dev/null bs=4k 165118+0 enregistrements entrants 165118+0 enregistrements sortants 676323328 octets (676 Mo) copiés, 3,0114 s, 225 Mo/s

périphérique USB

Dans ce test, nous allons mesurer la vitesse de lecture des clés USB ordinaires. Les appareils se connectent aux ports USB standard 2. Le premier appareil est une clé USB Sony de 4 Go et le second est un strontium de 16 Go.

Connectez d'abord l'appareil et montez-le de manière à ce qu'il soit lisible. Ensuite, à partir de la ligne de commande, accédez au répertoire monté.

Appareil Sony 4 Go - enregistrement

Dans ce test, la commande dd est utilisée pour écrire 10 000 données de 8 Ko chacune dans un seul fichier sur disque.

# dd if=/dev/zero of=./largefile bs=8k count=10000 10000+0 enregistrements dans 10000+0 enregistrements en sortie 81920000 octets (82 Mo) copiés, 11,0626 s, 7,4 Mo/s

La vitesse d'écriture est d'environ 7,5 Mo/s. C'est un chiffre peu élevé.

Appareil Sony 4 Go - lecture

Le même fichier est lu pour tester la vitesse de lecture. Pour vider le cache mémoire, exécutez la commande suivante

$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

Maintenant, lisez le fichier avec la commande dd

# dd if=./largefile of=/dev/null bs=8k 8000+0 enregistrements dans 8000+0 enregistrements en sortie 65536000 octets (66 Mo) copiés, 2,65218 s, 24,7 Mo/s

La vitesse de lecture est d'environ 25 Mo/s, ce qui est plus ou moins standard pour les clés USB bon marché.

L'USB 2.0 a un taux de signalisation maximum théorique de 480 Mbps ou 60 Mbps. Mais en raison de diverses limitations, le débit maximal est limité à environ 280 Mbps ou 35 Mbps. De plus, la vitesse réelle dépend de la qualité du lecteur flash, ainsi que d'autres facteurs.

Et depuis ce qui précède périphérique USB a été connecté à un port USB 2.0 et une vitesse de lecture de 24,7 Mo/s a été atteinte, ce qui n'est pas trop mal. Mais la vitesse d'écriture est loin derrière.

Faisons maintenant le même test avec une clé Strontium 16 Go. Strontium est une autre marque qui fabrique des clés USB très bon marché, mais ces clés sont fiables.

Vitesse d'écriture pour l'appareil Strontium 16 Go

# dd if=/dev/zero of=./largefile bs=64k count=1000 1000+0 enregistrements dans 1000+0 enregistrements en sortie 65536000 octets (66 Mo) copiés, 8,3834 s, 7,8 Mo/s

Vitesse de lecture pour l'appareil Strontium 16 Go

# sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches" # dd if=./largefile of=/dev/null bs=8k 8000+0 enregistrements en 8000+0 enregistrements en sortie 65536000 octets (66 Mo) copié, 2,90366 s, 22,6 Mo/s

La vitesse de lecture des données est plus lente que celle de l'appareil Sony.

Pour déterminer la vitesse d'écriture du disque, vous devez exécuter la commande suivante dans la console :

synchroniser ; dd if=/dev/zero of=fichiertemp bs=1M count=1024; synchroniser

La commande écrit un fichier temporaire de 1 Mo de taille 1024 fois et le résultat de son travail sera la sortie de ces données

1024+0 enregistrements reçus 1024+0 enregistrements envoyés copiés 1073741824 octets (1,1 Go), 15,4992 s, 69,3 Mo/s

Pour déterminer la vitesse de lecture du disque, vous devez exécuter la commande suivante dans la console :

Le fichier temporaire qui a été généré par la commande précédente est mis en cache dans le tampon, ce qui augmentera sa vitesse de lecture par lui-même et il sera beaucoup plus élevé que la vitesse de lecture réelle directement à partir du disque dur lui-même. Afin d'obtenir une vitesse réelle, vous devez d'abord vider ce cache.

Pour déterminer la vitesse de lecture d'un disque à partir d'un tampon, vous devez exécuter la commande suivante dans la console :

Dd if=tempfile of=/dev/null bs=1M count=1024

Sortie de la commande précédente :

1024+0 enregistrements reçus 1024+0 enregistrements envoyés copiés 1073741824 octets (1,1 Go), 15,446 s, 69,5 Mo/s

Pour mesurer la vitesse de lecture réelle du disque, effacez le cache :

sudo /sbin/sysctl -w vm.drop_caches=3

Sortie de commande :

vm.drop_caches = 3

Nous effectuons un test de vitesse de lecture après avoir vidé le cache :

Dd if=tempfile of=/dev/null bs=1M count=1024 1024+0 enregistrements reçus 1024+0 enregistrements envoyés copiés 1073741824 octets (1,1 Go), 16,5786 s, 64,8 Mo/s

Effectuer un test de vitesse de lecture/écriture sur un disque externe

Pour tester la vitesse de tout disque dur externe, clé USB ou autre support amovible ou système de fichiers d'une machine distante (vps/vds), vous devez vous rendre au point de montage et exécuter les commandes ci-dessus.

Ou, à la place de tempfile, vous pouvez bien sûr écrire le chemin vers le point de montage, comme suit :

synchroniser ; dd if=/dev/zero of=/media/user/USBFlash/tempfile bs=1M count=1024; synchroniser

Vous devez également spécifier que les commandes ci-dessus utilisent le fichier temporaire tempfile. N'oubliez pas de le supprimer une fois les tests terminés.

Test de vitesse du disque dur à l'aide de l'utilitaire hdparm

hdparm est utilitaire Linux, qui vous permet de connaître rapidement la vitesse de lecture de votre disque dur.

Pour commencer à mesurer la vitesse de lecture de votre disque dur, vous devez exécuter la commande suivante dans la console :

sudo hdparm -Tt /dev/sda

Sortie de commande dans la console :

/dev/sda : lectures en cache de synchronisation : 6 630 Mo en 2,00 secondes = 3 315,66 Mo/s

C'est tout. Ainsi, nous avons pu connaître les performances de notre disque dur et donner une estimation approximative de ses capacités.

Il nécessite la lecture du manuel (man fio) mais il vous donnera des résultats précis. Notez que pour toute précision, vous devez spécifier exactement ce que vous souhaitez mesurer. Quelques exemples:

Vitesse de lecture séquentielle avec de gros blocs

Fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync= 10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Vitesse d'écriture séquentielle avec de gros blocs(cela devrait être proche du nombre que vous voyez dans les spécifications de votre lecteur):

Fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync= 10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Lecture aléatoire 4K QD1(c'est le nombre qui compte vraiment pour les performances dans le monde réel, sauf si vous savez mieux à coup sûr):

Fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync= 1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Lecture et écriture aléatoires mixtes 4K QD1 avec synchronisation(il s'agit du pire chiffre auquel vous devriez vous attendre de votre lecteur, généralement moins de 1 % des chiffres indiqués dans la fiche technique) :

Fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync= 1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Augmentez l'argument --size pour augmenter la taille du fichier. L'utilisation de fichiers plus volumineux peut réduire les nombres que vous obtenez en fonction de la technologie du lecteur et du micrologiciel. Les petits fichiers donneront de "trop ​​bons" résultats pour les supports rotatifs car la tête de lecture n'a pas besoin de se déplacer autant. Si votre appareil est presque vide, l'utilisation d'un fichier suffisamment volumineux pour presque remplir le lecteur vous donnera le comportement le plus défavorable pour chaque test. Dans le cas d'un SSD, la taille du fichier n'a pas beaucoup d'importance.

Cependant, notez que pour certains supports de stockage, la taille du fichier n'est pas aussi importante que le nombre total d'octets écrits pendant une courte période. Par exemple, certains disques SSD peuvent avoir des performances nettement plus rapides avec des blocs pré-effacés ou ils peuvent avoir une petite zone flash SLC qui est utilisée comme cache d'écriture et les performances changent une fois que le cache SLC est plein. Autre exemple, les disques durs Seagate SMR ont environ Zone de cache PMR de 20 Go qui offre des performances assez élevées, mais une fois qu'elle est pleine, l'écriture directe dans la zone SMR peut réduire les performances de 10 % par rapport à l'original. Bien sûr, tout dépend de votre charge de travail : si votre accès en écriture est rafale avec des retards assez longs qui permettent à l'appareil de nettoyer le cache interne, des séquences de test plus courtes refléteront mieux vos performances dans le monde réel. IO, vous devez augmenter à la fois les paramètres --io_size et --runtime.Notez que certains médias (par exemple, la plupart des périphériques flash ) obtiendra une usure supplémentaire de tels tests. À mon avis, si un appareil est suffisamment pauvre pour ne pas gérer ce type de test, il ne doit en aucun cas être utilisé pour conserver des données précieuses.

De plus, certains périphériques SSD de haute qualité peuvent avoir des algorithmes de nivellement d'usure encore plus intelligents où le cache SLC interne a suffisamment d'intelligence pour remplacer les données en place qui sont réécrites pendant le test si elles atteignent le même espace d'adressage (c'est-à-dire, le fichier de test est inférieur au cache SLC total). Pour de tels appareils, la taille du fichier recommence à avoir de l'importance. Si vous avez besoin de votre charge de travail réelle, il est préférable de tester avec des tailles de fichiers que vous verrez réellement dans la vie réelle. Sinon, vos chiffres peuvent sembler trop bons.

Notez que fio créera le fichier temporaire requis lors de la première exécution. Il sera rempli de données aléatoires pour éviter d'obtenir de trop bons nombres d'appareils qui trichent en compressant les données avant de les écrire dans un stockage permanent. Le fichier temporaire sera appelé fio-tempfile.dat dans les exemples ci-dessus et stocké dans le répertoire de travail actuel. Vous devez donc d'abord passer au répertoire monté sur l'appareil que vous souhaitez tester.

Si vous avez un bon SSD et que vous voulez voir des nombres encore plus élevés, augmentez --numjobs ci-dessus. Cela définit la simultanéité des lectures et des écritures. Les exemples ci-dessus ont tous des numjobs définis sur 1, de sorte que le test concerne la lecture et l'écriture d'un processus à un seul thread (éventuellement avec une file d'attente définie avec iodepth). Les SSD haut de gamme (par exemple, Intel Optane) devraient obtenir des nombres élevés même sans augmenter beaucoup les numjobs (par exemple, 4 devrait suffire pour obtenir les numéros de spécification les plus élevés), mais certains SSD "Enterprise" nécessitent d'aller à 32 - 128 pour obtenir les numéros de spécification car le la latence interne de ces appareils est plus élevée, mais le débit global est insensé.

mob_info