Os limites de desempenho do SSD local fornecidos na seção Escolher uma opção de armazenamento foram conseguidos por meio de configurações específicas na instância do SSD local. Se sua instância de máquina virtual (VM) estiver enfrentando problemas para atingir esses limites de desempenho, e você já tiver configurado a instância usando as configurações recomendadas de SSD local, será possível comparar os limites de desempenho com os limites publicados ao replicar as configurações usadas pela equipe do Compute Engine.
Estas instruções pressupõem que você esteja usando um sistema operacional Linux com o
gerenciador de pacotes apt
instalado.
Criar uma VM com um dispositivo SSD local
O número de SSDs locais que uma VM pode ter depende do tipo de máquina usado para criar a VM. Para mais detalhes, consulte Como escolher um número válido de SSDs locais.
Crie uma instância de SSD local que tenha quatro ou oito vCPUs para cada dispositivo, dependendo da carga de trabalho.
Por exemplo, o comando abaixo cria uma VM C3 com quatro vCPUs e um SSD local.
gcloud compute instances create c3-ssd-test-instance \ --machine-type "c3-standard-4-lssd"
Para tipos de máquina de segunda geração e anteriores, especifique o número de SSD local a ser anexado à VM usando a flag
--local-ssd
. O comando a seguir cria uma VM N2 com 8 vCPUs e 1 SSD local que usa a interface de disco NVMe:gcloud compute instances create ssd-test-instance \ --machine-type "n2-standard-8" \ --local-ssd interface=nvme
Execute o script a seguir na VM. Ele replica as configurações usadas para atingir os valores de desempenho do SSD fornecidos na seção "Desempenho". O parâmetro
--bs
define o tamanho do bloco, o que afeta os resultados para diferentes tipos de operações de leitura e gravação.# install tools sudo apt-get -y update sudo apt-get install -y fio util-linux # discard Local SSD sectors sudo blkdiscard /dev/disk/by-id/google-local-nvme-ssd-0 # full write pass - measures write bandwidth with 1M blocksize sudo fio --name=writefile \ --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --bs=1M --nrfiles=1 \ --direct=1 --sync=0 --randrepeat=0 --rw=write --end_fsync=1 \ --iodepth=128 --ioengine=libaio # rand read - measures max read IOPS with 4k blocks sudo fio --time_based --name=readbenchmark --runtime=30 --ioengine=libaio \ --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --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=writebenchmark --runtime=30 --ioengine=libaio \ --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --randrepeat=0 \ --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \ --numjobs=4 --rw=randwrite --blocksize=4k --group_reporting
Criar uma VM com o número máximo de SSDs locais
Para anexar 24 ou mais dispositivos SSD locais a uma instância, use um tipo de máquina com 32 ou mais vCPUs.
Os comandos a seguir criam uma VM com o número máximo permitido de discos SSD locais usando a interface NVMe:
Anexar um SSD local à VM
gcloud compute instances create ssd-test-instance \ --machine-type "n1-standard-32" \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme
Usar tipos de máquinas -lssd
As séries de máquinas mais recentes oferecem tipos de máquinas
-lssd
que vêm com um número predeterminado de discos SSD locais. Por exemplo, para comparar uma VM com 32 SSD local (capacidade de 12 TiB), use o seguinte comando:gcloud compute instances create ssd-test-instance \ --machine-type "c3-standard-176-lssd"
Instale a ferramenta
mdadm
. O processo de instalação demdadm
inclui um prompt do usuário que interrompe os scripts. Por isso, execute esse processo manualmente:Debian e Ubuntu
sudo apt update && sudo apt install mdadm --no-install-recommends
CentOS e RHEL
sudo yum install mdadm -y
SLES e openSUSE
sudo zypper install -y mdadm
Use o comando
find
para identificar todos os SSDs locais que você quer ativar:find /dev/ | grep google-local-nvme-ssd
A saída será assim:
/dev/disk/by-id/google-local-nvme-ssd-23 /dev/disk/by-id/google-local-nvme-ssd-22 /dev/disk/by-id/google-local-nvme-ssd-21 /dev/disk/by-id/google-local-nvme-ssd-20 /dev/disk/by-id/google-local-nvme-ssd-19 /dev/disk/by-id/google-local-nvme-ssd-18 /dev/disk/by-id/google-local-nvme-ssd-17 /dev/disk/by-id/google-local-nvme-ssd-16 /dev/disk/by-id/google-local-nvme-ssd-15 /dev/disk/by-id/google-local-nvme-ssd-14 /dev/disk/by-id/google-local-nvme-ssd-13 /dev/disk/by-id/google-local-nvme-ssd-12 /dev/disk/by-id/google-local-nvme-ssd-11 /dev/disk/by-id/google-local-nvme-ssd-10 /dev/disk/by-id/google-local-nvme-ssd-9 /dev/disk/by-id/google-local-nvme-ssd-8 /dev/disk/by-id/google-local-nvme-ssd-7 /dev/disk/by-id/google-local-nvme-ssd-6 /dev/disk/by-id/google-local-nvme-ssd-5 /dev/disk/by-id/google-local-nvme-ssd-4 /dev/disk/by-id/google-local-nvme-ssd-3 /dev/disk/by-id/google-local-nvme-ssd-2 /dev/disk/by-id/google-local-nvme-ssd-1 /dev/disk/by-id/google-local-nvme-ssd-0
find
não garante uma ordem. Tudo certo se os dispositivos estiverem listados em uma ordem diferente, desde que o número de linhas de saída corresponda ao número esperado de partições SSD.Se estiver usando dispositivos SCSI, use o seguinte comando
find
:find /dev/ | grep google-local-ssd
Os dispositivos NVMe precisam estar no formato
google-local-nvme-ssd-#
, e os dispositivos SCSI precisam estar no formatogoogle-local-ssd-#
.Use a ferramenta
mdadm
para combinar vários dispositivos de SSD local em uma única matriz chamada/dev/md0
. O exemplo a seguir mescla 24 dispositivos SSD locais que usam a interface do NVMe. Para dispositivos SSD locais que usam o SCSI, use os nomes de dispositivos retornados do comandofind
na etapa 3.sudo mdadm --create /dev/md0 --level=0 --raid-devices=24 \ /dev/disk/by-id/google-local-nvme-ssd-0 \ /dev/disk/by-id/google-local-nvme-ssd-1 \ /dev/disk/by-id/google-local-nvme-ssd-2 \ /dev/disk/by-id/google-local-nvme-ssd-3 \ /dev/disk/by-id/google-local-nvme-ssd-4 \ /dev/disk/by-id/google-local-nvme-ssd-5 \ /dev/disk/by-id/google-local-nvme-ssd-6 \ /dev/disk/by-id/google-local-nvme-ssd-7 \ /dev/disk/by-id/google-local-nvme-ssd-8 \ /dev/disk/by-id/google-local-nvme-ssd-9 \ /dev/disk/by-id/google-local-nvme-ssd-10 \ /dev/disk/by-id/google-local-nvme-ssd-11 \ /dev/disk/by-id/google-local-nvme-ssd-12 \ /dev/disk/by-id/google-local-nvme-ssd-13 \ /dev/disk/by-id/google-local-nvme-ssd-14 \ /dev/disk/by-id/google-local-nvme-ssd-15 \ /dev/disk/by-id/google-local-nvme-ssd-16 \ /dev/disk/by-id/google-local-nvme-ssd-17 \ /dev/disk/by-id/google-local-nvme-ssd-18 \ /dev/disk/by-id/google-local-nvme-ssd-19 \ /dev/disk/by-id/google-local-nvme-ssd-20 \ /dev/disk/by-id/google-local-nvme-ssd-21 \ /dev/disk/by-id/google-local-nvme-ssd-22 \ /dev/disk/by-id/google-local-nvme-ssd-23
A resposta é semelhante a:
mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
É possível confirmar os detalhes da matriz com
mdadm --detail
. Adicionar a sinalização--prefer=by-id
listará os dispositivos usando os caminhos/dev/disk/by-id
.sudo mdadm --detail --prefer=by-id /dev/md0
A saída será semelhante à mostrada a seguir para cada dispositivo na matriz.
... Number Major Minor RaidDevice State 0 259 0 0 active sync /dev/disk/by-id/google-local-nvme-ssd-0 ...
Execute o script a seguir na VM. Ele replica as configurações usadas para atingir os valores de desempenho do SSD fornecidos na seção "Desempenho". O parâmetro
--bs
define o tamanho do bloco, que afeta os resultados de diferentes tipos de operações de leitura e gravação.# install tools sudo apt-get -y update sudo apt-get install -y fio util-linux # full write pass - measures write bandwidth with 1M blocksize sudo fio --name=writefile \ --filename=/dev/md0 --bs=1M --nrfiles=1 \ --direct=1 --sync=0 --randrepeat=0 --rw=write --end_fsync=1 \ --iodepth=128 --ioengine=libaio # rand read - measures max read IOPS with 4k blocks sudo fio --time_based --name=benchmark --runtime=30 \ --filename=/dev/md0 --ioengine=libaio --randrepeat=0 \ --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \ --numjobs=32 --rw=randread --blocksize=4k --group_reporting --norandommap # rand write - measures max write IOPS with 4k blocks sudo fio --time_based --name=benchmark --runtime=30 \ --filename=/dev/md0 --ioengine=libaio --randrepeat=0 \ --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \ --numjobs=32 --rw=randwrite --blocksize=4k --group_reporting --norandommap
Comparação de VMs otimizadas para armazenamento
As VMs com otimização para armazenamento (como a família Z3) precisam ser comparadas diretamente com as partições do dispositivo. É possível conferir os nomes das partições com
lsblk
.lsblk -o name,size -lpn | grep 2.9T | awk '{print $1}'
A saída será assim:
/dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1 /dev/nvme8n1 /dev/nvme9n1 /dev/nvme10n1 /dev/nvme11n1 /dev/nvme12n1
Execute diretamente os comparativos de mercado nas partições do SSD local separando-os com delimitadores de dois-pontos.
# install benchmarking tools sudo apt-get -y update sudo apt-get install -y fio util-linux # Full Write Pass. # SOVM achieves max read performance on previously written/discarded ranges. sudo fio --readwrite=write --blocksize=1m --iodepth=4 --ioengine=libaio \ --direct=1 --group_reporting \ --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \ --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \ --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \ --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \ --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \ --name=job11 --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1 # rand read - measures max read IOPS with 4k blocks sudo fio --readwrite=randread --blocksize=4k --iodepth=128 \ --numjobs=4 --direct=1 --runtime=30 --group_reporting --ioengine=libaio \ --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \ --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \ --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \ --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \ --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \ --name=job11 --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1 # rand write - measures max write IOPS with 4k blocks sudo fio --readwrite=randwrite --blocksize=4k --iodepth=128 \ --numjobs=4 --direct=1 --runtime=30 --group_reporting --ioengine=libaio \ --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \ --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \ --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \ --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \ --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \ --name=job11 --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1
A seguir
- Saiba mais sobre Preços de SSD local.