L'évaluation des performances de votre stockage par blocs vous permet de comprendre ses capacités et de l'optimiser pour obtenir les meilleures performances. Le test d'un disque brut fournit les métriques de performance les plus précises. Cette rubrique explique comment utiliser l'outil open source Fio sur un système Linux pour évaluer les principales métriques de performance d'un disque brut, notamment les IOPS, le débit et la latence.
Fio (Flexible I/O Tester) est un puissant outil de test d'E/S open source, utilisé pour évaluer les périphériques de stockage avec diverses charges de travail, telles que les lectures et écritures aléatoires ou séquentielles.
Procédure
Le test d'un disque brut fournit les résultats de performance du stockage par blocs les plus précis. Toutefois, l'exécution directe de Fio sur un périphérique de stockage par blocs contenant des partitions, un système de fichiers ou d'autres données entraînera des erreurs de système de fichiers et une perte de données. Avant de commencer, créez un snapshot pour sauvegarder vos données. Pour plus d'informations, consultez Créer manuellement un snapshot.
Nous vous recommandons vivement de ne pas tester le disque système ni un disque de données contenant des données afin d'éviter toute perte de données. Pour les tests, nous vous conseillons d'utiliser un disque de données nouvellement créé, non initialisé et vide.
Les résultats des tests de performance sont obtenus dans un environnement de test et sont fournis à titre indicatif uniquement. Dans un environnement de production, les performances d'un cloud disk peuvent varier en raison de facteurs tels que les conditions réseau et l'accès concurrent. Les performances réelles seront différentes.
-
Une fois le test terminé, gérez le nouveau cloud disk comme suit :
Si vous souhaitez conserver le disque : ne l'utilisez pas directement. Vous devez réinitialiser le disque de données.
Si vous n'avez plus besoin du disque : Détachez le disque de données puis libérez le cloud disk.
Cette rubrique utilise l'image publique Alibaba Cloud Linux 3.2104 LTS 64 bits comme exemple. Les étapes peuvent varier selon votre système d'exploitation.
-
Connectez-vous à une instance ECS.
Pour plus d'informations, consultez Se connecter à une instance Linux à l'aide de Workbench.
-
Exécutez la commande suivante pour trouver les noms de périphérique de votre stockage par blocs.
sudo fdisk -luDans la sortie de la commande, /dev/vda correspond au disque système, tandis que /dev/vdb et /dev/vdc sont des disques de données. /dev/vdc ne possède pas de partition.
[ecs-a ]$ sudo fdisk -lu Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: F51132A7-67B1-4650-806D-FD0DE6E1210C Device Start End Sectors Size Type /dev/vda1 2048 6143 4096 2M BIOS boot /dev/vda2 6144 415743 409600 200M EFI System /dev/vda3 415744 83886046 83470303 39.8G Linux filesystem Disk /dev/vdb: 30 GiB, 32212254720 bytes, 62914560 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: C36DF120-8650-4188-8043-AEF9C85F31EF Device Start End Sectors Size Type /dev/vdb1 2048 62912511 62910464 30G Linux filesystem Disk /dev/vdc: 40 GiB, 42949672960 bytes, 83886080 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytesComme indiqué dans la sortie de la commande, l'instance dispose de trois périphériques de stockage par blocs : le disque système /dev/vda, ainsi que les disques de données /dev/vdb et /dev/vdc.
-
Exécutez la commande suivante pour vérifier si les périphériques de stockage par blocs comportent des partitions ou un système de fichiers.
sudo blkid[ecs-a ]$ sudo blkid /dev/vdb1: UUID="9c32c24f-d2b8-4aa8-8" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="4bd66635-f5f4-4dc0-9bdd-664fd5b8d2fb" /dev/vda2: SEC_TYPE="msdos" UUID="7E" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="82a50cd6-9899-41eb-91fe-7027bf257086" /dev/vda3: LABEL="root" UUID="beef9d8d-ba84-46d9-8" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="e0d4fa20-912d-4e86-943e-6b0368xxxxxx" /dev/vda1: PARTUUID="d083a7cd-a7ea-4898-89d5-8e1510bed584"La sortie indique que les périphériques /dev/vda et /dev/vdb possèdent des partitions et des systèmes de fichiers. Aucune information concernant /dev/vdc n'est renvoyée, ce qui signifie que /dev/vdc ne comporte ni partition ni système de fichiers.
AvertissementSi un périphérique que vous souhaitez tester contient des partitions, un système de fichiers ou des données, l'exécution directe de Fio sur ce périphérique entraînera des erreurs de système de fichiers et une perte de données. Si votre disque de données contient des partitions et un système de fichiers, nous vous recommandons de créer un nouveau disque de données vide pour les tests.
Vous pouvez créer un cloud disk en paiement à l'utilisation avec les mêmes configurations et le joindre à l'instance pour les tests. Pour plus d'informations, consultez Créer un disque de données.
Une fois le test terminé, vous pouvez libérer l'instance selon vos besoins. Pour plus d'informations, consultez Libérer une instance.
-
Avant d'évaluer les performances du stockage par blocs, sauvegardez les données du périphérique que vous prévoyez de tester afin d'éviter toute perte de données. Pour plus d'informations, consultez Créer manuellement un snapshot.
RemarqueL'utilisation des snapshots est facturée. Pour plus d'informations, consultez Facturation des snapshots.
-
Exécutez la commande suivante pour installer la bibliothèque libaio et l'outil Fio. Choisissez la commande en fonction de votre système d'exploitation.
Alibaba Cloud Linux 2/3, CentOS 6 et versions ultérieures
RemarqueCentOS 6 a atteint sa fin de vie (EOL). Conformément aux règles de la communauté Linux, tout le contenu a été supprimé de l'adresse du dépôt CentOS 6 suivante : http://mirror.centos.org/centos-6/. Si vous continuez à utiliser le dépôt CentOS 6 par défaut sur Alibaba Cloud, une erreur sera signalée. Pour utiliser des packages d'installation spécifiques de CentOS 6, modifiez l'adresse du dépôt CentOS 6. Pour plus d'informations, consultez Comment modifier les adresses des dépôts CentOS 6 ?
sudo yum install libaio libaio-devel fio -yDebian 9 et versions ultérieures, Ubuntu 14 et versions ultérieures
ImportantDebian 9 et Debian 10 ont atteint leur fin de vie (EOL). Si votre instance ECS exécute Debian 9 ou Debian 10, commencez par modifier l'adresse du dépôt. Pour plus d'informations, consultez Modifier les adresses des dépôts pour CentOS et Debian après la fin de vie.
sudo apt-get update sudo apt-get install libaio* fio -y -
Accédez au répertoire /tmp.
cd /tmp -
Exécutez une commande de test de performance. Pour les commandes spécifiques, reportez-vous aux sections suivantes.
Pour les cloud disks, consultez Commandes de test de performance des cloud disks.
Pour les disques locaux, consultez Commandes de test de performance des disques locaux.
Consultez les résultats du test. Les valeurs peuvent varier selon le cloud disk. Les valeurs indiquées dans les blocs de code suivants sont fournies à titre indicatif uniquement.
-
Pour les résultats de test liés aux IOPS, reportez-vous au champ
IOPS=***. L'exemple de sortie Fio suivant présente les résultats d'un test d'écriture aléatoire (Rand_Write). Dans la ligne write, IOPS=2301 constitue la métrique de performance clé pour les écritures aléatoires :Starting 1 process Jobs: 1 (f=0): [f(1)][100.0%][w=9061KiB/s][w=2265 IOPS][eta 00m:00s] Rand_Write Testing: (groupid=0, jobs=1): err= 0: pid=15900: Tue Nov 19 11:28:24 2024 write: IOPS=2301, BW=9206KiB/s (9427kB/s)(1024MiB/113896msec); 0 zone resets slat (usec): min=2, max=1718, avg= 5.43, stdev= 7.98 clat (usec): min=382, max=119809, avg=55606.05, stdev=7040.12 lat (usec): min=394, max=119812, avg=55611.49, stdev=7039.41 clat percentiles (msec): | 1.00th=[ 9], 5.00th=[ 51], 10.00th=[ 51], 20.00th=[ 51], | 30.00th=[ 51], 40.00th=[ 57], 50.00th=[ 60], 60.00th=[ 61], | 70.00th=[ 61], 80.00th=[ 61], 90.00th=[ 61], 95.00th=[ 61], | 99.00th=[ 63], 99.50th=[ 65], 99.90th=[ 67], 99.95th=[ 77], | 99.99th=[ 101] bw ( KiB/s): min= 9000, max=28976, per=100.00%, avg=9213.14, stdev=1317.97, samples=227 iops : min= 2250, max= 7244, avg=2303.28, stdev=329.49, samples=227 lat (usec) : 500=0.01%, 750=0.01%, 1000=0.01% lat (msec) : 2=0.03%, 4=0.45%, 10=0.52%, 20=0.04%, 50=0.82% lat (msec) : 100=98.11%, 250=0.01% -
Pour les résultats de test liés au débit, reportez-vous au champ
BW=***, comme illustré dans la sortie suivante :Jobs: 1 (f=1): [W(1)][100.0%][w=85.0MiB/s][w=85 IOPS][eta 00m:00s] Write_PPS_Testing: (groupid=0, jobs=1): err= 0: pid=17934: Tue Nov 19 11:32:19 2024 write: IOPS=124, BW=124MiB/s (130MB/s)(1024MiB/8229msec); 0 zone resets slat (usec): min=27, max=4026, avg=94.51, stdev=125.97 clat (msec): min=4, max=1154, avg=513.48, stdev=208.14 lat (msec): min=4, max=1154, avg=513.57, stdev=208.15 clat percentiles (msec): | 1.00th=[ 17], 5.00th=[ 75], 10.00th=[ 93], 20.00th=[ 567], | 30.00th=[ 584], 40.00th=[ 584], 50.00th=[ 584], 60.00th=[ 584], | 70.00th=[ 584], 80.00th=[ 584], 90.00th=[ 592], 95.00th=[ 693], | 99.00th=[ 1062], 99.50th=[ 1099], 99.90th=[ 1133], 99.95th=[ 1150], | 99.99th=[ 1150] bw ( KiB/s): min=30720, max=356352, per=96.43%, avg=122881.25, stdev=65548.59, samples=16 iops : min= 30, max= 348, avg=120.00, stdev=64.01, samples=16 lat (msec) : 10=0.49%, 20=0.68%, 50=2.15%, 100=10.74%, 250=1.86% lat (msec) : 500=3.22%, 750=76.46%, 1000=2.73%, 2000=1.66% cpu : usr=0.89%, sys=0.45%, ctx=1025, majf=0, minf=10 IO depths : 1=0.1%, 2=0.2%, 4=0.4%, 8=0.8%, 16=1.6%, 32=3.1%, >=64=93.8% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=99.9%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0% issued rwts: total=0 1024 0 0 short=0 0 0 0 dropped=0 0 0 0 -
Pour les résultats de test liés à la latence, reportez-vous au champ lat (usec). Dans la ligne de statistiques de latence totale
lat (usec): min=254, max=169188, avg=432.25, stdev=487.95, la latence moyenne est d'environ 432 microsecondes.Jobs: 1 (f=1): [w(1)][100.0%][w=9169KiB/s][w=2292 IOPS][eta 00m:00s] Rand_Write_Latency_Testing: (groupid=0, jobs=1): err= 0: pid=19530: Tue Nov 19 11:38:31 2024 write: IOPS=2301, BW=9206KiB/s (9427kB/s)(1024MiB/113903msec); 0 zone resets slat (usec): min=2, max=19160, avg= 8.68, stdev=40.53 clat (usec): min=3, max=169175, avg=423.57, stdev=486.23 lat (usec): min=254, max=169188, avg=432.25, stdev=487.95 clat percentiles (usec): | 1.00th=[ 334], 5.00th=[ 343], 10.00th=[ 347], 20.00th=[ 351], | 30.00th=[ 355], 40.00th=[ 359], 50.00th=[ 367], 60.00th=[ 371], | 70.00th=[ 379], 80.00th=[ 396], 90.00th=[ 465], 95.00th=[ 562], | 99.00th=[ 1614], 99.50th=[ 2671], 99.90th=[ 5735], 99.95th=[ 6194], | 99.99th=[ 7439] bw ( KiB/s): min= 5840, max=10416, per=100.00%, avg=9211.26, stdev=495.72, samples=227 iops : min= 1460, max= 2604, avg=2302.80, stdev=123.94, samples=227 lat (usec) : 4=0.01%, 10=0.01%, 50=0.01%, 100=0.01%, 250=0.01% lat (usec) : 500=93.01%, 750=4.06%, 1000=0.97% lat (msec) : 2=1.23%, 4=0.42%, 10=0.30%, 20=0.01%, 50=0.01% lat (msec) : 250=0.01% cpu : usr=0.84%, sys=3.00%, ctx=262469, majf=0, minf=10
Commandes de test de performance des cloud disks
Si un périphérique que vous souhaitez tester contient des partitions, un système de fichiers ou des données, l'exécution directe de Fio sur ce périphérique entraînera des erreurs de système de fichiers et une perte de données. Si votre disque de données contient des partitions et un système de fichiers, nous vous recommandons de créer un nouveau disque de données vide pour les tests.
Vous pouvez créer un cloud disk en paiement à l'utilisation avec les mêmes configurations et le joindre à l'instance pour les tests. Pour plus d'informations, consultez Créer un disque de données.
-
Une fois le test terminé :
Pour conserver le disque, réinitialisez le disque de données.
Si vous n'avez plus besoin du disque, détachez-le puis libérez le cloud disk.
Les valeurs des paramètres dans les commandes suivantes sont fournies à titre indicatif uniquement. Remplacez /dev/your_device par le nom du périphérique de stockage par blocs identifié à l'étape 2. Par exemple, si le nom du périphérique du cloud disk à tester est /dev/vdb, vous devez remplacer /dev/your_device par /dev/vdb dans les commandes. Pour plus d'informations sur les paramètres Fio, consultez Paramètres Fio.
-
Testez les IOPS d'écriture aléatoire d'un cloud disk :
sudo fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Write_Testing -
Testez les IOPS de lecture aléatoire d'un cloud disk :
sudo fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Read_Testing -
Testez le débit d'écriture séquentielle d'un cloud disk :
sudo fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Write_PPS_Testing -
Testez le débit de lecture séquentielle d'un cloud disk :
sudo fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Read_PPS_Testing -
Testez la latence d'écriture aléatoire d'un cloud disk :
sudo fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/your_device -name=Rand_Write_Latency_Testing -
Testez la latence de lecture aléatoire d'un cloud disk :
sudo fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/your_device -name=Rand_Read_Latency_Testing
Pour des instructions détaillées sur la façon de tester des types spécifiques de cloud disks, consultez Évaluer les performances IOPS d'un ESSD.
Commandes de test de performance des disques locaux
Si un périphérique que vous souhaitez tester contient des partitions, un système de fichiers ou des données, l'exécution directe de Fio sur ce périphérique entraînera des erreurs de système de fichiers et une perte de données. Si votre disque de données contient des partitions et un système de fichiers, nous vous recommandons de créer une nouvelle instance avec des disques locaux pour les tests.
Les disques locaux ne peuvent être créés que lors de la création d'une instance. Pour exécuter le test, créez une nouvelle instance avec les mêmes configurations. Pour plus d'informations, consultez Créer une instance à l'aide de l'assistant.
Une fois le test terminé, libérez l'instance si vous n'en avez plus besoin.
Les commandes de test suivantes s'appliquent aux disques locaux NVMe SSD et SATA HDD. Les valeurs des paramètres dans les commandes suivantes sont fournies à titre indicatif uniquement. Remplacez /dev/your_device par le nom du périphérique de stockage par blocs identifié à l'étape 2. Par exemple, si le nom du périphérique du disque local à tester est /dev/vdb, vous devez remplacer /dev/your_device par /dev/vdb dans les commandes. Pour plus d'informations sur les paramètres Fio, consultez Paramètres Fio.
-
Testez les IOPS d'écriture aléatoire d'un disque local :
sudo fio -direct=1 -iodepth=32 -rw=randwrite -ioengine=libaio -bs=4k -numjobs=4 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Testez les IOPS de lecture aléatoire d'un disque local :
sudo fio -direct=1 -iodepth=32 -rw=randread -ioengine=libaio -bs=4k -numjobs=4 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Testez le débit d'écriture séquentielle d'un disque local :
sudo fio -direct=1 -iodepth=128 -rw=write -ioengine=libaio -bs=128k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Testez le débit de lecture séquentielle d'un disque local :
sudo fio -direct=1 -iodepth=128 -rw=read -ioengine=libaio -bs=128k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Testez la latence d'écriture aléatoire d'un disque local :
sudo fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Testez la latence de lecture aléatoire d'un disque local :
sudo fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Testez la latence d'écriture séquentielle d'un disque local :
sudo fio -direct=1 -iodepth=1 -rw=write -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Testez la latence de lecture séquentielle d'un disque local :
sudo fio -direct=1 -iodepth=1 -rw=read -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
Paramètres Fio
Le tableau suivant décrit les paramètres Fio utilisés dans les commandes de test.
Paramètre | Description |
direct | Indique s'il faut utiliser les E/S directes. Valeur par défaut : 1.
|
iodepth | La profondeur de la file d'attente d'E/S pour le test. Par exemple, |
rw | La politique de lecture/écriture pour le test. Les valeurs valides incluent :
|
ioengine | Le moteur d'E/S que Fio utilise pour le test. |
bs | La taille de bloc pour chaque unité d'E/S. Valeur par défaut : 4 Kio. Vous pouvez spécifier des valeurs distinctes pour les opérations de lecture et d'écriture au format |
size | La taille du fichier de test. Fio lit ou écrit la quantité de données spécifiée, puis s'arrête, sauf si cela est limité par d'autres options telles que |
numjobs | Le nombre de threads simultanés pour le test. Valeur par défaut : 1. |
runtime | La durée du test en secondes. Si ce paramètre n'est pas spécifié, FIO termine les opérations de lecture/écriture sur un fichier de la taille spécifiée par size en utilisant des blocs d'E/S de la taille spécifiée par bs. |
group_reporting | Le mode d'affichage des résultats de test. S'il est spécifié, agrège les résultats par groupe plutôt que par tâche. |
filename | Le chemin vers la cible de test, qui peut être un nom de périphérique ou un chemin de fichier. Dans cette rubrique, tous les tests Fio ciblent un disque entier sans système de fichiers (un disque brut). Pour éviter de détruire accidentellement des données en testant le mauvais disque, l'espace réservé /dev/your_device est utilisé dans les exemples de commandes. N'oubliez pas de le remplacer par votre chemin de périphérique réel. |
name | Un nom défini par l'utilisateur pour la tâche de test, tel que Rand_Write_Testing dans les exemples. |
Pour plus d'informations sur les paramètres, consultez la page de manuel fio(1).