Optimiser les performances des disques persistants


Les disques persistants vous offrent les performances décrites dans le tableau de comparaison des différents types de disques si la VM utilise suffisamment de ressources pour atteindre les limites de performances. Une fois que vous avez dimensionné les volumes de vos disques persistants en fonction des performances attendues, votre charge de travail et votre système d'exploitation peuvent nécessiter des ajustements.

Les sections suivantes décrivent les caractéristiques de VM et de charge de travail qui affectent les performances du disque et passent en revue quelques éléments clés qui peuvent être ajustés pour offrir de meilleures performances. Elle comprennent aussi des suggestions et comment les appliquer à des types de charges de travail spécifiques.

Facteurs ayant une incidence sur les performances des disques

Les sections suivantes décrivent les facteurs ayant une incidence sur les performances des disques d'une VM.

Plafonds de sortie réseau sur le débit d'écriture

Votre VM est soumise à un plafond de sortie réseau qui dépend du type de machine de la VM.

Compute Engine stocke les données sur les disques persistants avec plusieurs écritures chargées en parallèle de manière à disposer d'une redondance intégrée. En outre, chaque requête d'écriture est associée à une certaine quantité de tâches annexes qui consomment de la bande passante en écriture.

Le trafic maximal en écriture qu'une instance de VM peut émettre correspond au plafond de sortie réseau divisé par un multiplicateur de bande passante, qui tient compte de la réplication et de la surcharge.

Les plafonds de sortie réseau sont répertoriés dans la colonne Bande passante de sortie maximale (Gbit/s) des tables de type de machine pour les familles de machine à usage général, optimisées pour le calcul, optimisées pour le calcul, optimisées pour la mémoire et optimisées pour l'accélérateur.

Le multiplicateur de bande passante est d'environ 1,16 fois à l'utilisation maximale du réseau, ce qui signifie que 16 % des octets écrits sont de surcharge. Pour le disque persistant régional, le multiplicateur de bande passante est d'environ 2,32 fois pour prendre en compte une surcharge de réplication.

Dans une situation où les opérations de lecture et d'écriture du disque persistant sont en concurrence avec la bande passante de sortie réseau, 60% de la bande passante de sortie réseau maximale, définie par le type de machine, sont alloués aux écritures sur disques persistants. ce qui laisse 40 % pour le reste du trafic de sortie réseau. Pour plus de détails sur l'autre trafic de sortie réseau, consultez la section Bande passante de sortie.

L'exemple suivant montre comment calculer la bande passante maximale en écriture pour un disque persistant sur une instance de VM N1. L'allocation de bande passante est la partie de bande passante de sortie réseau allouée au disque persistant. La bande passante maximale en écriture correspond à la bande passante en écriture maximale du disque persistant ajustée pour la surcharge.

Nombre de processeurs virtuels de la VM Limite de sortie réseau (Mo/s) Allocation de bande passante (Mo/s) Bande passante d'écriture maximale (Mo/s) Bande passante d'écriture maximale en utilisation complète du réseau (Mo/s)
1 250 150 216 129
2-7 1,250 750 1,078 647
8-15 2,000 1 200 1 724 1 034
16+ 4 000 2 400 3 448 2,069

Vous pouvez calculer la bande passante maximale de disque persistant à l'aide des formules suivantes:

VM N1 avec 1 processeur virtuel

La limite de sortie réseau est la suivante:

2 Gbit/s / 8 bits = 0,25 Go par seconde = 250 Mo par seconde

L'allocation de bande passante sur le disque persistant avec une utilisation complète du réseau est la suivante:

250 Mo par seconde x 0,6 = 150 Mo par seconde

La bande passante maximale en écriture du disque persistant sans conflit de réseau est la suivante:

  • Disques zonaux: 250 Mo par seconde / 1,16 ~= 216 Mo par seconde
  • Disques régionaux: 250 Mo par seconde / 2,32 ~= 108 Mo par seconde

La bande passante maximale en écriture du disque persistant avec une utilisation complète du réseau est la suivante:

  • Disques zonaux: 150 Mo par seconde / 1,16 ~= 129 Mo par seconde
  • Disques régionaux: 150 Mo par seconde / 2,32 ~= 65 Mo par seconde

Les limites de sortie réseau fournissent une limite supérieure des performances. D'autres facteurs peuvent limiter les performances en dessous de ce niveau. Pour en savoir plus sur les autres contraintes de performances, consultez les sections suivantes.

Lectures et écritures simultanées

