Comment comparer les volumes de DigitalOcean

introduction

L’analyse comparative vous permet d’estimer les performances de l’infrastructure afin de déterminer si une configuration particulière peut répondre à vos besoins en matière de charge de travail. Il s’agit d’un élément important du maintien de performances élevées du serveur et de son évolutivité pour répondre aux besoins informatiques croissants. Grâce aux tests d’évaluation, vous pouvez surveiller les ressources du serveur, optimiser les performances, gérer l’utilisation et prédire les problèmes éventuels.

Dans ce didacticiel, nous allons passer en revue les meilleures pratiques pour analyser vos volumes de stockage de blocs DigitalOcean en simulant des charges de travail imitant votre application.

Configuration des tests de volume de stockage de gouttelettes et de blocs

Vous souhaiterez déterminer les spécifications de la charge de travail que vous testez afin de configurer une configuration Droplet et Block Storage appropriée. Si vous comparez les volumes DigitalOcean à un autre produit, veillez à sélectionner des plans avec une configuration similaire afin d’obtenir une comparaison plus proche.

Pour plus d’informations sur la configuration d’un Droplet, reportez-vous à notre didacticiel «https://www.digitalocean.com/community/tutorials/how-to-create-your-first-digitalocean-droplet[Comment créer votre premier compte-rendu DigitalOcean]. ”Le volume de stockage de blocs peut être créé simultanément avec Droplet. Dans certains cas, vous pouvez le créer ultérieurement à partir de l’onglet * Volumes * sous * Droplets * dans le * Panneau de configuration *. Pour en savoir plus sur la création et la gestion de volumes, vous pouvez lire «https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-block-storage[An Introduction au stockage en bloc DigitalOcean].

Formatez le volume avec le système de fichiers qui répond à vos exigences de performance. Le système de fichiers par défaut le plus populaire est Ext4, qui est plus performant que les générations précédentes Ext3 et Ext2. Le système de fichiers XFS est spécialisé dans les fichiers de performance et les fichiers de données volumineux. Vous pouvez en savoir plus sur les systèmes de fichiers dans la section «https://www.digitalocean.com/community/tutorials/how-to-partition-and-format-digitalocean-block-storage-volumes-in-linux#formatting-the-partitions [Comment partitionner et formater des volumes de stockage de blocs DigitalOcean sous Linux]. ”Si vous n’avez pas de préférence de système de fichiers ou de configuration spécifique, le processus de création et de montage de volumes de bloc pour vous est automatisé dans le Panneau de configuration.

image: https: //assets.digitalocean.com/articles/benchmark-digitalocean-volumes/add-volume-gui.png [Affichage du panneau de configuration DigitalOcean de la configuration des volumes]

Une fois votre configuration en place, nous pouvons maintenant discuter d’outils de comparaison et de configurations que vous pouvez utiliser pour tirer le meilleur parti de vos tests de performance.

Outils d’analyse comparative et configurations

Nous allons discuter de l’outil de mesure de la performance fio pour tester les performances, car il est extrêmement flexible et supporté par la plupart des distributions. Vous pouvez également rechercher et utiliser d’autres outils d’analyse comparative: https://www.coker.com.au/bonnie/[Bonnie], btest et https: //. github.com/filebench/filebench/wiki[Filebench].

Pour installer fio sur un serveur Ubuntu, vous devez d’abord mettre à jour votre liste de paquets, puis l’installer, à l’aide des commandes suivantes:

sudo apt update
sudo apt install fio

Chaque outil de référence est fourni avec une variété de paramètres que vous pouvez ajuster afin d’obtenir les performances optimales pour votre test.

Un paramètre qui mérite d’être réglé est la profondeur de la file d’attente, qui est le parallélisme auquel le volume présente les meilleures performances. Habituellement, une longueur de file d’attente égale à «+ 1 +» indique que le workload ne peut pas démarrer une autre transaction avant la fin de la transaction précédente. Utilisez uniquement des nombres de profondeur de file d’attente faibles pour vos tests si vous souhaitez simuler une application hautement parallélisée. Sinon, continuez à augmenter la profondeur de la file d’attente jusqu’à ce que vous obteniez les performances souhaitées pour votre application.

Avec l’outil d’analyse comparative fio, certaines options de configuration typiques incluent:

