presión rendimiento de almacenamiento FIO medido

A, el perfil de la FIO

FIO es una muy buena herramienta para IOPS de prueba, que se utiliza la prueba de presión del disco y validación. disco de comprobación de disco IO es importante indicador del desempeño, se puede dividir de acuerdo a la carga orden de lectura, dos tipos de acceso aleatorio. FIO es un hilo o proceso puede producir una gran cantidad de herramientas y escénicas tipos específicos de operaciones de E / S especificados por el usuario, el uso típico FIO es la preparación y analógicas archivo de trabajo de E / S a juego carga. Que la FIO es una herramienta de generación io multiproceso que puede generar una variedad de modelos de IO se utiliza para probar el rendimiento de los dispositivos de disco (también contiene un sistema de archivos: como prueba de IO para el sistema de archivos de red NFS).

Otra GFIO es FIO herramienta de monitorización gráfica, que proporciona una gráfica de los parámetros de configuración de la interfaz, y la imagen de supervisión del rendimiento.

enlace de la FIO en GitHub es https://github.com/axboe/fio

 

Dos, la instalación de FIO

1. yum install

yum -y install fio.x86_64

2. Origen de la instalación

  • http://freshmeat.sourceforge.net/projects/fio  descargar el paquete de instalación de FIO FIO-2.1.10.tar.gz
  • dependencias libaio-devel de instalación (si se compila primera fioz, se encontró un error libaio-devel instalado, es necesario volver a compilar el uso de la FIO instalar hacer limpia y luego limpiar el fichero de construcción)
yum -y install libaio-devel
  • gfio instalación: implementación basada gdk es su versión de interfaz gráfica (opcional)
yum -y install libgtk2.0-dev
  • FIO extracción de archivo en el directorio compilado e instalado FIO
./configure --enable-gfio #如果希望不支持gfio,只需去掉后面的--enable-gfio参数
make
make install

 

En tercer lugar, los parámetros comunes

filename=/dev/emcpowerb 支持文件系统或者裸设备,-filename=/dev/sda2或-filename=/dev/sdb
direct=1                 测试过程绕过机器自带的buffer,使测试结果更真实
rw=randwread             测试随机读的I/O
rw=randwrite             测试随机写的I/O
rw=randrw                测试随机混合写和读的I/O
rw=read                  测试顺序读的I/O
rw=write                 测试顺序写的I/O
rw=rw                    测试顺序混合写和读的I/O
bs=4k                    单次io的块文件大小为4k
bsrange=512-2048         同上,提定数据块的大小范围
size=5g                  本次的测试文件大小为5g,以每次4k的io进行测试
numjobs=30               本次的测试线程为30
runtime=1000             测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止
ioengine=psync           io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包
rwmixwrite=30            在混合读写的模式下,写占30%
group_reporting          关于显示结果的,汇总每个进程的信息
此外
lockmem=1g               只使用1g内存进行测试
zero_buffers             用0初始化系统buffer
nrfiles=8                每个进程生成文件的数量

 

En cuarto lugar, los escenarios de prueba comunes

1. Prueba de línea de comandos

  • 100% aleatorio, lee 100%, 4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k
  • 100% al azar, 100% de escritura, 4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k
  • Orden del 100%, el 100% de la lectura, 4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100read_4k
  • 100% de la orden, el 100% de escritura, 4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100write_4k
  • 100% al azar, el 70% de lectura, el 30% de escritura 4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=randrw_70read_4k

 

2. archivo de parámetros de prueba

FIO perfil de presión medido proporciona diferentes escenarios y, a continuación modificar la configuración puede ser ejecutado directamente. https://github.com/axboe/fio/tree/master/examples

fio examples/ssd-test.fio

El archivo de parámetros anteriormente utilizado para probar el rendimiento SSD, archivos de parámetros de la siguiente manera:

Donde cada uno de [] representa un paquete de prueba, la prueba se realiza por separado para cada grupo (por ejemplo, por debajo de 5 grupos).