Pour les disques persistants standards, les opérations simultanées de lecture et d'écriture partagent les mêmes ressources. Lorsque votre VM utilise davantage de débit ou d'IOPS en lecture, elle peut effectuer moins d'écritures. À l'inverse, les instances qui utilisent plus de débit ou d'IOPS en écriture pourront effectuer moins d'opérations de lecture.

Les volumes de disque persistant ne peuvent pas atteindre simultanément leur débit maximal et leurs limites d'IOPS pour les opérations de lecture et d'écriture.

Le calcul du débit est IOPS * I/O size. Pour profiter des limites maximales de débit pour des opérations simultanées de lecture et d'écriture sur disques persistants SSD, utilisez une taille d'E/S appropriée de sorte que les IOPS en lecture et en écriture ne dépassent pas leur limite.

Le tableau suivant répertorie les limites d'IOPS par VM pour les opérations simultanées de lecture et d'écriture.

Disque persistant standard Disque persistant SSD (8 processeurs virtuels) Disque persistant SSD (32 processeurs virtuels et plus) Disque persistant SSD (64 processeurs virtuels et plus)
Lecture Écriture Lecture Écriture Lecture Écriture Lecture Écriture
7 500 0 15 000 0 60 000 0 100 000 0
5 625 3 750 11 250 3 750 45 000 15 000 75 000 25 000
3 750 7 500 7 500 7 500 30 000 30 000 50 000 50 000
1875 11 250 3 750 11 250 15 000 45 000 25 000 75 000
0 15 000 0 15 000 0 60 000 0 100 000

Les nombres d'IOPS indiqués dans ce tableau sont basés sur une taille d'E/S de 8 Ko. D'autres tailles d'E/S, telles que 16 Ko, peuvent générer des nombres d'IOPS différents, mais conserveront la même distribution en lecture/écriture.

Le tableau suivant répertorie les limites de débit (Mo par seconde) par VM pour les lectures et les écritures simultanées.

Disque persistant standard Disque persistant SSD (6-14 processeurs virtuels) Disque persistant SSD (16 processeurs virtuels et plus)
Lecture Écriture Lecture Écriture Lecture Écriture
1 200 0 800* 800* 1 200* 1 200*
900 100
600 200
300 300
0 400

*Pour les disques persistants SSD, le débit de lecture maximal et le débit d'écriture maximal sont indépendants l'un de l'autre. Ces limites sont donc constantes.

Taille du volume logique

La taille des disques persistants peut atteindre jusqu'à 64 Tio. Vous pouvez créer des volumes logiques uniques de 257 Tio au maximum en utilisant la gestion du volume logique au sein de votre VM. Un volume de plus grande taille a un impact sur les performances des manières suivantes :

  • Les systèmes de fichiers locaux ne fonctionnent pas tous correctement à cette échelle. Les opérations courantes, telles que l'installation et la vérification du système de fichiers, peuvent prendre plus de temps que prévu.
  • Les performances maximales des disques persistants sont atteintes avec des volumes de taille inférieure. Les disques mettent plus de temps à effectuer des opérations de lecture ou d'écriture complètes avec autant d'espace de stockage sur une VM. Si votre application le permet, envisagez d'utiliser plusieurs VM pour un débit global plus élevé.
  • La création d'instantanés avec de grandes quantités de disques persistants peut prendre plus de temps que prévu et peut entraîner une incohérence de votre volume logique sans coordination précise avec votre application.

Plusieurs disques associés à une seule instance de VM

Les limites de performances des disques lorsque plusieurs disques sont associés à une VM varient selon que les disques sont du même type ou de types différents.

Plusieurs disques du même type

Si plusieurs disques du même type sont associés à une instance de VM dans le même mode (par exemple, lecture/écriture), les limites de performances sont identiques à celles d'un disque unique de la même taille que la combinaison de tailles de ces disques. Si vous utilisez tous les disques à 100 %, la limite de performances globale est répartie équitablement entre les disques, quelle que soit la taille de disque relative.

Par exemple, supposons que vous disposiez d'un disque pd-standard de 200 Go et d'un disque pd-standard de 1 000 Go. Si vous n'utilisez pas le disque de 1 000 Go, celui de 200 Go peut atteindre les limites de performances d'un disque standard de 1 200 Go. Si vous utilisez les deux disques à 100 %, chacun d'eux affichera les performances maximales d'un disque pd-standard persistant standard de 600 Go (1 200 Go / 2 = disques de 600 Go).

Plusieurs disques de différents types

