Optimiser les performances des disques SSD locaux

Optimiser les disques SSD locaux

Le tableau des performances par type de disque décrit les performances maximales réalisables pour les disques SSD locaux. Pour optimiser vos applications et instances de VM afin d'atteindre ces vitesses, conformez-vous aux bonnes pratiques suivantes :

Utilisez les optimisations pour les disques SSD locaux de l'environnement invité

Par défaut, la plupart des images Linux fournies par Compute Engine exécutent automatiquement un script d'optimisation qui configure l'instance pour des performances maximales des disques SSD locaux. Ce script active certains paramètres des fichiers de file d'attente sysfs, qui améliorent les performances globales de votre machine et masquent les requêtes d'interruption (IRQ) sur des processeurs virtuels spécifiques. Ce script optimise uniquement les performances des périphériques SSD locaux Compute Engine.

Ubuntu, SLES et d'autres images plus anciennes peuvent ne pas fournir cette optimisation des performances. Si vous utilisez l'une de ces images ou une image antérieure à v20141218, vous pouvez installer l'environnement invité pour activer ces optimisations.

Sélectionnez la meilleure image pour les interfaces NVMe ou SCSI

Les disques SSD locaux fonctionnent avec l'interface NVMe ou SCSI. La meilleure option dépend du système d'exploitation que vous utilisez. Choisissez une interface pour vos périphériques SSD locaux qui donnera des résultats optimaux avec votre image de disque de démarrage. Si vos instances se connectent à des disques SSD locaux à l'aide d'interfaces SCSI, vous pouvez activer le mode SCSI à files d'attente multiples sur le système d'exploitation invité, afin d'obtenir des performances optimales sur l'interface SCSI.

Activez le mode SCSI à files d'attente multiples sur des instances dotées d'images personnalisées et de disques SSD locaux

Certaines images publiques sont compatibles avec le mode SCSI à files d'attente multiples. Si vous avez besoin de cette capacité pour des images personnalisées que vous importez dans votre projet, vous devez l'activer vous-même. Vos images Linux importées ne peuvent utiliser le mode SCSI à files d'attente multiples que si elles incluent la version de noyau 3.19 ou ultérieure.

Pour activer le mode SCSI à files d'attente multiples sur une image personnalisée, importez l'image en activant la fonctionnalité de système d'exploitation invité VIRTIO_SCSI_MULTIQUEUE et ajoutez une entrée à votre configuration GRUB :

CentOS

Pour CentOS7 uniquement.

  1. Importez votre image personnalisée à l'aide de l'API, et incluez un élément guestOsFeatures avec une valeur type de VIRTIO_SCSI_MULTIQUEUE.

  2. Créez une instance à l'aide de votre image personnalisée et associez un ou plusieurs disques SSD locaux.

  3. Connectez-vous à votre instance via SSH.

  4. Vérifiez la valeur du fichier /sys/module/scsi_mod/parameters/use_blk_mq

    $ cat /sys/module/scsi_mod/parameters/use_blk_mq
    

    Si la valeur de ce fichier est Y, le mode SCSI à files d'attente multiples est déjà activé sur votre image importée. Si la valeur du fichier est N, incluez scsi_mod.use_blk_mq=Y dans l'entrée GRUB_CMDLINE_LINUX de votre fichier de configuration GRUB et redémarrez le système.

    1. Ouvrez le fichier de configuration GRUB /etc/default/grub dans un éditeur de texte.

      $ sudo vi /etc/default/grub
      
    2. Ajoutez scsi_mod.use_blk_mq=Y à l'entrée GRUB_CMDLINE_LINUX.

      GRUB_CMDLINE_LINUX=" vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16 scsi_mod.use_blk_mq=Y"
      
    3. Enregistrez le fichier de configuration.

    4. Exécutez la commande grub2-mkconfig pour régénérer le fichier GRUB et terminer la configuration.

      $ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      
    5. Redémarrez l'instance.

      $ sudo reboot
      

Ubuntu

  1. Importez votre image personnalisée à l'aide de l'API, et incluez un élément guestOsFeatures avec une valeur type de VIRTIO_SCSI_MULTIQUEUE.

  2. Créez une instance à l'aide de votre image personnalisée et associez un ou plusieurs disques SSD locaux via l'interface SCSI.

  3. Connectez-vous à votre instance via SSH.

  4. Vérifiez la valeur du fichier /sys/module/scsi_mod/parameters/use_blk_mq.

    $ cat /sys/module/scsi_mod/parameters/use_blk_mq
    

    Si la valeur de ce fichier est Y, le mode SCSI à files d'attente multiples est déjà activé sur votre image importée. Si la valeur du fichier est N, incluez scsi_mod.use_blk_mq=Y dans l'entrée GRUB_CMDLINE_LINUX de votre fichier de configuration GRUB et redémarrez le système.

    1. Ouvrez le fichier de configuration GRUB sudo nano /etc/default/grub dans un éditeur de texte.

      $ sudo nano /etc/default/grub
      
    2. Ajoutez scsi_mod.use_blk_mq=Y à l'entrée GRUB_CMDLINE_LINUX.

      GRUB_CMDLINE_LINUX="scsi_mod.use_blk_mq=Y"
      
    3. Enregistrez le fichier de configuration.

    4. Exécutez la commande update-grub pour régénérer le fichier GRUB et terminer la configuration.

      $ sudo update-grub
      
    5. Redémarrez l'instance.

      $ sudo reboot
      

