Este documento describe cómo comparar el rendimiento del disco persistente en máquinas virtuales (VM) Linux. Para máquinas virtuales Windows, consulte Evaluación comparativa del rendimiento del disco persistente en una máquina virtual Windows .
Para comparar el rendimiento del disco persistente en Linux, utilice el probador de E/S flexible (FIO) en lugar de otras herramientas de evaluación comparativa de discos como dd
. De forma predeterminada, dd
utiliza una profundidad de cola de E/S muy baja y es posible que no pruebe con precisión el rendimiento del disco. En general, evite el uso de dispositivos especiales como /dev/urandom
, /dev/random
y /dev/zero
en sus pruebas comparativas de rendimiento del disco persistente.
Para medir IOPS y el rendimiento de un disco en uso en una instancia en ejecución , compare el sistema de archivos con su configuración prevista. Utilice esta opción para probar una carga de trabajo realista sin perder el contenido de su disco existente. Tenga en cuenta que cuando compara el sistema de archivos en un disco existente, hay muchos factores específicos de su entorno de desarrollo que pueden afectar los resultados de la evaluación comparativa y es posible que no alcance los límites de rendimiento del disco .
Para medir el rendimiento bruto de un disco persistente , compare el dispositivo de bloque directamente. Utilice esta opción para comparar el rendimiento del disco sin formato 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
.
Evaluación comparativa de IOPS y rendimiento de un disco en una instancia en ejecución
Si desea medir IOPS y el rendimiento para una carga de trabajo realista en un disco activo en una instancia en ejecución sin perder el contenido de su disco, compare con un nuevo directorio en el sistema de archivos existente. Cada prueba fio
dura cinco minutos.
Instalar dependencias:
sudo apt update sudo apt install -y fio
En la terminal, enumere los discos que están conectados a su VM y busque el disco que desea probar. Si su disco persistente aún no está formateado, formatee y monte el disco .
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 2500 GB con ID de dispositivo
sdb
.Cree un nuevo directorio,
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
Pruebe el rendimiento de escritura realizando escrituras secuenciales con múltiples flujos paralelos (16+), utilizando 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
Pruebe las IOPS de escritura realizando escrituras aleatorias, utilizando 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
Pruebe el rendimiento de lectura realizando lecturas secuenciales con múltiples flujos paralelos (16+), utilizando 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
Pruebe las IOPS de lectura realizando lecturas aleatorias, utilizando 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
Limpiar:
sudo rm $TEST_DIR/write* $TEST_DIR/read*
Evaluación comparativa del rendimiento del disco persistente sin procesar
Si desea medir el rendimiento de los discos persistentes únicamente fuera de su entorno de desarrollo, pruebe el rendimiento de lectura y escritura para un dispositivo de bloque en un disco persistente y una máquina virtual desechables. Cada prueba fio
dura cinco minutos. Los siguientes comandos asumen un disco persistente SSD de 2500 GB conectado a su VM. Si el tamaño de su dispositivo es diferente, modifique el valor del argumento --filesize
. Este tamaño de disco es necesario para alcanzar los límites de rendimiento de VM de 32 vCPU. Para obtener más información, consulte Rendimiento del almacenamiento en bloque .
Agregue un disco persistente a su instancia de VM que desea comparar.
Instalar dependencias:
sudo apt-get update sudo apt-get install -y fio
Llene el disco con datos distintos de cero. Las lecturas de disco persistentes de bloques vacíos tienen un perfil de latencia diferente al de los bloques que contienen datos. Recomendamos llenar el disco antes de ejecutar cualquier punto de referencia 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=/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
Pruebe el ancho de banda de escritura realizando escrituras secuenciales con múltiples flujos paralelos (16+), usando 1 MB como tamaño de E/S y con una profundidad de E/S mayor o igual a 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 de escritura de IOPS. Para lograr el máximo de PD IOPS, debe mantener una cola de E/S profunda. Si, por ejemplo, la latencia de escritura es de 1 milisegundo, la VM puede alcanzar, como máximo, 1000 IOPS por cada E/S en vuelo. Para lograr 15 000 IOPS de escritura, la VM debe mantener al menos 15 E/S en funcionamiento. Si su disco y su máquina virtual pueden alcanzar 30 000 IOPS de escritura, la cantidad de E/S en curso debe ser de al menos 30 E/S. Si el tamaño de E/S es superior a 4 KB, la máquina virtual podría alcanzar 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 de latencia de escritura. Mientras prueba la latencia de E/S, la VM no debe alcanzar el ancho de banda máximo o IOPS; de lo contrario, la latencia observada no reflejará la latencia real de E/S del disco persistente. Por ejemplo, si se alcanza el límite de IOPS con una profundidad de E/S de 30 y el comando
fio
tiene el doble, entonces el total de IOPS sigue siendo el mismo y la latencia de E/S informada se duplica.# 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
Pruebe el ancho de banda de lectura realizando lecturas secuenciales con múltiples flujos paralelos (16+), utilizando 1 MB como tamaño de E/S y con una profundidad de E/S igual a 64 o mayor.
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 de lectura de IOPS. Para lograr el máximo de PD IOPS, debe mantener una cola de E/S profunda. Si, por ejemplo, el tamaño de E/S es mayor que 4 KB, la máquina virtual podría alcanzar el límite de ancho de banda antes de alcanzar el límite de IOPS. Para lograr el máximo de 100 000 IOPS de lectura, especifique
--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
Pruebe la latencia de lectura. Es importante llenar el disco con datos para obtener una medición de latencia realista. Es importante que la máquina virtual no alcance los límites de IOPS o de rendimiento durante esta prueba porque después de que el disco persistente alcanza su límite de saturación, rechaza las E/S entrantes y esto se refleja como 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
Pruebe el ancho de banda de lectura secuencial.
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
Pruebe el ancho de banda de escritura secuencial.
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
Limpie el disco persistente y la máquina virtual desechables:
- Elimine el disco utilizado para evaluar el rendimiento.
- Elimine la VM creada para realizar evaluaciones comparativas del rendimiento.
¿Qué sigue?
- Aprenda a monitorear el rendimiento de su disco revisando las métricas de rendimiento del disco .
- Obtenga más información sobre los precios de los discos persistentes .
- Aprenda a optimizar el rendimiento del disco persistente .