Estoy haciendo algunas evaluaciones comparativas de nodos mientras construimos un sistema de archivos distribuido. Dado que los archivos se distribuirán y replicarán en muchos nodos, usaremos raid0 en los propios nodos. Sin embargo, obtengo algunas cifras de rendimiento extrañas y tengo curiosidad por saber si la comunidad de StackOverflow puede ayudarme a descubrir por qué. Estoy usando fio como mi herramienta de evaluación comparativa; tenga en cuenta que la versión 1.38 no funcionó para mí y necesitaba usar la versión 1.59 o 1.60.
Aquí está mi archivo de configuración de fio:
[global]
directory=/mnt/gluster
lockfile=readwrite
ioengine=libaio
iodepth=8
rw=randrw
nrfiles=200
openfiles=30
runtime=900
[file]
filesize=16-8k/8M-512M
size=1GiB
Para un raid0 usando software raid, obtuve los siguientes resultados (recortando lo esencial):
read : io=285240KB, bw=324535 B/s, iops=79 , runt=900011msec
write: io=283532KB, bw=322592 B/s, iops=78 , runt=900011msec
En un raid1 usando software raid, obtuve los siguientes resultados:
read : io=683808KB, bw=778021 B/s, iops=189 , runt=900000msec
write: io=488184KB, bw=628122 B/s, iops=153 , runt=795864msec
El rendimiento de un solo disco aún supera al rendimiento de raid0:
read : io=546848KB, bw=622179 B/s, iops=151 , runt=900018msec
write: io=486736KB, bw=591126 B/s, iops=144 , runt=843166msec
LVM dividido en los cuatro discos con extensiones de 4k:
read : io=727036KB, bw=827198 B/s, iops=201 , runt=900007msec
write: io=489424KB, bw=604693 B/s, iops=147 , runt=828800msec
Hardware RAID0 (HighPoint RocketRaid 2470)
read : io=326884KB, bw=371918 B/s, iops=90 , runt=900008msec
write: io=328824KB, bw=374125 B/s, iops=91 , runt=900008msec
Tenga en cuenta que los primeros cuatro resultados anteriores se ejecutan sólo en los controladores SATA de la placa base. Sin embargo, reproduje los resultados con software RAID después de pasar a la tarjeta RocketRaid. Estas son unidades SATA de 1 TB. La ejecución de pruebas multiproceso arrojó aproximadamente los mismos resultados. ¿Hay alguna razón por la que RAID0 funcione tan lento? Pensé que ofrecería un rendimiento en E/S aleatorias superior al de una sola unidad o RAID1.
Seguimiento: basado en algunas sugerencias de Joe de Scalable Informatics (buen chico, ¡compra sus cosas!), cambié mi prueba para usar una cola más profunda y un tamaño de bloque más aleatorio.
[global]
directory=/mnt/glusterfs
lockfile=readwrite
ioengine=libaio
iodepth=32
rw=randrw
numjobs=8
[file]
filesize=16-8k/8M-512M
blocksize_range=64k-1M
size=1GiB
nrfiles=50
openfiles=8
runtime=900
Y el resultado final es que la tarjeta HighPoint RocketRaid 2740 apesta.
- Rendimiento de disco único (placa base SuperMicro SATA): 43,2 mb/s de lectura, 42,6 mb/s de escritura
- MD Raid 0 (RocketRAID usado como HBA, con o sin controladores cargados): 53,1 mb/s de lectura, 54,1 mb/s de escritura
- RocketRaid Raid 0: 29,4 mb/s de lectura, 29,2 mb/s de escritura
- MD RAID 0 (placa base SATA): 58,0 mb/s de lectura, 58,3 mb/s de escritura
El rendimiento conectado a una tarjeta RocketRaid fue más lento en todos los ámbitos.
Voy a dejar esta pregunta abierta: recibiremos una nueva gama de tarjetas RAID dentro de la próxima semana o dos para realizar pruebas, y todavía estoy buscando consejos de optimización para obtener más rendimiento que un solo disco. , que no parece haber sido completamente respondida.
Respuesta1
Es posible que se encuentre con un problema de tamaño de banda en el que los datos escritos o leídos se encuentran en un solo disco; consulte laCómo realizar RAID por softwarepara detalles. Puede comprobar si este es el caso mirando el resultado deiostato.
Si desea comprobar el rendimiento del acceso lineal, intente utilizar "hdparm -t" o dd para realizar evaluaciones comparativas; esto debería mostrar cifras de rendimiento que aproximadamente duplican el rendimiento de un solo disco.
Respuesta2
Pensé que ofrecería un rendimiento en E/S aleatorias superior al de una sola unidad o RAID1.
No, si los bloques que está buscando aleatoriamente son mayores que el tamaño de la franja, entonces debería ser aproximadamente la velocidad de una sola unidad. Lo que todavía no explica sus resultados, que son peores que un solo disco.
DeWikipedia.
Para lecturas y escrituras que son mayores que el tamaño de la franja, como copiar archivos o reproducir videos, los discos buscarán la misma posición en cada disco.por lo que el tiempo de búsqueda de la matriz será el mismo que el de una sola unidad. Para lecturas y escrituras que son más pequeñas que el tamaño de la banda, como el acceso a la base de datos, las unidades podrán buscar de forma independiente.