Como otimizar o desempenho da SSD local

O gráfico de desempenho por tipo de disco descreve o desempenho máximo possível para partições SSD locais. Para otimizar os apps e as instâncias de VM visando atingir essas velocidades, use as seguintes práticas recomendadas:

Como usar otimizações do ambiente de convidado para SSDs locais

Por padrão, a maioria das imagens Linux fornecidas pelo Compute Engine executa automaticamente um script de otimização que configura a instância para garantir o desempenho máximo de SSD local. O script também ativa determinadas configurações de filas sysfs (link em inglês) que melhoram o desempenho geral da máquina e mascaram solicitações de interrupção (IRQs, na sigla em inglês) para CPUs virtuais (vCPUs) específicas. Esse script só otimiza o desempenho das partições SSD locais do Compute Engine.

Imagens Ubuntu, SLES e outras mais antigas talvez não estejam configuradas para incluir essa otimização de desempenho. Se você usa qualquer uma dessas imagens ou uma mais antiga que a v20141218, é possível instalar o ambiente convidado para ativar essas otimizações.

Selecionar a melhor imagem para interfaces NVMe ou SCSI

Os SSDs locais expõem uma interface NVMe ou SCSI, e a melhor opção depende do sistema operacional que você está usando. Escolha uma interface para as partições SSD locais que funcionam melhor com sua imagem do disco de inicialização. Caso as suas instâncias conectem-se a SSDs locais usando interfaces SCSI, ative o SCSI multifilas no sistema operacional convidado para melhorar o desempenho na interface do SCSI.

Ativar SCSI multifilas em instâncias com imagens personalizadas e SSDs locais

Algumas imagens públicas são compatíveis com SCSI multifilas. Caso precise de recursos SCSI multifilas em imagens personalizadas importadas para seu projeto, será necessário ativá-las por conta própria. Suas imagens importadas do Linux usam SCSI multifilas somente quando elas incluem a versão 3.19 ou posterior do kernel.

Para ativar o SCSI multifilas em uma imagem personalizada, importe a imagem com o recurso do sistema operacional convidado VIRTIO_SCSI_MULTIQUEUE ativado e inclua uma entrada na configuração do GRUB:

CentOS

Apenas para o CentOS7.

  1. Importe a imagem personalizada usando a API e inclua um item guestOsFeatures com um valor type de VIRTIO_SCSI_MULTIQUEUE.

  2. Crie uma instância usando sua imagem personalizada e anexe um ou mais SSDs locais.

  3. Conecte-se à instância pelo SSH.

  4. Verifique o valor do arquivo /sys/module/scsi_mod/parameters/use_blk_mq

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

    Se o valor desse arquivo for Y, o SCSI multifilas já estará ativado na imagem importada. Se o valor for N, inclua scsi_mod.use_blk_mq=Y na entrada GRUB_CMDLINE_LINUX do arquivo de configuração GRUB e reinicie o sistema.

    1. Abra o arquivo de configuração GRUB /etc/default/grub em um editor de texto.

      $ sudo vi /etc/default/grub
      
    2. Adicione scsi_mod.use_blk_mq=Y à entrada GRUB_CMDLINE_LINUX.

      GRUB_CMDLINE_LINUX=" vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16 scsi_mod.use_blk_mq=Y"
      
    3. Salve o arquivo de configuração.

    4. Execute o comando grub2-mkconfig para gerar novamente o arquivo GRUB e concluir a configuração.

      $ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      
    5. Reinicie a instância.

      $ sudo reboot
      

Ubuntu

  1. Importe a imagem personalizada usando a API do Compute Engine e inclua um item guestOsFeatures com um valor type de VIRTIO_SCSI_MULTIQUEUE.

  2. Crie uma instância usando a imagem personalizada e anexe um ou mais SSDs locais usando a interface SCSI.

  3. Conecte-se à instância pelo SSH.

  4. Verifique o valor do arquivo /sys/module/scsi_mod/parameters/use_blk_mq.

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

    Se o valor desse arquivo for Y, o SCSI multifilas já estará ativado na imagem importada. Se o valor for N, inclua scsi_mod.use_blk_mq=Y na entrada GRUB_CMDLINE_LINUX do arquivo de configuração GRUB e reinicie o sistema.

    1. Abra o arquivo de configuração GRUB sudo nano /etc/default/grub em um editor de texto.

      $ sudo nano /etc/default/grub
      
    2. Adicione scsi_mod.use_blk_mq=Y à entrada GRUB_CMDLINE_LINUX.

      GRUB_CMDLINE_LINUX="scsi_mod.use_blk_mq=Y"
      
    3. Salve o arquivo de configuração.

    4. Execute o comando update-grub para gerar novamente o arquivo GRUB e concluir a configuração.

      $ sudo update-grub
      
    5. Reinicie a instância.

      $ sudo reboot
      

Desativar a limpeza do cache de gravação

Os sistemas de arquivos, bancos de dados e outros apps usam a limpeza de cache (em inglês) para garantir que os dados sejam confirmados para armazenamento durável em diversos checkpoints. Para a maioria dos dispositivos de armazenamento, esse padrão faz sentido. No entanto, as limpezas do cache de gravação são muito lentas em SSDs locais. É possível melhorar o desempenho de gravação para alguns apps desativando comandos de limpeza automática neles ou opções de limpeza no nível do sistema de arquivos.

Os SSDs locais sempre limpam gravações em cache dentro de dois segundos, independentemente dos comandos de limpeza definidos para os sistemas de arquivos e os apps. Dessa forma, as falhas de hardware temporárias podem fazer você perder, no máximo, apenas dois segundos de gravações armazenados em cache. As falhas permanentes de hardware ainda podem causar perda de todos os dados no dispositivo, mesmo eles sendo limpos ou não. Por isso, faça o backup de dados importantes em discos permanentes ou buckets do Cloud Storage.

Para desativar a limpeza do cache de gravação em sistemas de arquivos ext4, inclua a configuração nobarrier (link em inglês) nas opções de ativação ou nas entradas de /etc/fstab. Por exemplo:

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

em que [LOCAL_SSD_ID] é o ID de dispositivo do SSD local que você quer ativar e [MNT_DIR] é o diretório em que será ativado.

A seguir