Los límites de rendimiento de las SSD locales que se indican en la sección Elegir una opción de almacenamiento se han conseguido usando ajustes específicos en la instancia de SSD local. Si tu instancia de máquina virtual (VM) tiene problemas para alcanzar estos límites de rendimiento y ya la has configurado con los ajustes de SSD local recomendados, puedes comparar tus límites de rendimiento con los publicados. Para ello, replica los ajustes que utiliza el equipo de Compute Engine.
En estas instrucciones se presupone que usas un sistema operativo Linux con el gestor de paquetes apt
instalado.
Crear una VM con una unidad SSD local
El número de SSD locales que puede tener una VM se basa en el tipo de máquina que uses para crear la VM. Para obtener más información, consulta Elegir un número válido de SSDs locales.
Crea una instancia de SSD local que tenga cuatro u ocho vCPUs por dispositivo, en función de tu carga de trabajo.
Por ejemplo, el siguiente comando crea una VM C3 con 4 vCPUs y 1 SSD local.
gcloud compute instances create c3-ssd-test-instance \ --machine-type "c3-standard-4-lssd"
En los tipos de máquinas de segunda generación y anteriores, se especifica el número de SSD local que se va a asociar a la VM mediante la marca
--local-ssd
. El siguiente comando crea una VM N2 con 8 vCPUs y 1 SSD local que usa la interfaz de disco NVMe:gcloud compute instances create ssd-test-instance \ --machine-type "n2-standard-8" \ --local-ssd interface=nvme
Ejecuta la siguiente secuencia de comandos en tu máquina virtual. La secuencia de comandos replica los ajustes utilizados para obtener las cifras de rendimiento de SSD que se indican en la sección de rendimiento. Ten en cuenta que el parámetro
--bs
define el tamaño del bloque, lo que afecta a los resultados de los distintos tipos de operaciones de lectura y escritura.# 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
Crear una VM con el número máximo de SSD locales
Si quieres adjuntar 24 o más dispositivos SSD locales a una instancia, usa un tipo de máquina con 32 vCPUs o más.
Los siguientes comandos crean una VM con el número máximo permitido de discos SSD locales mediante la interfaz NVMe:
Asociar un SSD local a una 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
Las series de máquinas más recientes ofrecen tipos de máquinas
-lssd
que incluyen un número predeterminado de discos SSD locales. Por ejemplo, para comparar el rendimiento de una VM con 32 SSD locales (12 TiB de capacidad), usa el siguiente comando:gcloud compute instances create ssd-test-instance \ --machine-type "c3-standard-176-lssd"
Instala la herramienta
mdadm
. El proceso de instalación demdadm
incluye una petición al usuario que detiene las secuencias de comandos, por lo que debes ejecutar el proceso manualmente:Debian y Ubuntu
sudo apt update && sudo apt install mdadm --no-install-recommends
CentOS y RHEL
sudo yum install mdadm -y
SLES y openSUSE
sudo zypper install -y mdadm
Usa el comando
find
para identificar todas las unidades SSD locales que quieras montar juntas:find /dev/ | grep google-local-nvme-ssd
El resultado es similar al siguiente:
/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
no garantiza un orden. No importa si los dispositivos se muestran en un orden diferente, siempre que el número de líneas de salida coincida con el número esperado de particiones SSD.Si usas dispositivos SCSI, utiliza el siguiente comando
find
:find /dev/ | grep google-local-ssd
Todos los dispositivos NVMe deben tener el formato
google-local-nvme-ssd-#
y todos los dispositivos SCSI deben tener el formatogoogle-local-ssd-#
.Usa la herramienta
mdadm
para combinar varias unidades SSD locales en una sola matriz llamada/dev/md0
. En el siguiente ejemplo se combinan 24 dispositivos SSD locales que usan la interfaz NVMe. En el caso de los dispositivos SSD local que usan SCSI, utiliza los nombres de dispositivo devueltos por el comandofind
del paso 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
La respuesta es similar a la siguiente:
mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
Puedes confirmar los detalles de la matriz con
mdadm --detail
. Si añade la marca--prefer=by-id
, se mostrarán los dispositivos que usen las rutas/dev/disk/by-id
.sudo mdadm --detail --prefer=by-id /dev/md0
La salida debería ser similar a la siguiente para cada dispositivo de la matriz.
... Number Major Minor RaidDevice State 0 259 0 0 active sync /dev/disk/by-id/google-local-nvme-ssd-0 ...
Ejecuta la siguiente secuencia de comandos en tu máquina virtual. La secuencia de comandos replica los ajustes utilizados para obtener las cifras de rendimiento de SSD que se indican en la sección de rendimiento. El parámetro
--bs
define el tamaño del bloque, lo que afecta a los resultados de los diferentes tipos de operaciones de lectura y escritura.# 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
Comparativas de VMs optimizadas para almacenamiento
Las máquinas virtuales con almacenamiento optimizado (como la familia Z3) deben compararse directamente con las particiones del dispositivo. Puedes obtener los nombres de las particiones con
lsblk
lsblk -o name,size -lpn | grep 2.9T | awk '{print $1}'
El resultado es similar al siguiente:
/dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1 /dev/nvme8n1 /dev/nvme9n1 /dev/nvme10n1 /dev/nvme11n1 /dev/nvme12n1
Ejecuta directamente las comparativas en las particiones de SSD locales separándolas con delimitadores de dos puntos.
# 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
Siguientes pasos
- Consulta los precios de las SSD locales.