Comparer les volumes EBS
Vous pouvez tester les performances des volumes Amazon EBS en simulant des charges de travail d'I/O. Procédez comme suit :
-
Lancez une instance optimisée EBS.
-
Créez des volumes EBS.
-
Attachez les volumes à votre instance optimisée pour EBS.
-
Configurez et installez le périphérique de stockage en mode bloc.
-
Installez un outil permettant de comparer les performances d'I/O.
-
Comparez les performances d'I/O de vos volumes.
-
Supprimez vos volumes et mettez l'instance hors service pour éviter de générer des frais.
Important
Certaines des procédures entraîneront la destruction des données existantes sur les volumes EBS que vous comparez. Les procédures de comparaison sont conçues pour être utilisées sur des volumes créés spécialement à des fins de tests, et pas sur des volumes de production.
Configurer votre instance
Afin d'obtenir des performances optimales des volumes EBS, nous vous recommandons d'utiliser une instance optimisée pour EBS. Les instances optimisées pour EBS offrent un débit supplémentaire et dédié entre Amazon EC2 et Amazon EBS, avec l'instance. Les instances optimisées pour EBS délivrent une bande passante dédiée entre Amazon EC2 et Amazon EBS, avec des spécifications en fonction du type d'instance utilisé. Pour plus d'informations, consultez instances optimisées pour Amazon EBS.
Afin de créer une instance optimisée pour EBS, choisissez Launch as an EBS-Optimized instance (Lancer en tant qu'instance optimisée pour EBS) lorsque vous lancez l'instance à l'aide de la console Amazon EC2, ou spécifiez --ebs-optimized lorsque vous utilisez la ligne de commande. Veillez à lancer une instance de la génération actuelle, prenant en charge cette option. Pour plus d'informations, consultez instances optimisées pour Amazon EBS.
Configurer des volumes Provisioned IOPS SSD ou SSD à usage général
Pour créer un SSD à IOPS provisionnés (io1
et io2
) ou un SSD à usage général (gp2
et gp3
) à l'aide de la console Amazon EC2, pour Volume type (Type de volume), choisissez Provisioned IOPS SSD (io1) (SSD à IOPS provisionnés (io1)), Provisioned IOPS SSD (io2) (SSD à IOPS provisionnés (io2)), General Purpose SSD (gp2) (SSD à usage général (gp2)) ou General Purpose SSD (gp3) (SSD à usage général (gp3)). Sur la ligne de commande, spécifiez io1
, io2
, gp2
ou gp3
pour le paramètre --volume-type. Pour les volumes io1
, io2
et gp3
, spécifiez le nombre d'opérations d'I/O par seconde (IOPS) pour le paramètre --iops. Pour plus d'informations, consultez Types de volume Amazon EBS et Créez un volume Amazon EBS..
Pour les exemples de test, nous vous recommandons de créer une grappe RAID 0 avec 6 volumes afin de bénéficier d'un niveau de performance élevé. Dans la mesure où vous êtes facturé en fonction des gigaoctets provisionnés (et du nombre d'IOPS provisionnés pour les volumes io1, io2 et gp3), et non du nombre de volumes, aucun coût supplémentaire ne sera appliqué pour la création de plusieurs volumes de plus petite taille, puis pour leur utilisation afin de créer un agrégat par bandes. Si vous utilisez Oracle Orion afin de comparer vos volumes, vous pouvez effectuer une simulation de l'agrégation par bandes comme avec Oracle ASM. C'est pourquoi nous vous recommandons de laisser Orion se charger de l'agrégation par bandes. Si vous utilisez un outil de comparaison différent, vous devez effectuer vous-même l'agrégation des volumes par bandes.
Pour obtenir des instructions sur la création d'une grappe RAID 0 avec 6 volumes, reportez-vous à la section Créer une grappe RAID 0 sous Linux.
Configuration des volumes HDD à débit optimisé (st1
) ou HDD à froid (sc1
)
Pour créer un volume st1
, choisissez HDD à débit optimisé lorsque vous créez le volume via la console Amazon EC2 ou spécifiez --type st1
si vous utilisez la ligne de commande. Pour créer un volume sc1
, choisissez HDD à froid lorsque vous créez le volume via la console Amazon EC2 ou spécifiez --type sc1
si vous utilisez la ligne de commande. Pour plus d'informations sur la création de volumes EBS, consultez Créez un volume Amazon EBS.. Pour plus d'informations sur la liaison de ces volumes à votre instance, consultez Attacher un volume Amazon EBS à une instance.
AWS fournit un modèle JSON à utiliser avec AWS CloudFormation, qui simplifie cette procédure de configuration. Accédez au modèlest1
. Le modèle crée une instance de la génération actuelle et un volume st1
de 2 Tio, et attache ce dernier à l'instance dans /dev/xvdf
.
Pour créer un volume HDD avec le modèle
Ouvrez la console AWS CloudFormation, à l'adresse https://console.aws.amazon.com/cloudformation
. -
Choisissez Create Stack.
-
Choisissez Télécharger un modèle sur Amazon S3 et sélectionnez le modèle JSON que vous avez obtenu précédemment.
-
Attribuez un nom à votre stack (comme "test-perf-ebs"), puis sélectionnez un type d'instance (par défaut : r3.8xlarge) et une clé SSH.
-
Choisissez Suivant à deux reprises, puis sélectionnez Créer une pile.
-
Lorsque l'état de votre nouvelle pile passe de CREATE_IN_PROGRESS à COMPLETE, choisissez Outputs (Sorties) afin d'obtenir l'entrée DNS publique de votre nouvelle instance, qui sera attachée à un volume
st1
de 2 Tio. -
Connectez-vous à votre nouvelle pile via SSH en tant qu'utilisateur
ec2-user
, avec le nom d'hôte obtenu à partir de l'entrée DNS lors de l'étape précédente. -
Passez à Installer les outils d'évaluation.
Installer les outils d'évaluation
Le tableau suivant répertorie certains des outils que vous pouvez utiliser pour comparer les performances des volumes EBS.
Outil | Description |
---|---|
fio |
Pour comparer les performances d'I/O. (Notez que la commande fio a une dépendance sur Pour installer fio sur Amazon Linux, exécutez la commande suivante :
Pour installer fio sur Ubuntu, exécutez la commande suivante :
|
Pour calibrer les performances d'I/O des systèmes de stockage à utiliser avec les bases de données Oracle. |
Ces outils de comparaison prennent en charge un large éventail de paramètres de test. Vous devez utiliser des commandes proches des charges de travail que vos volumes devront prendre en charge. Les commandes ci-dessous sont proposées à titre d'exemple pour vous permettre de débuter.
Choisir la longueur de la file d'attente d'un volume
Choisissez la meilleure longueur de file d'attente du volume en fonction de votre charge de travail et du type de volume.
Longueur de la file d'attente sur les volumes basés sur SSD
Afin de déterminer la longueur moyenne optimale de file d'attente pour votre charge de travail sur des volumes basés sur SSD, nous vous recommandons de cibler une longueur de file d'attente de 1 toutes les 1 000 IOPS disponibles (quantité de référence pour les volumes SSD à usage général et quantité provisionnée pour les volumes Provisioned IOPS SSD). Vous pouvez ensuite contrôler les performances de votre application et ajuster cette valeur en fonction des exigences de votre application.
L'augmentation de la longueur de file d'attente offre un avantage jusqu'à ce que vous atteigniez le nombre d'IOPS provisionnés, le débit ou la valeur optimale de la longueur de file d'attente du système, actuellement définie sur 32. Par exemple, un volume avec 3 000 IOPS provisionnés doit cibler une longueur de file d'attente de 3. Vous devez essayer d'augmenter ou de diminuer ces valeurs afin de déterminer ce qui fonctionne le mieux pour votre application.
Longueur de la file d'attente sur les volumes basés sur HDD
Afin de déterminer la longueur moyenne optimale de file d'attente pour votre charge de travail sur des volumes basés sur HDD, nous vous recommandons de cibler une longueur de file d'attente de 4 tout en exécutant des I/O séquentielles d'1 Mio. Vous pouvez ensuite contrôler les performances de votre application et ajuster cette valeur en fonction des exigences de votre application. Par exemple, un volume st1
de 2 Tio avec un débit de transmission en rafales de 500 Mio/s et des IOPS de 500 doit cibler une longueur de file d'attente de 4, 8 ou 16 lors de l'exécution d'I/O séquentielles de 1 024 Kio, 512 Kio ou 256 Kio respectivement. Vous devez essayer d'augmenter ou de diminuer ces valeurs afin de déterminer ce qui fonctionne le mieux pour votre application.
Désactivation des états « C-state »
Avant de procéder à des comparaisons, vous devez désactiver les états « C-state » du processeur. Les cœurs temporairement inutilisés dans une UC prise en charge peuvent passer à l'état « C-state » pour économiser de l'énergie. Lorsque le cœur est appelé afin de reprendre le traitement, un certain laps de temps est nécessaire avant que le cœur soit à nouveau entièrement opérationnel. Cette latence peut interférer avec les routines de comparaison du processeur. Pour plus d'informations sur les états « C-state » et les types d'instance EC2 qui les prennent en charge, consultez la section Contrôle des états du processeur pour votre instance EC2.
Désactiver les états « C-state » sous Linux
Vous pouvez désactiver les états « C-state » sur Amazon Linux, RHEL et CentOS de la manière suivante :
Identifiez le nombre d'états « C-state ».
$
cpupower idle-info | grep "Number of idle states:"
Désactivez les états « C-state » de c1 à cN. Idéalement, l'état des cœurs doit être c0.
$
for i in `seq 1 $((N-1))`; do cpupower idle-set -d $i; done
Effectuer la comparaison
Les procédures suivantes décrivent les commandes de comparaison pour différents types de volume EBS.
Exécutez les commandes suivantes sur une instance optimisée pour EBS avec les volumes EBS attachés. Si les volumes EBS ont été créés à partir d'instantanés, veillez à les initialiser avant d'effectuer la comparaison. Pour plus d'informations, consultez Initialiser les volumes Amazon EBS.
Une fois que vous avez terminé de tester les volumes, consultez les rubriques suivantes pour apprendre à les nettoyer : Supprimer un volume Amazon EBS et Résilier une instance.
Définir des points de référence pour les volumes Provisioned IOPS SSD et SSD à usage général
Exécutez fio sur la grappe RAID 0 que vous avez créée.
La commande suivante effectue des opérations d'écriture aléatoires 16 Ko.
[ec2-user ~]$
sudo fio--directory=/mnt/
p_iops_vol0
--ioengine=psync--name
fio_test_file
--direct=1 --rw=randwrite --bs=16k --size=1G --numjobs=16 --time_based --runtime=180 --group_reporting --norandommap
La commande suivante effectue des opérations de lecture aléatoires 16 Ko.
[ec2-user ~]$
sudo fio--directory=/mnt/
p_iops_vol0
--name
fio_test_file
--direct=1 --rw=randread --bs=16k --size=1G --numjobs=16 --time_based --runtime=180 --group_reporting --norandommap
Pour plus d'informations sur l'interprétation des résultats, consultez le didacticiel Inspecting disk IO performance with fio
Définir des points de référence pour les volumes st1
et sc1
Exécutez la commande fio sur votre volume st1
ou sc1
.
Note
Avant d'exécuter ces tests, définissez les I/O mises en mémoire tampon sur votre instance, comme indiqué dans Accroître la lecture anticipée pour les charges de travail à forte densité de lectures et à haut débit sur st1 et sc1.
La commande suivante exécute des opérations de lecture séquentielle d'1 Mio sur un périphérique de stockage en mode bloc st1
attaché (par exemple, /dev/xvdf
) :
[ec2-user ~]$
sudo fio--filename=/dev/
<device>
--direct=1 --rw=read
--randrepeat=0 --ioengine=libaio --bs=1024k --iodepth=8 --time_based=1 --runtime=180
--name=fio_direct_read_test
La commande suivante exécute des opérations d'écriture séquentielle d'1 Mio sur un périphérique de stockage en mode bloc st1
attaché :
[ec2-user ~]$
sudo fio--filename=/dev/
<device>
--direct=1 --rw=write
--randrepeat=0 --ioengine=libaio --bs=1024k --iodepth=8 --time_based=1 --runtime=180
--name=fio_direct_write_test
Certaines charges de travail exécutent une combinaison de lectures séquentielles et d'écritures séquentielles dans différentes parties du périphérique de stockage en mode bloc. Pour évaluer une telle charge de travail, nous vous recommandons d'utiliser des tâches fio distinctes et simultanées pour les lectures et les écritures, et d'utiliser l'option fio offset_increment
pour cibler différents emplacements du périphérique de stockage en mode bloc pour chaque tâche.
L'exécution de cette charge de travail est un peu plus compliquée qu'une charge de travail d'écriture séquentielle ou de lecture séquentielle. Utilisez un éditeur de texte pour créer un fichier de tâche fio, appelé fio_rw_mix.cfg
dans cet exemple, contenant les éléments suivants :
[global] clocksource=clock_gettime randrepeat=0 runtime=180 [sequential-write] bs=1M ioengine=libaio direct=1 iodepth=8 filename=/dev/
<device>
do_verify=0 rw=write rwmixread=0 rwmixwrite=100 [sequential-read] bs=1M ioengine=libaio direct=1 iodepth=8 filename=/dev/<device>
do_verify=0 rw=read rwmixread=100 rwmixwrite=0 offset=100g
Ensuite, exécutez la commande suivante :
[ec2-user ~]$
sudo fiofio_rw_mix.cfg
Pour plus d'informations sur l'interprétation des résultats, consultez le didacticiel Inspecting disk I/O performance with fio
Plusieurs tâches fio pour l'I/O directe, même en cas d'utilisation d'opérations de lecture ou d'écriture séquentielle, peuvent se traduire par un débit inférieur à celui attendu pour les volumes st1
et sc1
. Nous vous recommandons d'utiliser une tâche d'I/O directe et le paramètre iodepth
pour contrôler le nombre d'opérations d'I/O simultanées.