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 application et votre système d'exploitation peuvent nécessiter des ajustements.

Les sections suivantes décrivent quelques éléments clés qui peuvent être ajustés pour offrir de meilleures performances, et expliquent comment appliquer certains d'entre eux à des types de charges de travail spécifiques.

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. Ils peuvent fournir des IOPS et un débit très élevés, mais vous devez vous assurer que les requêtes d'E/S effectuées en parallèle sont en nombre suffisant. 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 à 50 To

Les charges d'E/S importantes atteignent des performances maximales lorsqu'elles sont limitées à 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. Une plage fait référence à une plage contiguë d'adresses de blocs logiques sur un seul disque physique.

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

Les disques persistants sont compatibles avec les commandes DISCARD ou TRIM, qui permettent aux systèmes d'exploitation d'informer les disques lorsque des 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 DISCARD dès lors que vous installez un disque persistant sur votre instance. De même, les instances Windows Server 2012 R2 activent DISCARD 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, il est courant de faire appel aux fameuses commandes "Lazy". 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 commandes DISCARD, vous pouvez augmenter la rapidité de vos formatages et installations.

  • Désactivez l'initialisation différée et activez DISCARD lors du formatage 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 ces instances, formatez les disques persistants sans ce paramètre.

    -E lazy_itable_init=0,discard
    
  • Activez les commandes DISCARD lors de l'installation en spécifiant l'option suivante à la commande d'installation :

    -o discard
    

Les disques persistants présentent un fonctionnement optimal lorsque l'option discard est activée. Cependant, vous pouvez exécuter périodiquement fstrim en plus de l'option discard, ou en lieu et place de celle-ci. Si vous n'utilisez pas l'option discard, exécutez fstrim avant de créer un instantané de votre disque. 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]

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.

Optimiser vos disques pour les IOPS ou les charges de travail orientées 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.

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.

  • Sur les disques persistants standards, 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.

  • Veiller à ce que votre application soit 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.

  • Sur les disques persistants SSD, veillez à ce que le programmeur d'E/S du système d'exploitation soit configuré pour répondre à vos besoins spécifiques

    Sur les systèmes Linux, vous pouvez paramétrer le programmeur d'E/S sur noop pour obtenir le plus grand nombre d'IOPS sur les appareils utilisant un disque SSD.

Examiner les métriques de performances des disques persistants

Vous pouvez examiner les métriques de performances des disques persistants dans Cloud Monitoring, la solution de surveillance intégrée de Google Cloud.

Plusieurs de ces métriques vous aident à déterminer si et quand vos disques subissent une limitation. La limitation permet d'atténuer les opérations d'E/S intensives. Grâce à elle, les opérations d'E/S intensives peuvent être réparties sur une période donnée, afin que les limites de performances de votre disque puissent être atteintes, mais pas dépassées, à un instant donné.

Pour en savoir plus, consultez la page Examiner les métriques de performances des disques persistants.

Étape suivante