# Do some important numbers on SSD drives, to gauge what kind of
# performance you might get out of them.
#
# Sequential read and write speeds are tested, these are expected to be
# high. Random reads should also be fast, random writes are where crap
# drives are usually separated from the good drives.
#
# This uses a queue depth of 4. New SATA SSD's will support up to 32
# in flight commands, so it may also be interesting to increase the queue
# depth and compare. Note that most real-life usage will not see that
# large of a queue depth, so 4 is more representative of normal use.
#
[global]
bs=4k
ioengine=libaio
iodepth=4
size=10g
direct=1
runtime=60
directory=/mount-point-of-ssd
filename=ssd.test.file

[seq-read]
rw=read
stonewall

[rand-read]
rw=randread
stonewall

[seq-write]
rw=write
stonewall

[rand-write]
rw=randwrite
stonewall

La siguiente es una simulación del perfil de presión medido base de datos MySQL

# QPS: 40000(10 cores)
# Dataset: 200G
# R/W: 8/2
# ThreadPool Num: 64
#  IO ThreadNum: 32
 
[global]
runtime=86400
time_based
group_reporting
directory=/your_dir
ioscheduler=deadline
refill_buffers
 
[mysql-binlog]
filename=test-mysql-bin.log
bsrange=512-1024
ioengine=sync
rw=write
size=24G
sync=1
rw=write
overwrite=1
fsync=100
rate_iops=64
invalidate=1
numjobs=64
 
[innodb-data]
filename=test-innodb.dat
bs=16K
ioengine=psync
rw=randrw
size=200G
direct=1
rwmixread=80
numjobs=32
 
thinktime=600
thinktime_spin=200
thinktime_blocks=2
 
[innodb-trxlog]
filename=test-innodb.log
bsrange=512-2048
ioengine=sync
rw=write
size=2G
fsync=1
overwrite=1
rate_iops=64
invalidate=1
numjobs=64

 

En quinto lugar, la interpretación de los resultados de las pruebas

resultados de la salida de la prueba son como sigue

fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=read -filename=/dev/sda -name="BS 4KB read test" -iodepth=16 -runtime=60