Option Recommendations

iodepth

The queue depth that fio will issue to the file. In order to hit best input/output (I/O) rates, a number greater than iodepth=64 is recommended.

bs

Block size in bytes for I/O to use. File systems use 4K for metadata but tend to store files in much larger block sizes. Databases typically issue 8-16K sized I/O. For peak bandwidth tests, we recommend a block size of bs=64k or greater.

runtime

The time in seconds to run the benchmark. We recommend a runtime greater than 60 seconds, usually in the range of runtime=120s to runtime=300s.

ioengine

The ioengine option defines how the job issues I/O to the file. We recommend ioengine=libaio which refers to Linux native asynchronous I/O.

direct

Takes a Boolean value: 0 uses the filesystem cache returning a value closest to the application behavior which may result in higher than typical benchmark results; and 1 skips any file system caching behavior, returning the closest performance to what the block volume can do. We recommend direct=1.

sync

Use synchronous I/O for buffered writes. This option takes a Boolean value: 0 means not to force unit access, allowing for writeback cache behavior to operate like it does on normal disk drives with fio behaving more like a filesystem; 1 forces unit access, meaning I/O will not complete until the disk has guaranteed physical placement. We recommend sync=0.

size

Size of test file, taking an integer. We typically recommend at least 20 gigabytes. Note that DigitalOcean’s performance does not vary with volume size.

Avec ces configurations à l’esprit, nous pouvons maintenant passer en revue quelques exemples de tests de performances que vous souhaiterez peut-être exécuter.

Exécution de tests d’évaluation

Voici quelques exemples de tests que vous pouvez exécuter. Dans la section suivante de ce didacticiel, nous verrons comment inspecter plus en profondeur le résultat que vous recevez.

Dans les commandes suivantes, nous pointons sur un fichier + fio.test + sur un volume basé dans le centre de données NYC3. Veillez à le mettre à jour pour qu’il pointe vers le système de fichiers que vous souhaitez utiliser.

Bande passante en écriture

Ce test effectue une écriture aléatoire de 1 Mo sur les volumes de blocs.

fio --filename= \
--direct=1 \
--rw=randwrite \
--ioengine=libaio \
--bs=1024K \
--iodepth=32 \
--name=bw-test \
--runtime=120s \

Pour un Droplet standard, nous prévoyons une sortie de + 200 Mo / s + . Si vous travaillez avec un droplet à taux de processeur élevé, attendez-vous à une sortie de `+ 300 Mo / s +.

Test de lecture aléatoire

Cela permettra de mesurer la rapidité avec laquelle plusieurs petits fichiers peuvent être lus à partir d’un périphérique.

fio --filename= \
--direct=1 \
--rw=randread \
--ioengine=libaio \
--bs=4K \
--iodepth=128 \
--name=rand-r \
--runtime=120s \

Pour une Droplet standard, nous nous attendons à une sortie de + 5000 + opérations d’E / S par seconde (IOPS). Pour un droplet à processeur élevé, nous attendons une sortie supérieure à + 6000 + `IOPS.

Test d’écriture aléatoire

Cela mesurera la rapidité avec laquelle plusieurs petits fichiers peuvent être écrits.

fio --filename= \
--direct=1 \
--rw=randwrite \
--ioengine=libaio \
--bs=4K \
--iodepth=128 \
--name=rand-w \
--runtime=120s \

Une sortie + 5000 + IOPS correspond à ce que nous attendons pour un droplet standard, tandis qu’une sortie supérieure à + ​​6000 + IOPS correspond à ce que nous attendons pour un droplet à processeur élevé.

Lire le test de latence

Nous déterminerons le temps nécessaire pour rechercher et accéder aux blocs de données appropriés sur le disque avec un test de latence de lecture.

fio --filename= \
--direct=1 \
--rw=randread \
--ioengine=libaio \
--bs=4K \
--iodepth=1 \
--name=lat-read \
--runtime=120s \

Pour ce test, nous attendons une sortie dont le résultat est inférieur à + ​​5ms +.

Test de latence en écriture

Ce test mesure le délai entre la création d’une demande d’écriture sur le disque et son achèvement.

fio --filename= \
--direct=1 \
--rw=randwrite \
--ioengine=libaio \
--bs=4K \
--iodepth=1 \
--name=lat-write \
--runtime=120s \