Si vous associez différents types de disques à une VM, les performances maximales possibles correspondent à la limite de performances du disque le plus rapide pris en charge par la VM. Les performances cumulées des disques associés ne dépasseront pas les limites de performances du disque le plus rapide pris en charge par la VM.

Optimiser vos disques pour les IOPS ou les charges de travail orientées débit

Les recommandations de performances varient selon que vous souhaitez optimiser les IOPS ou le débit.

Charges de travail axées IOPS

Les bases de données, qu'elles soient de type SQL ou NoSQL, présentent des modèles d'accès aux données aléatoires. Google recommande les valeurs suivantes pour les charges de travail axées IOPS :

  • Définissez les valeurs de profondeur de file d'attente d'E/S sur 1 pour 400 à 800 IOPS, sans dépasser 64 sur les volumes importants.

  • Prévoyez un processeur disponible tous les 2 000 IOPS en lecture aléatoire et un processeur disponible tous les 2 500 IOPS en écriture aléatoire.

  • Si cette option est disponible pour votre type de machine de VM, utilisez les disques Hyperdisk Extreme de Google Cloud, qui vous permettent de modifier les IOPS provisionnées.

Abaissez le cache readahead aux valeurs généralement suggérées dans les bonnes pratiques pour MongoDB, Apache Cassandra et les autres applications de base de données.

Charges de travail orientées débit

Les opérations de streaming, telles qu'une tâche Hadoop, bénéficient de lectures séquentielles rapides. De ce fait, des tailles d'E/S plus importantes peuvent augmenter les performances de diffusion.

  • Utilisez des E/S de 256 ko ou plus.

  • Si cette option est disponible pour votre type de machine de VM, utilisez des disques Hyperdisk Throughput, qui vous permettent de modifier le débit provisionné.

  • Pour un disque persistant standard, utilisez si possible au moins huit flux d'E/S séquentiels parallèles. Les disques persistants standards permettent d'optimiser les performances des E/S pour un accès séquentiel au disque, comme pour un disque dur HDD physique.

  • Assurez-vous que votre application est optimisée pour offrir une localité temporelle des données raisonnable sur les disques de grande capacité.

    Si votre application accède à des données réparties sur différentes parties d'un disque sur une courte période (à raison de plusieurs centaines de Go par processeur virtuel), vous n'atteindrez pas les valeurs IOPS optimales. Pour des performances maximales, optimisez la localité temporelle des données et des facteurs de pondération tels que la fragmentation du disque et le caractère aléatoire des parties du disque consultées.

  • Pour le disque persistant SSD, assurez-vous que le programmeur d'E/S du système d'exploitation est configuré pour répondre à vos besoins spécifiques.

    Sur les systèmes Linux, vérifiez si le programmeur d'E/S est défini sur none. Ce programmeur d'E/S ne réorganise pas les requêtes et constitue la solution idéale pour les appareils d'E/S rapides et aléatoires.

    1. Sur la ligne de commande, vérifiez la programmation d'E/S utilisée par votre machine Linux:

      cat /sys/block/sda/queue/scheduler
      

      Le résultat ressemble à ce qui suit :

      [mq-deadline] none
      

      Le programmeur d'E/S actuellement actif s'affiche entre crochets ([]).

    2. Si votre programmeur d'E/S n'est pas défini sur none, effectuez l'une des opérations suivantes :

      • Pour remplacer votre programmeur d'E/S par défaut par none, définissez elevator=none dans l'entrée GRUB_CMDLINE_LINUX du fichier de configuration GRUB. Généralement, ce fichier se trouve dans /etc/default/grub, mais dans certaines distributions plus anciennes, il peut se trouver dans un autre répertoire.
      GRUB_CMDLINE_LINUX="elevator=none vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16
      

      Après avoir mis à jour le fichier de configuration GRUB, configurez le bootloader sur le système pour qu'il puisse démarrer sur Compute Engine.

      • Vous pouvez également modifier le programmeur d'E/S au moment de l'exécution :
      echo 'none' > sudo /sys/block/sda/queue/scheduler
      

      Si vous utilisez cette méthode, le système revient au programmeur d'E/S par défaut au redémarrage. Exécutez à nouveau la commande cat pour vérifier votre programmeur d'E/S.

Modifications de la charge de travail pouvant améliorer les performances des disques

Certains comportements de charge de travail peuvent améliorer les performances des opérations d'E/S sur les disques associés.

Utiliser une profondeur de file d'attente d'E/S élevée