#输出
BS 4KB read test: (g=0): rw=write, bs=1M-1M/1M-1M/1M-1M, ioengine=libaio, iodepth=16
fio-2.8
Starting 1 process
Jobs: 1 (f=1): [W(1)] [100.0% done] [0KB/68198KB/0KB /s] [0/66/0 iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=4676: Thu Apr  7 17:22:37 2016
  write: io=20075MB, bw=68464KB/s, iops=66, runt=300255msec           #执行多少IO,平均带宽,线程运行时间
    slat (usec): min=51, max=5732, avg=291.11, stdev=262.47           #提交延迟
    clat (usec): min=1, max=2235.8K, avg=239043.28, stdev=153384.41   #完成延迟
     lat (usec): min=367, max=2235.9K, avg=239337.72, stdev=153389.57 #响应时间
    clat percentiles (usec):
     |  1.00th=[  221],  5.00th=[  442], 10.00th=[ 1004], 20.00th=[108032],
     | 30.00th=[228352], 40.00th=[248832], 50.00th=[257024], 60.00th=[268288],
     | 70.00th=[280576], 80.00th=[301056], 90.00th=[342016], 95.00th=[477184],
     | 99.00th=[806912], 99.50th=[864256], 99.90th=[1122304], 99.95th=[1171456],
     | 99.99th=[1646592]
    bw (KB/s): min=  170, max=204800, per=100.00%, avg=68755.07, stdev=27034.84
    lat (usec) : 2=0.01%, 4=0.13%, 50=0.06%, 100=0.26%, 250=1.04%
    lat (usec) : 500=4.53%, 750=2.61%, 1000=1.33%
    lat (msec) : 2=1.18%, 4=0.15%, 10=0.77%, 20=0.77%, 50=1.50%
    lat (msec) : 100=4.43%, 250=23.48%, 500=53.23%, 750=3.09%, 1000=1.30%
    lat (msec) : 2000=0.19%, >=2000=0.01%
  cpu          : usr=0.03%, sys=2.11%, ctx=19066, majf=0, minf=7
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=103.8%, 32=0.0%, >=64=0.0%   #io队列
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%  #单个IO提交要提交的IO数
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%  
     issued    : total=r=0/w=20060/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
     latency   : target=0, window=0, percentile=100.00%, depth=16    #IO完延迟的分布
 
Run status group 0 (all jobs):
  WRITE: io=20075MB, aggrb=68464KB/s(group总带宽), minb=68464KB/s(最小平均带宽), maxb=68464KB/s(最大平均带宽), mint=300255msec(group中线程的最短运行时间), maxt=300255msec(group中线程的最长运行时间)
 
Disk stats (read/write):
  sda: ios=23/41769(所有group总共执行的IO数), merge=0/149(总共发生的IO合并数), ticks=706/9102766(Number of ticks we kept the disk busy), in_queue=9105836(花费在队列上的总共时间), util=100.00%(磁盘利用率)

Los parámetros de salida introducidas (detalles Referencia https://tobert.github.io/post/2014-04-17-fio-output-explained.html )

  • Io = IO aplicación de la serie de M
  • bw = ancho de banda promedio IO (throughput)
  • iops = IOPS
  • runt = tiempo de ejecución hilo
  • Presentar listón = retardo, envíe la solicitud IO a la hora del núcleo gastado (no incluyendo el proceso de kernel tiempo)
  • Después de la terminación CLAT = retardo, la solicitud presentada IO al núcleo, el tiempo de procesamiento pasó
  • lat = tiempo de respuesta
  • BW = ancho de banda,
  • cpu = utilización
  • IO profundidades = io cola
  • IO submit = Enviar una sola IO IO para presentar el número de
  • IO completos = Al igual que el número por encima de presentar, pero en lugar de terminaciones.
  • IO emitió = El número de solicitudes de lectura / escritura emitidos, y cuántos de ellos eran cortas.
  • latencias IO IO = distribución de finalización tardía
  • Io = tamaño total de la aplicación del número de IO
  • aggrb = ancho de banda total del grupo
  • MIN.B. = ancho de banda promedio mínimo
  • maxb = ancho de banda promedio máximo
  • grupo de hilos de menta = mínimo tiempo de ejecución
  • MaxI = grupo de hilos máximo tiempo de ejecución
  • ios = número total de todos los grupos de IO realiza
  • merge = número total de consolidación se produjo IO
  • garrapatas = Número de garrapatas que mantiene el disco ocupado
  • io_queue = total gastado en tiempo de cola
  • util = utilización de los discos

 

En sexto lugar, se recomienda la prueba

  • El uso secuencial IO y un mayor rendimiento y la latencia de prueba de bloque
  • IO y al azar usando tamaño de bloque más pequeño IOPS y la prueba de latencia
  • Antes de configurar numjobs y iodeph, recomendaciones penetración en usos de aplicaciones una IO IO síncrona o asíncrona (IO es un proceso más complicado o que presente una solicitud de un número de IO)

observación

  • IOPS de disco, que está dentro de un segundo, ¿cuántas veces el disco I / O para leer y escribir.
  • Rendimiento del disco, el disco es decir, por cada I / O de flujo, es decir, más el tamaño de escritura de disco de lectura de datos.
  • I / O por segundo rendimiento = IOPS * I Tamaño medio / O.

 

referencia

https://blog.csdn.net/qq_14935437/article/details/93749444

https://github.com/axboe/fio

https://www.cnblogs.com/raykuan/p/6914748.html

http://blog.yufeng.info/archives/1497

https://blog.csdn.net/hanchengxi/article/details/19089589

Publicados 295 artículos originales · ganado elogios 35 · Vistas a 80000 +

Supongo que te gusta

Origin blog.csdn.net/Hehuyi_In/article/details/105321480
Recomendado
Clasificación