Compara el rendimiento de los SSD locales

Los límites de rendimiento del SSD local que se proporcionan en la sección Elige una opción de almacenamiento se obtuvieron mediante una configuración específica 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 configuraste mediante la configuración de SSD local recomendada, puedes hacer lo siguiente: compara los límites del rendimiento con los límites publicados. Para ello, replica la configuración que usa el equipo de Compute Engine.

En estas instrucciones, se supone que usas un sistema operativo Linux con el administrador de paquetes apt instalado.

Crea una máquina virtual con 8 CPU virtuales y una partición de SSD local

  1. Crea una instancia de SSD local con cuatro o con ocho CPU virtuales para cada dispositivo, según la carga de trabajo. Por ejemplo, si deseas adjuntar cuatro particiones de SSD locales a una instancia, usa un tipo de máquina con 16 o 32 CPU virtuales.

    Con el siguiente comando, se crea una máquina virtual con 8 CPU virtuales y un único SSD local:

    gcloud compute instances create ssd-test-instance \
        --machine-type "n1-standard-8" \
        --local-ssd interface=nvme
    
  2. Ejecuta la siguiente secuencia de comandos en tu VM. La secuencia de comandos replica la configuración que se usó para alcanzar las cifras de rendimiento del SSD proporcionadas en la sección sobre rendimiento. Ten en cuenta que el parámetro --bs define el tamaño del bloque, el cual afecta los resultados para los diferentes tipos de operaciones de lectura y escritura.

    # install dependencies
    sudo apt-get -y update
    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
    make
    sudo ./blkdiscard /dev/disk/by-id/google-local-nvme-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-nvme-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-nvme-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-nvme-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
    

Crea una máquina virtual con 32 CPU virtuales y 24 particiones de SSD locales

  1. Si quieres adjuntar 24 particiones de SSD locales a una instancia, usa un tipo de máquina con 32 CPU virtuales o más.

    El siguiente comando crea una máquina virtual con 32 CPU virtuales y 24 particiones de SSD locales:

    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
    
  2. Ejecuta la siguiente secuencia de comandos en tu VM. La secuencia de comandos replica la configuración que se usó para alcanzar las cifras de rendimiento del SSD proporcionadas en la sección sobre rendimiento. Ten en cuenta que el parámetro --bs define el tamaño del bloque, el cual afecta los resultados para los diferentes tipos de operaciones de lectura y escritura.

    # install dependencies
    sudo apt update -y
    sudo apt 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
    make
    sudo ./blkdiscard /dev/disk/by-id/google-local-nvme-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-nvme-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-nvme-ssd-0 --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 --size=100G --runtime=30 \
    --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=32 --rw=randwrite --blocksize=4k --group_reporting --norandommap
    

¿Qué sigue?