Les disques persistants présentent une latence supérieure à celle des disques associés localement, tels que des disques SSD locaux, car ce sont des appareils connectés au réseau. Elles peuvent fournir des IOPS et un débit très élevés, mais vous devez vous assurer que suffisamment de requêtes d'E/S sont effectuées en parallèle. Le nombre de requêtes d'E/S effectuées en parallèle est appelé profondeur de la file d'attente d'E/S.

Les tableaux ci-dessous indiquent la profondeur de file d'attente d'E/S recommandée pour vous assurer d'atteindre un certain niveau de performances. Notez que le tableau ci-dessous présente une latence type légèrement surestimée pour afficher des recommandations prudentes. Dans cet exemple, nous partons du principe que vous utilisez une taille d'E/S de 16 Ko.

Générer suffisamment d'E/S à l'aide d'E/S de grande taille

  • Utiliser des E/S de grande taille

    Pour garantir que les limites et la latence des IOPS ne créeront pas de goulot d'étranglement pour les performances de votre application, utilisez une taille d'E/S d'au moins 256 Ko.

    Utilisez des tailles de bande élevées pour les applications de système de fichiers distribué. Une charge de travail d'E/S aléatoire utilisant des tailles de bandes élevées (4 Mo ou plus) permet d'obtenir d'excellentes performances sur des disques persistants standards. Cet excellent niveau de performance est dû au fait que la charge de travail imite presque parfaitement l'accès au disque par plusieurs flux séquentiels.

  • Veillez à ce que votre application génère suffisamment d'E/S

    Veillez à ce que votre application génère suffisamment d'E/S pour exploiter pleinement les limites d'IOPS et de débit du disque. Pour mieux comprendre le modèle d'E/S de votre charge de travail, examinez les métriques d'utilisation et de performances des disques persistants dans Cloud Monitoring.

  • Veiller à avoir suffisamment de processeurs disponibles sur l'instance émettant les E/S

    Si votre instance de VM manque de ressources de processeur, votre application ne pourra pas gérer les taux d'IOPS décrits ci-dessus. Nous vous recommandons d'avoir un processeur disponible pour 2 000 à 2 500 IOPS de trafic attendu.

Limiter les charges d'E/S importantes à un segment maximal

Un segment fait référence à une plage contiguë d'adresses de blocs logiques sur un seul disque physique. Les charges d'E/S importantes atteignent des performances maximales lorsqu'elles sont limitées à un certain segment maximal, qui dépend du type de machine de la VM à lequel le disque est associé, comme indiqué dans le tableau suivant.

Type de machine Segment maximal recommandé
  • m2-megamem-416
  • VM C2D
25 To
Tous les autres types de machines 50 To

Les plages de différents disques persistants qui totalisent jusqu'à 50 To peuvent être considérées comme égales à une seule plage de 50 To à des fins de performances.

Modifications du système d'exploitation pour améliorer les performances des disques

Dans certains cas, vous pouvez activer ou désactiver des fonctionnalités au niveau du système d'exploitation, ou configurer les disques associés de manière spécifique afin d'améliorer les performances des disques.

Éviter d'utiliser des systèmes de fichiers ext3 sous Linux

L'utilisation d'un système de fichiers ext3 dans une VM Linux peut engendrer de très mauvaises performances en cas de charges d'écriture importantes. Utilisez ext4 si possible. Le pilote du système de fichiers ext4 est rétrocompatible avec ext3/ext2 et permet l'installation de systèmes de fichiers ext3. Le système de fichiers ext4 est utilisé par défaut sur la plupart des systèmes d'exploitation Linux.

Si vous ne pouvez pas migrer vers ext4, vous pouvez installer des systèmes de fichiers ext3 avec l'option d'installation data=journal pour contourner le problème. Cela améliore les IOPS en écriture au prix du débit d'écriture. La migration vers ext4 peut améliorer jusqu'à sept fois les résultats dans certains benchmarks.

Désactiver l'initialisation différée et activer les commandes DISCARD

Les disques persistants sont compatibles avec les commandes DISCARD et les commandes TRIM, qui permettent aux systèmes d'exploitation d'informer les disques lorsque les blocs ne sont plus utilisés. Cette compatibilité avec DISCARD permet au système d'exploitation de marquer des blocs de disque comme n'étant plus nécessaires, sans encourir le coût de leur mise à zéro.

Sur la plupart des systèmes d'exploitation Linux, vous activez les opérations de suppression lorsque vous installez un disque persistant sur votre VM. Les VM Windows Server 2012 R2 permettent d'effectuer des opérations de suppression par défaut lorsque vous installez un disque persistant.

