Si vous voulez de la précision, vous devez utiliser fio
. Il faut lire le 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 voulez mesurer. Quelques exemples :
Vitesse de lecture séquentielle avec de gros blocs (ce chiffre doit être proche de celui indiqué dans les spécifications de votre lecteur) :
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 (ce chiffre doit être proche de celui indiqué 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 chiffre qui compte vraiment pour les performances réelles, à moins que vous ne soyez sûr de mieux) :
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 chiffre le plus défavorable que vous pouvez attendre de votre disque, 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
Augmenter le --size
pour augmenter la taille du fichier. L'utilisation de fichiers plus grands peut réduire les chiffres 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 grand pour presque remplir le disque vous donnera le pire comportement 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 de l'image de l'unité de mesure de l'humidité est trop importante. fichier n'est pas aussi important que nombre total d'octets écrits pendant une courte période . Par exemple, certains SSD ont des performances beaucoup plus rapides avec des blocs pré-effacés ou ils peuvent avoir une petite zone de flash SLC qui est utilisée comme cache d'écriture et les performances changent une fois que le cache SLC est plein (par exemple, la série Samsung EVO qui a un cache SLC de 20-50 Go). Autre exemple, les disques durs Seagate SMR disposent d'une zone de cache PMR d'environ 20 Go dont les performances sont assez élevées, mais une fois qu'elle est pleine, l'écriture directe dans la zone SMR peut réduire les performances à 10 % par rapport à l'original. Et la seule façon de voir cette dégradation des performances est d'écrire d'abord 20+ Go aussi vite que possible et de continuer avec le test réel immédiatement après. Bien sûr, tout dépend de votre charge de travail : si vos accès en écriture sont en rafale avec des délais assez longs qui permettent au dispositif de nettoyer le cache interne, des séquences de test plus courtes refléteront mieux vos performances réelles. Si vous avez besoin de faire beaucoup d'entrées/sorties, vous devez augmenter à la fois la durée de vie du test et la durée de vie de la séquence. --io_size
y --runtime
paramètres. Notez que certains supports (par exemple, la plupart des bon marché ) souffriront de ces tests car les puces flash sont suffisamment pauvres pour s'user très rapidement. À mon avis, si un dispositif est suffisamment médiocre pour ne pas supporter ce type de test, il ne devrait pas être utilisé pour contenir des données de valeur dans tous les cas. Cela dit, ne répétez pas des tests d'écriture importants des milliers de fois car toutes les cellules flash auront un certain niveau d'usure avec l'écriture.
En outre, certains dispositifs SSD de haute qualité peuvent avoir des algorithmes d'usure encore plus intelligents où le cache SLC interne a suffisamment d'intelligence pour remplacer les données sur place si elles sont réécrites alors qu'elles sont encore dans le cache SLC. Pour ces dispositifs, si le fichier de test est plus petit que le cache SLC total du dispositif, le test complet écrit toujours dans le cache SLC uniquement et vous obtenez des performances supérieures à celles que le dispositif peut supporter pour des écritures plus importantes. Ainsi, pour ces périphériques, la taille du fichier recommence à avoir de l'importance. Si vous connaissez votre charge de travail réelle, il est préférable de tester avec les tailles de fichiers que vous verrez dans la vie réelle. Si vous ne connaissez pas la charge de travail prévue, l'utilisation d'une taille de fichier de test qui remplit environ 50 % du périphérique de stockage devrait donner un bon résultat moyen pour toutes les implémentations de stockage. Bien sûr, pour une configuration RAID de 50 To, effectuer un test d'écriture avec un fichier de test de 25 To prendra pas mal de temps !
Notez que fio
créera le fichier temporaire requis lors de la première exécution. Il sera rempli de données pseudo-aléatoires afin d'éviter d'obtenir de trop bons chiffres de la part d'appareils qui essaient de tricher dans les benchmarks en compressant les données avant de les écrire sur le 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 changer le répertoire qui est monté sur le périphérique que vous voulez tester. Le site fio
supporte également l'utilisation d'un support direct comme cible de test, mais je vous conseille vivement de lire la page de manuel avant d'essayer car une faute de frappe peut écraser tout votre système d'exploitation lorsque l'on utilise l'accès direct au support de stockage (par exemple, écrire accidentellement sur le périphérique de l'OS au lieu du périphérique de test).
Si vous avez un bon SSD et que vous voulez voir des chiffres encore plus élevés, augmentez --numjobs
ci-dessus. Cela définit la concurrence pour les lectures et les écritures. Les exemples ci-dessus ont tous numjobs
réglé sur 1
Le test porte donc sur la lecture et l'écriture par un processus monotâche (éventuellement avec la profondeur de la file d'attente ou QD réglée sur iodepth
). Les SSD haut de gamme (par exemple Intel Optane 905p) devraient obtenir des chiffres élevés même sans augmenter numjobs
beaucoup (par exemple 4
devrait suffire pour obtenir les spécifications les plus élevées), mais certains SSD "Enterprise" nécessitent de passer à la gamme 32
- 128
pour obtenir les chiffres des spécifications, car la latence interne de ces dispositifs est plus élevée, mais le débit global est fou. Notez que l'augmentation numbjobs
à des valeurs élevées augmente généralement performance de référence mais reflète rarement les performances du monde réel.
2 votes
Une question similaire a été posée sur unix.stackexchange.com/questions/108838/ , stackoverflow.com/questions/1198691/ y serverfault.com/questions/219739/ .