Para comparar el rendimiento de Hyperdisk de Google Cloud, usa Flexible I/O tester (FIO) en lugar de otras herramientas de comparación de discos, como dd
.
De forma predeterminada, dd
usa una profundidad de cola de E/S muy baja, por lo que es difícil asegurarse de que la prueba de rendimiento genere un número suficiente de bytes y operaciones de E/S para probar con precisión el rendimiento del disco.
Además, los dispositivos especiales que se usan con dd
suelen ser muy lentos y no reflejan con precisión el rendimiento del disco. Por lo general, evita usar dispositivos especiales, como /dev/urandom
, /dev/random
y /dev/zero
, en tus comparativas de rendimiento de Hyperdisk.
Para medir las IOPS y el rendimiento de un disco en uso en una instancia en ejecución, ejecuta una prueba comparativa del sistema de archivos con la configuración prevista. Usa esta opción para probar una carga de trabajo realista sin perder el contenido de tu disco. Ten en cuenta que, al comparar el rendimiento del sistema de archivos en un disco, hay muchos factores específicos de tu entorno de desarrollo que pueden afectar a los resultados de la prueba comparativa, por lo que es posible que no alcances los límites de rendimiento del disco.
Para medir el rendimiento sin procesar de un Hyperdisk, compara el rendimiento del dispositivo de bloque directamente. Usa esta opción para comparar el rendimiento del disco sin formato con los límites de rendimiento de Hyperdisk.
Los siguientes comandos funcionan con sistemas operativos Debian o Ubuntu con el gestor de paquetes apt
.
Hacer comparativas de las IOPS y el rendimiento de un disco en una instancia en ejecución
Si quieres medir las IOPS y el rendimiento de una carga de trabajo realista en un disco activo de una instancia de máquina virtual en ejecución sin perder el contenido del disco, haz una prueba comparativa con un nuevo directorio del sistema de archivos.
Prepararse para las pruebas
Instala las dependencias:
sudo apt update sudo apt install -y fio
Si el volumen de Hyperdisk aún no está formateado, formatea y monta el disco.
En el terminal, enumera los discos conectados a tu VM y busca el disco que quieras probar.
sudo lsblk
El comando anterior genera un resultado similar al siguiente:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 10G 0 disk ├─nvme0n1p1 259:1 0 9.9G 0 part / ├─nvme0n1p14 259:2 0 4M 0 part └─nvme0n1p15 259:3 0 106M 0 part /boot/efi nvme0n2 259:4 0 3.4T 0 disk
En este ejemplo, vamos a probar un volumen Hyperdisk Extreme de 3500 GiB con el nombre de dispositivo
nvme0n2
.Crea un directorio llamado
fiotest
en el disco. En este ejemplo, el disco está montado en/mnt/disks/mnt_dir
:TEST_DIR=/mnt/disks/mnt_dir/fiotest sudo mkdir -p $TEST_DIR
Si la VM usa la interfaz de disco NVMe para la conexión del volumen de Hyperdisk (si el nombre del disco sin formato empieza por
nvme
), sigue estos pasos para obtener el número de nodos NUMA disponibles para la VM.La estrategia de creación de comparativas para discos NVMe es diferente en las VMs con un solo nodo NUMA y en las VMs con más de un nodo NUMA. Cuando se prueba el rendimiento de Hyperdisk con la interfaz de disco NVMe, solo se asignan 256 tamaños de cola NVMe por cola. Debido a los tamaños de cola NVMe limitados disponibles y a la posible contención de los otros discos conectados a la misma VM, estas pruebas de rendimiento usan dos colas de disco NVMe para mantener un tamaño de cola agregado capaz de gestionar la profundidad de E/S de 256.
Obtiene el número de nodos NUMA.
lscpu | grep -i 'numa node(s)' | awk '{print $NF}'
Si la VM solo tiene un nodo NUMA, obtén la asignación de la cola de CPU a NVMe. Usará esta información más adelante para el parámetro
--cpus-allowed
.QUEUE_1_CPUS=$(cat /sys/class/block/nvme0n2/mq/*/cpu_list | sed -n 1p | tr -d " \t") QUEUE_2_CPUS=$(cat /sys/class/block/nvme0n2/mq/*/cpu_list | sed -n 2p | tr -d " \t")
Rendimiento de escritura de prueba
Prueba el rendimiento de escritura realizando escrituras secuenciales con varias secuencias paralelas (16 o más), usando un tamaño de bloque de E/S de 1 MB y una profundidad de E/S de al menos 64.
Si el volumen de Hyperdisk usa la interfaz SCSI:
sudo fio --directory=$TEST_DIR \ --numjobs=16 --size=10G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --name=write_throughput
Si el volumen de Hyperdisk usa la interfaz NVMe:
Si la VM solo tiene un nodo NUMA, usa el siguiente comando:
sudo fio --directory=$TEST_DIR --numjobs=8 \ --size=10G --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --cpus_allowed_policy=split \ --group_reporting \ --name=write_throughput --cpus_allowed=$QUEUE_1_CPUS \ --name=write_throughput_2 --cpus_allowed=$QUEUE_2_CPUS
Si la VM tiene más de un nodo NUMA, usa el siguiente comando:
sudo fio --directory=$TEST_DIR --numjobs=8 \ --size=10G --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --group_reporting \ --name=write_throughput --numa_cpu_nodes=0 \ --name=write_throughput_2 --numa_cpu_nodes=1
IOPS de escritura de prueba
Prueba las IOPS de escritura realizando escrituras aleatorias con un tamaño de bloque de E/S de 4 KB y una profundidad de E/S de al menos 256.
Si el volumen de Hyperdisk se ha adjuntado mediante la interfaz SCSI:
sudo fio --directory=$TEST_DIR \ --numjobs=16 --size=10G -time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --name=write_iops
Si el volumen de Hyperdisk usa la interfaz NVMe:
Si la VM solo tiene un nodo NUMA, usa el siguiente comando:
sudo fio --directory=$TEST_DIR --numjobs=8 \ --size=10G --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --cpus_allowed_policy=split \ --group_reporting \ --name=write_iops --cpus_allowed=$QUEUE_1_CPUS \ --name=write_iops_2 --cpus_allowed=$QUEUE_2_CPUS
Si la VM tiene más de un nodo NUMA, usa el siguiente comando:
sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --group_reporting \ --name=write_iops --numa_cpu_nodes=0 \ --name=write_iops_2 --numa_cpu_nodes=1
Prueba de rendimiento de lectura
Prueba el rendimiento de lectura realizando lecturas secuenciales con varias secuencias paralelas (16 o más), usando un tamaño de bloque de E/S de 1 MB y una profundidad de E/S de al menos 64.
Si el volumen de Hyperdisk usa la interfaz SCSI:
sudo fio --directory=$TEST_DIR \ --numjobs=16 --size=10G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --name=read_throughput
Si el volumen de Hyperdisk usa la interfaz NVMe:
Si la VM solo tiene un nodo NUMA, usa el siguiente comando:
sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --cpus_allowed_policy=split \ --group_reporting \ --name=read_throughput --cpus_allowed=$QUEUE_1_CPUS \ --name=read_throughput_2 --cpus_allowed=$QUEUE_2_CPUS
Si la VM tiene más de un nodo NUMA, usa el siguiente comando:
sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --group_reporting \ --name=read_throughput --numa_cpu_nodes=0 \ --name=read_throughput_2 --numa_cpu_nodes=1
IOPS de lectura de prueba
Prueba las IOPS de lectura realizando lecturas aleatorias con un tamaño de bloque de E/S de 4 KB y una profundidad de E/S de al menos 256.
Si el volumen de Hyperdisk usa la interfaz SCSI:
sudo fio --directory=$TEST_DIR \ --numjobs=16 --size=10G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --name=read_iops
Si el volumen de Hyperdisk usa la interfaz NVMe:
Si la VM solo tiene un nodo NUMA, usa el siguiente comando:
sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --cpus_allowed_policy=split \ --group_reporting \ --name=read_iops --cpus_allowed=$QUEUE_1_CPUS \ --name=read_iops_2 --cpus_allowed=$QUEUE_2_CPUS
Si la VM tiene más de un nodo NUMA, usa el siguiente comando:
sudo fio --directory=$TEST_DIR --numjobs=8 --size=10G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --group_reporting \ --name=read_iops --numa_cpu_nodes=0 \ --name=read_iops_2 --numa_cpu_nodes=1
Limpieza
Elimina los directorios de prueba.
sudo rm $TEST_DIR/write* $TEST_DIR/read*
Comparativas de IOPS y rendimiento de Hyperdisk Extreme en máquinas virtuales C3
Google Cloud Hyperdisk Extreme ofrece un mayor rendimiento en las VMs C3 con 176 vCPUs. Para alcanzar los límites de rendimiento más altos, debes adjuntar varios volúmenes de Hyperdisk Extreme a la VM.
Para medir las operaciones de entrada/salida por segundo (IOPS) o el rendimiento de una carga de trabajo realista en discos activos de una máquina virtual C3 en ejecución sin perder el contenido de los discos de datos, haz una prueba de rendimiento con un nuevo directorio en el sistema de archivos y conecta nuevos volúmenes de Hyperdisk Extreme a la máquina virtual para las tareas de prueba de rendimiento.
En el caso de los discos conectados con la interfaz NVMe, se recomienda distribuir la carga de trabajo de E/S entre todas las colas NVMe disponibles para la VM. De esta forma, se maximiza el rendimiento del volumen de Hyperdisk. En las máquinas virtuales C3 con 176 vCPUs, hay cuatro nodos NUMA asignados de forma individual a cuatro colas NVMe. Esta asignación se da por supuesta en las pruebas comparativas de esta sección.
Prepararse para las pruebas
Añade nuevos discos Hyperdisk Extreme a tu VM y consulta los límites de rendimiento de Hyperdisk para determinar la configuración de disco que necesitas para alcanzar el rendimiento objetivo.
Conéctate a tu instancia:
Instala las dependencias:
sudo apt update sudo apt install -y fio
Enumera los discos conectados a tu VM y busca el disco que quieras probar.
sudo lsblk
El comando anterior genera un resultado similar al siguiente:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 10G 0 disk ├─nvme0n1p1 259:1 0 9.9G 0 part / ├─nvme0n1p14 259:2 0 4M 0 part └─nvme0n1p15 259:3 0 106M 0 part /boot/efi nvme0n2 259:4 0 2.5T 0 disk nvme0n3 259:5 0 2.5T 0 disk nvme0n4 259:6 0 2.5T 0 disk
En este ejemplo, vamos a probar el rendimiento de Google Cloud Hyperdisk en tres volúmenes de Hyperdisk Extreme de 2500 GiB con dispositivos llamados
nvme0n2
,nvme0n3
ynvme0n4
.
Comparar el rendimiento de Hyperdisk Extreme en C3
En esta sección se muestra cómo comparar el rendimiento de lectura y escritura de los discos Hyperdisk Extreme.
Preparación para las pruebas
Antes de empezar a medir el rendimiento de los discos Hyperdisk Extreme conectados a una VM C3 con 176 vCPUs, completa los siguientes pasos.
Crea un directorio llamado
fiotest
en tu sistema operativo. En este ejemplo, el directorio raíz es/mnt/disks/mnt_dir
:TEST_DIR=/mnt/disks/mnt_dir/fiotest sudo mkdir -p $TEST_DIR
Como la VM necesita más de un disco para alcanzar los niveles de rendimiento más altos, por motivos de simplicidad, realiza RAID 0 en todos los volúmenes de Hyperdisk conectados. De esta forma, los datos se distribuyen de manera uniforme entre varios volúmenes de Hyperdisk.
En este ejemplo, RAID 0 es el rendimiento de tres volúmenes Hyperdisk Extreme conectados a la máquina virtual C3.
sudo mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4
Formatea y monta el volumen RAID
/dev/md0
.
Rendimiento de escritura de prueba
Prueba el rendimiento de escritura realizando escrituras secuenciales con varias secuencias paralelas (al menos 16), con un tamaño de bloque de E/S de 1 MiB y una profundidad total de E/S de al menos 32 por cola NVMe.
# Running this command causes data loss on the targeted file on the device. # We strongly recommend using a throwaway disk. sudo fio --name=global --group_reporting=1 --filesize=1024G \ --filename=$TEST_DIR/fiotestfile --numjobs=4 --size=64G \ --offset_increment=64G --time_based --runtime=5m \ --ramp_time=10s --ioengine=libaio --direct=1 --verify=0 \ --bs=1M --iodepth=8 --rw=write \ --name=write_throughput --numa_cpu_nodes=0 \ --name=write_throughput_1 --numa_cpu_nodes=1 \ --name=write_throughput_2 --numa_cpu_nodes=2 \ --name=write_throughput_3 --numa_cpu_nodes=3
Prueba de rendimiento de lectura
Prueba el rendimiento de lectura realizando lecturas secuenciales con varias secuencias paralelas (al menos 16), usando un tamaño de bloque de E/S de 1 MiB y una profundidad total de E/S de al menos 32 por cola NVMe.
sudo fio --name=global --group_reporting=1 --filesize=1024G \ --filename=$TEST_DIR/fiotestfile --numjobs=4 --size=64G \ --offset_increment=64G --time_based --runtime=5m \ --ramp_time=10s --ioengine=libaio --direct=1 \ --verify=0 --bs=1M --iodepth=8 --rw=read \ --name=read_throughput --numa_cpu_nodes=0 \ --name=read_throughput_1 --numa_cpu_nodes=1 \ --name=read_throughput_2 --numa_cpu_nodes=2 \ --name=read_throughput_3 --numa_cpu_nodes=3
Comparar las IOPS de Hyperdisk Extreme en C3
Para comparar el rendimiento de las operaciones de E/S por segundo (IOPS), te recomendamos que realices operaciones de E/S pequeñas en paralelo directamente en discos sin formato o desde ellos (sin RAID).
IOPS de escritura de prueba
Prueba las IOPS de escritura realizando escrituras aleatorias con un tamaño de bloque de E/S de 4 KiB y una profundidad de E/S de al menos 256, utilizando al menos 2 colas NVMe.
# Running this command causes data loss on the targeted device. # We strongly recommend using a throwaway disk. sudo fio --name=global --group_reporting=1 \ --directory=/ --bs=4K --direct=1 \ --filesize=512G --iodepth=256 \ --iodepth_batch_complete_max=256 --iodepth_batch_submit=256 \ --ioengine=libaio --numjobs=5 --ramp_time=10s \ --randrepeat=0 --runtime=5m --rw=randwrite \ --time_based=1 --verify=0 \ --name=write_iops_test --filename=/dev/nvme0n2 --numa_cpu_nodes=0 \ --name=write_iops_test_1 --filename=/dev/nvme0n3 --numa_cpu_nodes=1 \ --name=write_iops_test_2 --filename=/dev/nvme0n4 --numa_cpu_nodes=2
IOPS de lectura de prueba
Prueba las IOPS de lectura realizando lecturas aleatorias con un tamaño de bloque de E/S de 4 KiB y una profundidad de E/S de al menos 256, utilizando al menos 2 colas NVMe.
sudo fio --name=global --group_reporting=1 --directory=/ \ --bs=4K --direct=1 --filesize=512G --iodepth=256 \ --iodepth_batch_complete_max=256 --iodepth_batch_submit=256 \ --ioengine=libaio --numjobs=5 --ramp_time=10s \ --randrepeat=0 --runtime=5m --rw=randread \ --time_based=1 --verify=0 \ --name=read_iops_test --filename=/dev/nvme0n2 --numa_cpu_nodes=0 \ --name=read_iops_test_1 --filename=/dev/nvme0n3 --numa_cpu_nodes=1 \ --name=read_iops_test_2 --filename=/dev/nvme0n4 --numa_cpu_nodes=2
Latencia de Hyperdisk Extreme en C3
Durante las pruebas de latencia de E/S, la VM no debe alcanzar el ancho de banda ni las IOPS máximos. Si lo hace, la latencia observada no reflejará la latencia de E/S real de Hyperdisk.
Por ejemplo, si la máquina virtual alcanza el límite de IOPS con una profundidad de E/de 30 y el comando fio
ha duplicado ese valor, el total de IOPS sigue siendo el mismo y la latencia de E/registrada se duplica.
Es suficiente con orientar un solo dispositivo de disco sin formato directamente para obtener latencias de E/S realistas.
Latencia de escritura de prueba
Prueba la latencia de escritura realizando escrituras aleatorias con un tamaño de bloque de E/S de 4 KiB y una profundidad de E/S de 4.
# Running this command causes data loss on the targeted device. # We strongly recommend using a throwaway disk. sudo fio --filename=/dev/nvme0n2 \ --filesize=512G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=4 --rw=randwrite \ --iodepth_batch_submit=4 --iodepth_batch_complete_max=4 \ --name=write_latency
Latencia de lectura de prueba
Prueba la latencia de lectura realizando lecturas aleatorias con un tamaño de bloque de E/S de 4 KiB y una profundidad de E/S de 4.
sudo fio --filename=/dev/nvme0n2 \ --filesize=512G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=4 --rw=randread \ --iodepth_batch_submit=4 --iodepth_batch_complete_max=4 \ --name=read_latency
Limpieza
Elimina los archivos de prueba.
sudo rm -rf $TEST_DIR/*
Desmonta y detén el volumen RAID.
sudo umount /dev/md0 sudo mdadm --stop /dev/md0
Desconecta y elimina los volúmenes de hiperdisco adjuntos. Consulta los comandos
gcloud compute instances detach-disk
ygcloud compute disks delete
.
Hacer comparativas del rendimiento sin procesar de Hyperdisk
Si quieres medir el rendimiento de los volúmenes de Hyperdisk por separado, fuera de tu entorno de desarrollo, puedes probar el rendimiento de lectura y escritura de un dispositivo de bloque en un disco y una VM desechables.
En los siguientes comandos se presupone que hay un volumen de Hyperdisk Extreme de 3500 GiB
conectado a tu VM. Este tamaño de disco es necesario para alcanzar los límites de rendimiento de las VMs de 32 vCPUs. Si el tamaño de tu dispositivo es diferente, modifica el valor del argumento --filesize
en los siguientes comandos.
Para obtener más información sobre los límites de rendimiento de los tipos de máquina de VM, consulta Compatibilidad con tipos de máquina.
Prepararse para las pruebas
Instala las dependencias:
sudo apt-get update sudo apt-get install -y fio
Obtén la ruta al disco sin formato. Almacena la ruta en una variable. En el siguiente ejemplo, se usa
/dev/nvme0n2
como ruta de disco sin formato:TEST_DIR=/dev/nvme0n2
Rellena el disco con datos distintos de cero. Hyperdisk lee de bloques vacíos tiene un perfil de latencia diferente al de los bloques que contienen datos. Te recomendamos que llenes el disco antes de ejecutar cualquier prueba de latencia de lectura.
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --name=fill_disk \ --filename=$TEST_DIR --filesize=2500G \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=128K --iodepth=64 --rw=randwrite \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Si la VM usa la interfaz de disco NVMe para la conexión de Hyperdisk (si el nombre del disco sin formato empieza por
nvme
), sigue estos pasos para obtener el número de nodos NUMA disponibles para la VM.La estrategia de creación de comparativas para discos NVMe es diferente en las VMs con un solo nodo NUMA y en las VMs con más de un nodo NUMA. Cuando se prueba el rendimiento de Hyperdisk mediante la interfaz de disco NVMe, solo se asignan 256 tamaños de cola NVMe por cola. Debido a los tamaños de cola NVMe limitados disponibles y a la posible contención de los otros discos conectados a la misma VM, estas pruebas de rendimiento usan dos colas de disco NVMe para mantener un tamaño de cola agregado capaz de gestionar la profundidad de E/S de 256.
Obtiene el número de nodos NUMA.
lscpu | grep -i 'numa node(s)' | awk '{print $NF}'
Si la VM solo tiene un nodo NUMA, obtén la asignación de la cola de CPU a NVMe. Usará esta información más adelante para el parámetro
--cpus-allowed
.QUEUE_1_CPUS=$(cat /sys/class/block/nvme0n2/mq/*/cpu_list | sed -n 1p | tr -d " \t") QUEUE_2_CPUS=$(cat /sys/class/block/nvme0n2/mq/*/cpu_list | sed -n 2p | tr -d " \t")
Rendimiento de escritura de prueba
Prueba el rendimiento de escritura realizando escrituras secuenciales con varias secuencias paralelas (16 o más), usando 1 MB como tamaño de E/S y con una profundidad de E/S de 64 o más.
Si el Hyperdisk está conectado mediante la interfaz SCSI:
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR \ --numjobs=16 --size=500G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --offset_increment=20G \ --name=write_throughput
Si el volumen de Hyperdisk usa la interfaz NVMe:
Si la VM solo tiene un nodo NUMA, usa el siguiente comando:
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --cpus_allowed_policy=split \ --offset_increment=20G --group_reporting \ --name=write_throughput --cpus_allowed=$QUEUE_1_CPUS \ --name=write_throughput_2 --cpus_allowed=$QUEUE_2_CPUS
Si la VM tiene más de un nodo NUMA, usa el siguiente comando:
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --offset_increment=20G --group_reporting \ --name=write_throughput --numa_cpu_nodes=0 \ --name=write_throughput_2 --numa_cpu_nodes=1
IOPS de escritura de prueba
Para alcanzar el máximo de IOPS de Hyperdisk, debes mantener una cola de E/S profunda. Por ejemplo, si la latencia de escritura es de 1 milisegundo, la VM puede alcanzar, como máximo, 1000 IOPS por cada E/S en curso. Para alcanzar las 15.000 IOPS de escritura, la VM debe mantener al menos 15 operaciones de E/S en curso. Si tu disco y tu VM pueden alcanzar las 30.000 IOPS de escritura, el número de operaciones de E/S en curso debe ser de al menos 30. Si el tamaño de E/S es superior a 4 KB, es posible que la VM alcance el límite de ancho de banda antes de alcanzar el límite de IOPS.
Prueba las IOPS de escritura realizando escrituras aleatorias con un tamaño de bloque de E/S de 4 KB y una profundidad de E/S de al menos 256.
Si el volumen de Hyperdisk Extreme se conecta mediante la interfaz SCSI:
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR \ --numjobs=16 --size=500G -time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --name=write_iops
Si el volumen de Hyperdisk Extreme se conecta mediante la interfaz NVMe:
Si la VM solo tiene un nodo NUMA, usa el siguiente comando:
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --cpus_allowed_policy=split \ --group_reporting \ --name=write_write_iops --cpus_allowed=$QUEUE_1_CPUS \ --name=write_write_iops_2 --cpus_allowed=$QUEUE_2_CPUS
Si la VM tiene más de un nodo NUMA, usa el siguiente comando:
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --group_reporting \ --name=write_iops --numa_cpu_nodes=0 \ --name=write_iops_2 --numa_cpu_nodes=1
Latencia de escritura de prueba
Durante las pruebas de latencia de E/S, la VM no debe alcanzar el ancho de banda ni los IOPS máximos. De lo contrario, la latencia observada no reflejará la latencia de E/S real de Hyperdisk. Por ejemplo, si se alcanza el límite de IOPS con una profundidad de E/S de 30 y el comando fio
ha duplicado ese valor, el total de IOPS se mantiene igual y la latencia de E/S registrada se duplica.
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --filename=$TEST_DIR \ --filesize=500G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=4 --rw=randwrite \ --iodepth_batch_submit=4 --iodepth_batch_complete_max=4 \ --name=write_latency
Prueba de ancho de banda de lectura
Prueba el ancho de banda de lectura realizando lecturas secuenciales con varias secuencias paralelas (16 o más), con un tamaño de E/S de 1 MB y una profundidad de E/S de al menos 64.
Si el volumen de Hyperdisk Extreme se conecta mediante la interfaz SCSI:
sudo fio --filename=$TEST_DIR \ --numjobs=16 --size=500G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --offset_increment=20G --name=read_bandwidth
Si el volumen de Hyperdisk Extreme se conecta mediante la interfaz NVMe:
Si la VM solo tiene un nodo NUMA, usa el siguiente comando:
sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --cpus_allowed_policy=split \ --offset_increment=20G --group_reporting \ --name=read_bandwidth --cpus_allowed=$QUEUE_1_CPUS \ --name=read_bandwidth_2 --cpus_allowed=$QUEUE_2_CPUS
Si la VM tiene más de un nodo NUMA, usa el siguiente comando:
sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --offset_increment=20G --group_reporting \ --name=read_bandwidth --numa_cpu_nodes=0 \ --name=read_bandwidth_2 --numa_cpu_nodes=1
IOPS de lectura de prueba
Para alcanzar el máximo de IOPS de Hyperdisk, debes mantener una cola de E/S profunda.
Por ejemplo, si el tamaño de E/S es superior a 4 KB, la máquina virtual puede alcanzar el límite de ancho de banda antes de alcanzar el límite de IOPS. Para conseguir el máximo de IOPS de lectura disponible para un tipo de máquina, especifica --iodepth=256
en esta prueba.
Si el volumen de Hyperdisk Extreme se conecta mediante la interfaz SCSI:
sudo fio --filename=$TEST_DIR \ --numjobs=16 --size=500G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --name=read_iops
Si el volumen de Hyperdisk Extreme se conecta mediante la interfaz NVMe:
Si la VM solo tiene un nodo NUMA, usa el siguiente comando:
sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --cpus_allowed_policy=split \ --group_reporting \ --name=read_iops --cpus_allowed=$QUEUE_1_CPUS \ --name=read_iops_2 --cpus_allowed=$QUEUE_2_CPUS
Si la VM tiene más de un nodo NUMA, usa el siguiente comando:
sudo fio --filename=$TEST_DIR --numjobs=8 --size=500G \ --time_based --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256 \ --group_reporting \ --name=read_iops --numa_cpu_nodes=0 \ --name=read_iops_2 --numa_cpu_nodes=1
Latencia de lectura de prueba
Es importante llenar el disco con datos para obtener una medición de latencia realista. Es importante que la VM no alcance los límites de IOPS o de capacidad durante esta prueba, ya que, cuando el volumen de Hyperdisk alcance su límite de saturación, rechazará las operaciones de E/S entrantes. Este rechazo se refleja como un aumento artificial de la latencia de E/S.
sudo fio --filename=$TEST_DIR \ --filesize=500G --time_based \ --runtime=5m --ramp_time=10s --ioengine=libaio \ --direct=1 --verify=0 --bs=4K --iodepth=4 --rw=randread \ --iodepth_batch_submit=4 --iodepth_batch_complete_max=4 \ --name=read_latency
Limpieza
Si has usado un disco y una VM desechables como se recomienda, después de completar las pruebas de rendimiento, puedes hacer lo siguiente:
- Desvincula y elimina el disco.
- Elimina la VM.
Siguientes pasos
- Consulta información sobre los precios de Hyperdisk.