Désactivez le vidage du cache en écriture

Les systèmes de fichiers, les bases de données et d'autres applications utilisent le vidage du cache pour garantir un stockage durable des données à différents points de contrôle. Pour la plupart des périphériques de stockage, ce paramètre par défaut est très pertinent. Cependant, les vidages de cache en écriture sont assez lents sur les disques SSD locaux. Vous pouvez augmenter les performances d'écriture pour certaines applications en désactivant les commandes de vidage automatique dans ces applications, ou en désactivant les options de vidage au niveau du système de fichiers.

Les disques SSD locaux vident toujours les écritures mises en cache en moins de deux secondes, quelles que soient les commandes de vidage que vous définissez pour vos systèmes de fichiers et vos applications. Vous ne perdrez ainsi pas plus de deux secondes d'écritures mises en cache en cas de défaillance matérielle temporaire. Cependant, des pannes matérielles sévères peuvent toujours entraîner la perte de toutes les données stockées sur l'appareil, qu'elles aient été vidées ou non. Vous devez donc toujours sauvegarder les données critiques sur des disques persistants ou des buckets Cloud Storage.

Pour désactiver le vidage du cache en écriture sur les systèmes de fichiers ext4, incluez la commande nobarrier dans vos options d'installation ou dans vos entrées /etc/fstab. Exemple :

$ sudo mount -o discard,defaults,nobarrier /dev/[LOCAL_SSD_ID] /mnt/disks/[MNT_DIR]

[LOCAL_SSD_ID] correspond à l'ID d'appareil du disque SSD local que vous souhaitez installer, et [MNT_DIR] au répertoire d'installation.

Effectuer l'analyse comparative des performances d'un disque SSD local

Les niveaux de performances d'un disque SSD local décrits dans la section Performances ont été obtenus à l'aide de paramètres spécifiques sur l'instance SSD locale. Si votre instance a des difficultés à atteindre ces limites de performances alors que vous l'avez déjà configurée conformément aux paramètres de disque SSD local recommandés, vous pouvez comparer vos limites de performances aux limites publiées en répliquant les paramètres utilisés par l'équipe Compute Engine.

  1. Créez une instance SSD locale dotée de quatre ou huit processeurs virtuels pour chaque appareil, en fonction de votre charge de travail. Par exemple, si vous souhaitez associer quatre périphériques SSD locaux à une instance, utilisez un type de machine doté de 16 ou 32 processeurs virtuels.

    La commande suivante crée une VM avec huit processeurs virtuels et un seul disque SSD local :

    gcloud compute instances create ssd-test-instance \
    --machine-type "n1-standard-8" \
    --local-ssd interface="SCSI"
    
  2. Exécutez le script suivant sur votre VM. Il réplique les paramètres utilisés pour atteindre les niveaux de performances des disques SSD locaux décrits dans la section Performances. Notez que le paramètre --bs définit la taille du bloc, ce qui affecte les résultats pour les différents types d'opérations de lecture et d'écriture.

    # install dependencies
    sudo apt-get update -y
    sudo apt-get install -y build-essential git libtool gettext autoconf \
    libgconf2-dev libncurses5-dev python-dev fio bison autopoint
    
    # blkdiscard
    git clone https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git
    cd util-linux/
    ./autogen.sh
    ./configure --disable-libblkid
    make
    sudo mv blkdiscard /usr/bin/
    sudo blkdiscard /dev/disk/by-id/google-local-ssd-0
    
    # full write pass - measures write bandwidth with 1M blocksize
    sudo fio --name=writefile --size=100G --filesize=100G \
    --filename=/dev/disk/by-id/google-local-ssd-0 --bs=1M --nrfiles=1 \
    --direct=1 --sync=0 --randrepeat=0 --rw=write --refill_buffers --end_fsync=1 \
    --iodepth=200 --ioengine=libaio
    
    # rand read - measures max read IOPS with 4k blocks
    sudo fio --time_based --name=benchmark --size=100G --runtime=30 \
    --filename=/dev/disk/by-id/google-local-ssd-0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=4 --rw=randread --blocksize=4k --group_reporting
    
    # rand write - measures max write IOPS with 4k blocks
    sudo fio --time_based --name=benchmark --size=100G --runtime=30 \
    --filename=/dev/disk/by-id/google-local-ssd-0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=4 --rw=randwrite --blocksize=4k --group_reporting
    

Étape suivante

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Compute Engine