Ici, nous attendons également une sortie inférieure à + ​​5ms + pour ce test.

Inspection de sortie

Une fois votre test exécuté, vous examinerez la sortie obtenue pour déterminer le nombre d’opérations de lecture et d’écriture traitées par DigitalOcean Volumes. Vous voudrez faire attention à combien de temps il a fallu pour que chaque test se termine.

Vous trouverez ci-dessous un exemple de sortie d’un test de bande passante en écriture.

fio --filename=/mnt/volume-nyc3-04/test.fio --direct=1 --rw=randwrite --ioengine=libaio --bs=1024k --iodepth=32  --name=bw-test --runtime=120s
Outputbw-test: (groupid=0, jobs=1): err= 0: pid=2584: Fri Apr 20 17:14:19 2018
 write: io=22937MB, , , runt=120160msec
   slat (usec): min=54, max=622, avg=135.46, stdev=23.21
   clat (msec): min=7, max=779, avg=167.48, stdev=26.28
    lat (msec): min=7, max=779, avg=167.62, stdev=26.28
   clat percentiles (msec):
    |  1.00th=[  101],  5.00th=[  155], 10.00th=[  159], 20.00th=[  163],
    | 30.00th=[  165], 40.00th=[  167], 50.00th=[  167], 60.00th=[  167],
    | 70.00th=[  169], 80.00th=[  169], 90.00th=[  172], 95.00th=[  178],
    | 99.00th=[  306], 99.50th=[  363], 99.90th=[  420], 99.95th=[  474],
    | 99.99th=[  545]
   bw (KB  /s): min=137730, max=254485, per=100.00%, avg=195681.88, stdev=9590.24
   lat (msec) : 10=0.01%, 20=0.03%, 50=0.37%, 100=0.58%, 250=97.55%
   lat (msec) : 500=1.44%, 750=0.03%, 1000=0.01%
 cpu          : usr=1.76%, sys=1.83%, ctx=22777, majf=0, minf=11
 IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=99.9%, >=64=0.0%
    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=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
    issued    : total=r=0/w=22937/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
    latency   : target=0, window=0, percentile=100.00%, depth=32

Run status group 0 (all jobs):
 WRITE: io=22937MB, aggrb=195468KB/s, minb=195468KB/s, maxb=195468KB/s, mint=120160msec, maxt=120160msec

