En este documento, se describe cómo comparar el rendimiento de Persistent Disk en máquinas virtuales (VMs) de Linux. Para las VMs de Windows, consulta Compara el rendimiento del disco persistente en una VM de Windows.
Para comparar el rendimiento de Persistent Disk, usa el verificador de E/S flexible (FIO)dd
en lugar de otras herramientas de comparativas de discos, como .
De forma predeterminada, dd
usa una profundidad de cola de E/S muy baja y puede que no pruebe con precisión el rendimiento del disco. En general, evita usar dispositivos especiales como /dev/urandom
, /dev/random
y /dev/zero
en tus comparativas de rendimiento de Persistent Disk.
Para medir las IOPS y la capacidad de procesamiento de un disco que está en uso en una instancia en ejecución, compara el sistema de archivos con su configuración deseada. Usa esta opción para probar una carga de trabajo realista sin perder el contenido de tu disco existente. Ten en cuenta que, cuando realizas un análisis comparativo del sistema de archivos en un disco existente, hay muchos factores específicos del entorno de desarrollo que pueden afectar los resultados, y es posible que no alcances los límites de rendimiento del disco.
Para medir el rendimiento sin procesar de un disco persistente, compara el dispositivo de bloques directamente. Usa esta opción para comparar el rendimiento del disco sin procesar con los límites de rendimiento del disco.
Los siguientes comandos funcionan con los sistemas operativos Debian o Ubuntu con el administrador de paquetes apt
.
Compara las IOPS y la capacidad de procesamiento de un disco en una instancia en ejecución
Si deseas medir las IOPS y la capacidad de procesamiento para una carga de trabajo realista en un disco activo de una instancia en ejecución sin perder el contenido del disco, realiza la comparación con un directorio nuevo en el sistema de archivos existente. Cada prueba fio
se ejecuta durante cinco minutos.
Instala las dependencias:
sudo apt update sudo apt install -y fio
En la terminal, enumera los discos adjuntos a tu VM y busca el disco que deseas probar. Si tu disco persistente aún no tiene formato, dale formato y actívalo.
sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 10G 0 disk └─sda1 8:1 0 10G 0 part / sdb 8:32 0 2.5T 0 disk /mnt/disks/mnt_dir
En este ejemplo, probamos un disco persistente SSD de 2,500 GB con el ID de dispositivo
sdb
.Crea un directorio nuevo,
fiotest
, en el disco. En este ejemplo, el disco se activa en/mnt/disks/mnt_dir
:TEST_DIR=/mnt/disks/mnt_dir/fiotest sudo mkdir -p $TEST_DIR
Prueba la capacidad de procesamiento de escritura mediante la realización de operaciones de escritura secuenciales con varias transmisiones paralelas (más de 16) mediante el uso de un tamaño de bloque de E/S de 1 MB y una profundidad de E/S de al menos 64:
sudo fio --name=write_throughput --directory=$TEST_DIR --numjobs=16 \ --size=10G --time_based --runtime=5m --ramp_time=2s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=write \ --group_reporting=1 --iodepth_batch_submit=64 \ --iodepth_batch_complete_max=64
Prueba las IOPS de escritura mediante la realización de operaciones de escritura aleatorias, con un tamaño de bloque de E/S de 4 KB y una profundidad de E/S de al menos 256:
sudo fio --name=write_iops --directory=$TEST_DIR --size=10G \ --time_based --runtime=5m --ramp_time=2s --ioengine=libaio --direct=1 \ --verify=0 --bs=4K --iodepth=256 --rw=randwrite --group_reporting=1 \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
Prueba la capacidad de procesamiento de lectura mediante la realización de operaciones lecturas secuenciales con varias transmisiones paralelas (más de 16), con un tamaño de bloque de E/S de 1 MB y una profundidad de E/S de al menos 64:
sudo fio --name=read_throughput --directory=$TEST_DIR --numjobs=16 \ --size=10G --time_based --runtime=5m --ramp_time=2s --ioengine=libaio \ --direct=1 --verify=0 --bs=1M --iodepth=64 --rw=read \ --group_reporting=1 \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Prueba las IOPS de lectura mediante la realización de operaciones de lecturas aleatorias, con un tamaño de bloque de E/S de 4 KB y una profundidad de E/S de al menos 256:
sudo fio --name=read_iops --directory=$TEST_DIR --size=10G \ --time_based --runtime=5m --ramp_time=2s --ioengine=libaio --direct=1 \ --verify=0 --bs=4K --iodepth=256 --rw=randread --group_reporting=1 \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
Limpieza:
sudo rm $TEST_DIR/write* $TEST_DIR/read*
Compara el rendimiento del disco persistente sin procesar
Si deseas medir solo el rendimiento de los discos persistentes fuera de tu entorno de desarrollo, prueba el rendimiento de lectura y escritura para un dispositivo de bloques en un disco persistente y una VM desechables. Cada prueba fio
se ejecuta durante cinco minutos.
Los siguientes comandos suponen que hay un disco persistente SSD de 2,500 GB adjunto a tu VM. Si el tamaño de tu dispositivo es diferente, modifica el valor del argumento --filesize
. Este tamaño de disco es necesario para alcanzar los límites de capacidad de procesamiento de VM de 32 CPU virtuales. Para obtener más información, consulta Rendimiento del almacenamiento en bloque.
Agrega un Persistent Disk a tu instancia de VM que deseas comparar.
Instala las dependencias:
sudo apt-get update sudo apt-get install -y fio
Llena el disco con datos distintos de cero. Las operaciones de lectura de disco persistente de bloques vacíos tienen un perfil de latencia diferente del de los bloques que contienen datos. Recomendamos llenar el disco antes de ejecutar una evaluación comparativa de latencia de operaciones 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=/dev/sdb --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
Para probar el ancho de banda de las operaciones de escritura, realiza operaciones de escritura secuenciales con múltiples transmisiones paralelas (más de 16) con un tamaño de E/S de 1 MB y una profundidad de E/S mayor o igual que 64.
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --name=write_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=1M --iodepth=64 --iodepth_batch_submit=64 --iodepth_batch_complete_max=64 \ --rw=write --numjobs=16 --offset_increment=100G
Prueba las IOPS de escritura. Para alcanzar las IOPS de PD máximas, debes mantener una cola de E/S profunda. Por ejemplo, si la latencia de operación de escritura es de 1 milisegundo, la VM puede alcanzar, como máximo, 1,000 IOPS por cada E/S en tránsito. Para alcanzar 15,000 IOPS de operaciones de escritura, la VM debe mantener, al menos, 15 E/S en tránsito. Si tu disco y la VM pueden alcanzar 30,000 IOPS de operaciones de escritura, la cantidad de E/S en tránsito debe ser de, al menos, 30 E/S. Si el tamaño de E/S supera los 4 KB, puede que la VM alcance el límite de ancho de banda antes de alcanzar el límite de IOPS.
# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --name=write_iops_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=256 --rw=randwrite \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
Prueba la latencia de operaciones de escritura. Mientras pruebas la latencia de E/S, la VM no debe alcanzar las IOPS ni el ancho de banda máximos. De lo contrario, la latencia observada no reflejará la latencia de E/S real del disco persistente. Por ejemplo, si el límite de IOPS se alcanza a una profundidad de E/S de 30 y el comando
fio
duplica ese valor, el total de IOPS se mantendrá igual y la latencia de E/S informada se duplicará.# Running this command causes data loss on the second device. # We strongly recommend using a throwaway VM and disk. sudo fio --name=write_latency_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=4 --rw=randwrite --iodepth_batch_submit=4 \ --iodepth_batch_complete_max=4
Para probar el ancho de banda de operaciones de lectura, realiza operaciones de lectura secuenciales con múltiples transmisiones paralelas (más de 16) con un tamaño de E/S de 1 MB y una profundidad de E/S mayor o igual que 64.
sudo fio --name=read_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=1M --iodepth=64 --rw=read --numjobs=16 --offset_increment=100G \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Prueba las IOPS de lectura. Para alcanzar el máximo de IOPS de PD, debes mantener una cola de E/S profunda. Por ejemplo, si el tamaño de E/S supera los 4 KB, puede que la VM alcance el límite de ancho de banda antes de alcanzar el límite de IOPS. A fin de alcanzar el máximo de 100,000 IOPS de operaciones de lectura, especifica
--iodepth=256
para esta prueba.sudo fio --name=read_iops_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=256 --rw=randread \ --iodepth_batch_submit=256 --iodepth_batch_complete_max=256
Prueba la latencia de operaciones de lectura. Es importante llenar el disco con datos para obtener una medición de latencia realista. Es importante también que la VM no alcance los límites de IOPS o de capacidad de procesamiento durante esta prueba, ya que, después de que el disco persistente alcanza su límite de saturación, este rechaza la E/S entrante y esto se refleja en un aumento artificial en la latencia de E/S.
sudo fio --name=read_latency_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --bs=4K --iodepth=4 --rw=randread \ --iodepth_batch_submit=4 --iodepth_batch_complete_max=4
Prueba el ancho de banda de operaciones de lectura secuenciales.
sudo fio --name=read_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --numjobs=4 --thread --offset_increment=500G \ --bs=1M --iodepth=64 --rw=read \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Prueba el ancho de banda de operaciones de escritura secuenciales.
sudo fio --name=write_bandwidth_test \ --filename=/dev/sdb --filesize=2500G \ --time_based --ramp_time=2s --runtime=5m \ --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \ --numjobs=4 --thread --offset_increment=500G \ --bs=1M --iodepth=64 --rw=write \ --iodepth_batch_submit=64 --iodepth_batch_complete_max=64
Limpia el Persistent Disk y la VM desechable:
- Borra el disco que se usa para comparar el rendimiento.
- Borra la VM creada para realizar comparativas del rendimiento.
¿Qué sigue?
- Revisa las métricas de rendimiento del disco para aprender a supervisar su rendimiento.
- Obtén información sobre los precios de los Persistent Disks.
- Aprende a optimizar el rendimiento de los discos persistentes