Os limites de desempenho do SSD local indicados na secção Escolha uma opção de armazenamento foram alcançados através da utilização de definições específicas na instância do SSD local. Se a instância da máquina virtual (VM) tiver problemas em alcançar estes limites de desempenho e já tiver configurado a instância com as definições de SSD local recomendadas, pode comparar os seus limites de desempenho com os limites publicados replicando as definições usadas pela equipa do Compute Engine.
Estas instruções pressupõem que está a usar um sistema operativo Linux com o gestor de pacotes apt
instalado.
Crie uma VM com um dispositivo SSD local
O número de SSDs locais que uma VM pode ter baseia-se no tipo de máquina que usa para criar a VM. Para ver detalhes, consulte o artigo Escolher um número válido de SSDs locais.
Crie uma instância de SSD local com quatro ou oito vCPUs para cada dispositivo, consoante a sua carga de trabalho.
Por exemplo, o comando seguinte cria uma VM C3 com 4 vCPUs e 1 SSD local.
gcloud compute instances create c3-ssd-test-instance \ --machine-type "c3-standard-4-lssd"
Para tipos de máquinas de segunda geração e anteriores, especifica o número de SSDs locais a associar à VM através da sinalização
--local-ssd
. O seguinte comando 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 seguinte script na sua VM. O script replica as definições usadas para alcançar os números de desempenho do SSD fornecidos na secção de desempenho. Tenha em atenção que o parâmetro
--bs
define o tamanho do bloco, o que afeta os resultados para diferentes tipos de operações de leitura e escrita.# 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
Crie uma VM com o número máximo de SSDs locais
Se quiser anexar 24 ou mais dispositivos SSD local a uma instância, use um tipo de máquina com 32 ou mais vCPUs.
Os seguintes comandos criam uma VM com o número máximo permitido de discos SSD locais através da interface NVMe:
Associe 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
Use tipos de máquinas -lssd
As séries de máquinas mais recentes oferecem
-lssd
tipos de máquinas que incluem um número predeterminado de discos SSD locais. Por exemplo, para testar o desempenho de uma VM com 32 SSDs locais (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 domdadm
inclui um pedido ao utilizador que interrompe os scripts. Por isso, execute o 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 quer montar em conjunto:find /dev/ | grep google-local-nvme-ssd
O resultado tem um aspeto semelhante ao seguinte:
/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 encomenda. Não há problema se os dispositivos forem apresentados por uma ordem diferente, desde que o número de linhas de saída corresponda ao número esperado de partições SSD.Se usar dispositivos SCSI, use o seguinte comando
find
:find /dev/ | grep google-local-ssd
Todos os dispositivos NVMe devem ter o formato
google-local-nvme-ssd-#
e todos os dispositivos SCSI devem ter o formatogoogle-local-ssd-#
.Use a ferramenta
mdadm
para combinar vários dispositivos SSD local num único conjunto denominado/dev/md0
. O exemplo seguinte une 24 dispositivos SSD local que usam a interface NVMe. Para dispositivos SSD local que usam SCSI, use os nomes dos dispositivos devolvidos pelo comandofind
no passo 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 à seguinte:
mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
Pode confirmar os detalhes da matriz com
mdadm --detail
. Adicionar o indicador--prefer=by-id
apresenta os dispositivos que usam os caminhos/dev/disk/by-id
.sudo mdadm --detail --prefer=by-id /dev/md0
O resultado deve ser semelhante ao seguinte 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 seguinte script na sua VM. O script replica as definições usadas para alcançar os valores de desempenho de SSD fornecidos na secção de desempenho. O parâmetro
--bs
define o tamanho do bloco, o que afeta os resultados para diferentes tipos de operações de leitura e escrita.# 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=48 --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=48 --rw=randwrite --blocksize=4k --group_reporting --norandommap
Testes de referência de VMs otimizadas para armazenamento
As VMs otimizadas para armazenamento (como a família Z3) devem ser comparadas diretamente com as partições do dispositivo. Pode obter os nomes das partições com
lsblk
lsblk -o name,size -lpn | grep 2.9T | awk '{print $1}'
O resultado tem um aspeto semelhante ao seguinte:
/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 testes de referência nas partições de SSD local separando-as 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
O que se segue?
- Saiba mais sobre os preços dos SSDs locais.