L'activation de DISCARD peut améliorer les performances d'exécution générales et peut également accélérer les performances de votre disque lors de sa première installation. Formater le volume entier d'un disque peut prendre du temps. Ainsi, le formatage différé est une pratique courante. L'inconvénient de cette pratique, c'est qu'on la paye souvent la première fois que le volume est installé. En désactivant l'initialisation différée et en activant les opérations de suppression, vous pouvez obtenir des opérations de formatage et d'installation rapides.

  • Désactivez l'initialisation différée et activez les opérations de suppression lors du formatage d'un disque en transmettant les paramètres suivants à mkfs.ext4:

    -E lazy_itable_init=0,lazy_journal_init=0,discard
    

    Le paramètre lazy_journal_init=0 ne fonctionne pas sur les instances avec des images CentOS 6 ou RHEL 6. Pour les VM qui utilisent ces systèmes d'exploitation, formatez le disque persistant sans ce paramètre.

    -E lazy_itable_init=0,discard
    
  • Activez les opérations de suppression lors de l'installation d'un disque en transmettant l'option suivante à la commande mount:

    -o discard
    

Persistent Disk fonctionne bien avec les opérations de suppression activées. Cependant, vous pouvez exécuter périodiquement fstrim en plus ou au lieu d'utiliser des opérations de suppression. Si vous n'utilisez pas d'opérations de suppression, exécutez fstrim avant de créer un instantané de votre disque de démarrage. L'ajustement du système de fichiers vous permet de créer des instantanés plus petits, ce qui réduit leur coût de stockage.

Ajuster la valeur readahead

Pour améliorer les performances d'E/S, les systèmes d'exploitation utilisent des techniques telles que readahead, qui consiste à lire une plus grande partie du fichier que nécessaire, en se basant sur l'idée que les lectures ultérieures sont susceptibles d'avoir besoin de ces données. Un cache readahead supérieur augmente le débit au détriment de la mémoire et des IOPS. Un cache readahead plus faible augmente les IOPS au détriment du débit.

Sur les systèmes Linux, vous pouvez obtenir et définir la valeur readahead avec la commande blockdev :

$ sudo blockdev --getra /dev/DEVICE_ID
$ sudo blockdev --setra VALUE /dev/DEVICE_ID

La valeur de readahead est égale à : <desired_readahead_bytes> / 512 octets.

Imaginons que vous désirez définir un readahead de 8 Mo. 8 Mo correspondent à 8 388 608 octets (8 * 1 024 * 1 024).

8388608 bytes / 512 bytes = 16384

Définissez la commande blockdev sur 16384 :

$ sudo blockdev --setra 16384 /dev/DEVICE_ID

Modifiez votre VM ou créez-en une.

Des limites sont associées à chaque type de machine de VM. Elles peuvent avoir un impact sur les performances que vous pouvez obtenir à partir des disques associés. Ces limites sont les suivantes :

  • Les performances des disques persistants augmentent à mesure que le nombre de processeurs virtuels disponibles augmente.
  • L'hyperdisque n'est pas compatible avec tous les types de machines.
  • Les tarifs de sortie réseau augmentent à mesure que le nombre de processeurs virtuels disponibles augmente.

Vérifier que vous disposez de processeurs disponibles

La lecture et l'écriture sur disque persistant consomment des cycles de processeur de votre VM. Pour atteindre des niveaux fiables et élevés d'IOPS, il est nécessaire de disposer de processeurs disponibles pour traiter les E/S.

Pour augmenter le nombre de processeurs virtuels disponibles avec votre VM, vous pouvez créer une VM ou modifier le type de machine d'une instance de VM.

Créez une VM pour bénéficier de nouvelles fonctionnalités.

Les types de disques plus récents ne sont pas compatibles avec toutes les séries de machines et tous les types de machines. Hyperdisque fournit des IOPS ou des taux de débit plus élevés pour vos charges de travail, mais ne sont actuellement disponibles qu'avec quelques séries de machines et nécessitent au moins 64 processeurs virtuels.

Les nouvelles séries de machines de VM s'exécutent généralement sur des processeurs plus récents, qui peuvent offrir de meilleures performances que leurs prédécesseurs. En outre, les processeurs les plus récents peuvent prendre en charge des fonctionnalités supplémentaires pour améliorer les performances de vos charges de travail, telles que les extensions matricielles avancées (AMX) ou les extensions vectorielles avancées Intel (AVX-512).

Étapes suivantes