La ligne en surbrillance dans la sortie ci-dessus indique notre bande passante moyenne sous la forme + bw = 195468KB / s +, ainsi que nos opérations d’E / S par seconde (IOPS) sous forme de + iops = 190 +. Dans ce scénario particulier, l’IOPS est faible car nous effectuions des écritures de 1 Mo à un débit maximal de 200 Mo par seconde (`+ 190iops * 1M = ~ 190 Mo / s +).

Lors de l’exécution d’un test de latence en lecture, vous recevrez les métriques sur des lignes ressemblant à ce qui suit:

Outputlat-read: (groupid=0, jobs=1): err= 0: pid=2628: Fri Apr 20 17:32:51 2018
 read : io=855740KB, bw=7131.2KB/s, iops=1782, runt=120001msec
   slat (usec): min=8, max=434, avg=16.77, stdev= 5.92
   clat (usec): min=2, max=450994, avg=539.15, stdev=2188.85
    lat (usec): min=53, max=451010, , stdev=2188.91

Dans l’exemple ci-dessus, nous pouvons voir que la latence d’E / S est de 556 usec ou microsecondes (ou 0,5 ms ou millisecondes). Ceci indique le temps nécessaire pour effectuer une seule E / S 4K sur le volume du bloc.

La latence est affectée par plusieurs facteurs, notamment les performances du système de stockage, la taille des E / S, la profondeur de la file d’attente et les limites de limitation éventuellement déclenchées.

Une fois vos tests d’évaluation terminés, vous pouvez supprimer la Droplet et le volume.

Comprendre les résultats de performance

Les volumes de stockage de bloc DigitalOcean sont des systèmes de stockage SSD basés sur un réseau SAN. Pour cette raison, les performances d’un volume donné évoluent avec la taille du bloc et la profondeur de la file d’attente. C’est-à-dire que le stockage fonctionne mieux lorsqu’il est chargé de tout faire en même temps.

Ci-dessous, un graphique montrant un exemple de performance sur le parallélisme. Cliquez sur l’image pour l’agrandir.

image: https: //assets.digitalocean.com/articles/benchmark-digitalocean-volumes/impact-queue-depth-graph.png [Impact de la profondeur de la file d’attente sur le graphe IOPS]

Les performances de DigitalOcean sont limitées par le nombre maximal d’E / S par seconde et par la bande passante maximale, selon ce qui est atteint en premier. Sur DigitalOcean, les performances ne changent pas avec la taille du volume. Cependant, étant donné que les IOPS et la bande passante sont plafonnés à certains débits, il y a un effet de croisement. En d’autres termes, l’augmentation de la profondeur de la file d’attente sur les E / S de petite taille n’atteindra pas la bande passante maximale de 200 Mo / s, car elle atteindra plutôt la limite IOPS. Pour les grands blocs, le pic d’IOPS de 5 000 ne sera pas atteint car la limite de bande passante fixée à 200 Mo / s sera atteinte.

En règle générale, utiliser une taille de bloc de 32 Ko ou plus entraînera moins de 5 000 IOPS, car la limite de bande passante atteignant 200 Mo / s sera atteinte, tandis qu’une taille de bloc ou de 16 Ko ou moins entraînera un taux inférieur à la limite de bande passante. de 200 Mo / s car il atteindra 5000 IOPS.

À titre d’exemple pratique, comparons IOPS et la bande passante.

image: https: //assets.digitalocean.com/articles/benchmark-digitalocean-volumes/read-throughput-graph.png [Graphique de débit de lecture]

image: https: //assets.digitalocean.com/articles/benchmark-digitalocean-volumes/read-iops-graph.png [Lire le graphique IOPS]

Le premier graphique montre la bande passante typique en fonction de la taille du bloc et de la profondeur de la file d’attente d’une application. Nous allons considérer deux tailles de bloc différentes, 4K et 256K.

Lorsque nous examinons les valeurs 4K, nous constatons qu’il atteint 5 000 IOPS avec une profondeur de file d’attente de 4, mais nous ne le voyons jamais que sur une bande passante de 20 Mo / s. C’est parce que +5000 IOPS * 4K = 20Mo / sec +. Cela signifie qu’une charge de travail 4K ne dépassera jamais 20 Mo / s, car elle est limitée par des E / S.

Lorsque nous examinons la charge de travail de 256 Ko, nous constatons qu’elle atteint 200 Mo / s à une profondeur de file d’attente de 2, mais que le débit IOPS ne sera jamais supérieur à 800 IOPS, car + 200 Mo / s / 256K = 800 IOPS +.

Les volumes de stockage de bloc DigitalOcean sont ajustés pour des charges de travail de système de fichiers de 16K à 64K. À ces tailles de bloc, nous constatons un bon compromis entre IOPS et bande passante.

Block Size IOPS Bandwidth

4K

~5000 IOPS

~20MB/sec

16K

~5000 IOPS

~80MB/sec

32K

~5000 IOPS

~160MB/sec

64K

~3200 IOPS

~200MB/sec

256K

~800 IOPS

~200MB/sec

Une fois que vous aurez obtenu le résultat de l’analyse comparative d’une charge de travail d’E / S simulée, vous pourrez analyser la meilleure configuration en fonction des besoins de votre application.

Conclusion

Dans ce guide, nous avons expliqué comment analyser vos volumes de stockage de gouttelettes DigitalOcean et de blocs afin de simuler les flux de travail prévus. L’intégration de tests d’évaluation dans votre flux de travail peut vous assurer de maintenir l’échelle appropriée pour vos applications et de prévoir les problèmes avant qu’ils ne surviennent.

Pour en savoir plus sur l’utilisation de DigitalOcean Block Storage, vous pouvez lire la section «https://www.digitalocean.com/community/tutorials/how-to-create-an-encrypted-file-system-on-a-digitalocean -block-storage-volume [Comment créer un système de fichiers crypté sur un volume de stockage de blocs DigitalOcean] "et" https://www.digitalocean.com/community/tutorials/how-to-work-with-digitalocean-block- storage-using-doctl [Comment utiliser le stockage de blocs DigitalOcean à l’aide de Doctl]. ”

Related