Prueba de matrices RAID de software para dispositivos NVMe utilizando la metodología SNIA



Hace unos meses, mientras trabajaban en el próximo proyecto, los muchachos de nuestro laboratorio de investigación estudiaron los discos NVMe y las soluciones de software para encontrar la mejor opción para ensamblar una matriz de software.

Los resultados de la prueba fueron sorprendentemente desalentadores: el enorme potencial de velocidad de los discos NVMe no se correlacionaba en absoluto con el rendimiento demostrado de los productos de software existentes.

A nuestros desarrolladores no les gustó. Y decidieron escribir su producto ... Un producto que a los vendedores posteriormente se les ocurrió alegremente el nombre RAIDIX ERA.

Hoy, más de una docena de compañías producen servidores adaptados para usar discos NVMe. El mercado de productos que respaldan y desarrollan esta tecnología tiene un enorme potencial. En el informe analítico de G2M, se presentan cifras bastante convincentes de que este protocolo de transferencia de datos dominará en un futuro próximo.


Gráfico del informe G2M

Actualmente, uno de los líderes en la producción de componentes NVMe es Intel. Fue en su equipo que realizamos pruebas para evaluar las capacidades de los productos de software existentes para administrar un hardware tan "innovador".

Junto con nuestro socio, Promobit (un fabricante de servidores y sistemas de almacenamiento de datos bajo la marca comercial BITBLAZE), organizamos las pruebas de las unidades NVMe de Intel y el software común para administrar dichos dispositivos. Las pruebas se llevaron a cabo según el método SNIA.

En este artículo compartiremos los números obtenidos durante las pruebas del sistema de hardware Intel NVMe, las matrices de software de MDRAID, Zvol sobre ZFS RAIDZ2 y, de hecho, nuestro nuevo desarrollo.

Configuración de hardware


Para la base de la plataforma de prueba, tomamos el sistema de servidor Intel Server System R2224WFTZS. Tiene 2 zócalos para instalar procesadores escalables Intel Xeon y 12 canales de memoria (24 DIMM en total) DDR 4 con una frecuencia de hasta 2666 MHz.

Puede encontrar más información sobre la plataforma del servidor en el sitio web del fabricante .

Todas las unidades NVMe conectadas a través de 3 placas posteriores F2U8X25S3PHS .

En total, tenemos 12 unidades NVMe INTEL SSDPD2MD800G4 con firmware CVEK6256004E1P0BGN en el sistema.

La plataforma del servidor estaba equipada con dos procesadores Intel® Xeon® Gold 6130 a 2,10 GHz con Hyper-Threading habilitado, lo que permite lanzar dos subprocesos desde cada núcleo. Por lo tanto, en la salida recibimos 64 hilos informáticos.

Preparación de la prueba


Todas las pruebas en este artículo se realizaron de acuerdo con la especificación de la metodología SNIA SSS PTSe v 1.1. Incluso, se realizó una preparación preliminar del almacenamiento para obtener un resultado estable y honesto.

SNIA permite al usuario establecer los parámetros para el número de subprocesos y la profundidad de la cola, por lo que configuramos 64/32, que tiene 64 subprocesos informáticos en 32 núcleos.

Cada prueba se realizó en 16 rondas para llevar el sistema a un nivel estable de indicadores y excluir valores aleatorios.

Antes de comenzar las pruebas, hicimos una preparación preliminar del sistema:

  1. Instalación de la versión del kernel 4.11 en CentOS 7.4.
  2. Apague C-STATES y P-STATES.
  3. Ejecute la utilidad tuned-adm y establezca el perfil de rendimiento de latencia.

Las pruebas de cada producto y artículo se llevaron a cabo en las siguientes etapas:

Preparación de dispositivos según la especificación SNIA (dependiente e independiente del tipo de carga).

  1. Prueba IOps en bloques de 4k, 8k, 16k, 32k, 64k, 128k, 1m con variaciones de combinaciones de lectura / escritura 0/100, 5/95, 35/65, 50/50, 65/35, 95/5, 100/0 .
  2. Pruebas de latencia con bloques de 4k, 8k, 16k con variaciones de combinaciones de lectura / escritura 0/100, 65/35 y 100/0. El número de hilos y la profundidad de la cola es 1-1. Los resultados se registran como los retrasos promedio y máximo.
  3. Prueba de rendimiento con bloques de 128k y 1M, en 64 líneas de 8 equipos.

Comenzamos probando el rendimiento, la latencia y el rendimiento de la plataforma de hardware. Esto nos permitió evaluar el potencial del equipo propuesto y compararlo con las capacidades de las soluciones de software aplicadas.

Prueba 1. Pruebas de hardware


Para empezar, decidimos ver de qué es capaz una unidad Intel DCM D3700 NVMe.
En la especificación, el fabricante declara los siguientes parámetros de rendimiento:
Lectura aleatoria (100% de alcance) 450,000 IOPS
Escritura aleatoria (alcance 100%) 88000 IOPS

Prueba 1.1 Una unidad NVMe. Prueba de IOPS


Resultado de rendimiento (IOps) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k84017.891393.8117271,6133059,4175086.8281131.2390969.2
8k42602.645735.858980.267321.4101357.2171316.8216551,4
16k21618.822834.829703,633821,252552,689731,2108347
32k10929,411322147871681126577,647185,250670.8
64k5494,45671,67342,68285.813130.22388427249.2
128k2748,42805,23617,84295,26506,611997,613631
1m351,6354,8451,2684,8830,21574,41702,8

Resultado de rendimiento (IOps) en forma gráfica. Lectura / Escritura Mix%.



En esta etapa, obtuvimos resultados que no llegan a los de fábrica. Lo más probable es que NUMA (el esquema de implementación de memoria de la computadora utilizado en sistemas multiprocesador, cuando el tiempo de acceso a la memoria está determinado por su ubicación en relación con el procesador) jugó su papel, pero por ahora no le prestaremos atención.

Prueba 1.2 Una unidad NVMe. Pruebas de retraso


Tiempo de respuesta promedio (ms) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R65% / W35%R100% / W0%
4k0,027190,0721340,099402
8k0,0298640,0930920.121582
16k0,0467260.1370160.16405

Tiempo de respuesta promedio (ms) en forma gráfica. Lectura / Escritura Mix%.



Tiempo máximo de respuesta (ms) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R65% / W35%R100% / W0%
4k6,98564.71471.5098
8k7,00044.31181.4086
16k7.00684.64451.1064

Tiempo máximo de respuesta (ms) en forma gráfica. Lectura / Escritura Mix%.



Prueba 1.3 Rendimiento


El último paso es evaluar el rendimiento. Aquí están los siguientes indicadores:
Grabación secuencial de 1 MB: 634 MBps.
Lectura secuencial de 1 MB: 1707 MBps.
Grabación secuencial de 128 Kb - 620 MBps.
Lectura secuencial de 128 Kb - 1704 MBps.

Después de tratar con una unidad, procedemos a evaluar toda la plataforma, que consta de 12 unidades.

Prueba 1.4 Sistema en 12 unidades. Prueba de IOPS


Aquí, se tomó una decisión decidida para ahorrar tiempo y mostrar resultados solo para trabajar con el bloque 4k, que es, con mucho, el escenario más común e indicativo para evaluar el rendimiento.

Resultado de rendimiento (IOps) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k1363078.6156234519441052047612217647634413114202364

Resultado de rendimiento (IOps) en forma gráfica. Lectura / Escritura Mix%.



Prueba del sistema 1.5 en 12 unidades. Pruebas de ancho de banda


Grabación secuencial de 1 MB: 8612 MBps.
Lectura secuencial de 1 MB: 20481 MBps.
Grabación secuencial de 128 Kb - 7500 MBps.
Lectura secuencial de 128 Kb - 20400 MBps.

Examinaremos nuevamente los indicadores de rendimiento de hardware obtenidos al final del artículo, comparándolos con los números del software probado en él.

Prueba 2: Prueba de MDRAID


Cuando hablamos de una matriz de software, MDRAID viene a la mente primero. Recuerde que este es el RAID de software base para Linux, que se distribuye de forma gratuita.

Veamos cómo MDRAID maneja el sistema de 12 discos propuesto con un nivel de matriz RAID 0. Todos entendemos que construir RAID 0 en 12 unidades requiere un coraje especial, pero ahora necesitamos este nivel de matriz para demostrar las capacidades máximas de esta solución.

Prueba 2.1 MDRAID. RAID 0. Prueba IOPS


Resultado de rendimiento (IOps) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k10103961049306.61312401.41459698.61932776.82692752.82963943.6
8k513627.8527230.4678140771887.81146340.61894547.82526853,2
16k261087.4263638.8343679.2392655.2613912.81034843.21288299.6
32k131198.6130947.4170846.6216039.4309028.2527920.6644774.6
64k65083.465099.285257.2131005.6154839.8268425322739
128k32550.232718,243378,666999.878935.8136869.8161015.4
1m38023718,43233,43467,235466150.88193.2

Resultado de rendimiento (IOps) en forma gráfica. Lectura / Escritura Mix%.



Prueba 2.2 MDRAID. RAID 0. Pruebas de retraso


Tiempo de respuesta promedio (ms) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R65% / W35%R100% / W0%
4k0,030150,0675410.102942
8k0,032810,0821320.126008
16k0,0500580.1142780.170798

Tiempo de respuesta promedio (ms) en forma gráfica. Lectura / Escritura Mix%.



Tiempo máximo de respuesta (ms) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R65% / W35%R100% / W0%
4k6.70423.72570,8568
8k6.59182.26010.9004
16k6.34662.77412.5678

Tiempo máximo de respuesta (ms) en forma gráfica. Lectura / Escritura Mix%.



Prueba 2.3 MDRAID. RAID 0. Pruebas de ancho de banda


Escritura secuencial de 1 MB: 7820 MBPS.
Lectura secuencial de 1 MB - 20418 MBPS.
Escritura secuencial de 128 Kb - 7622 MBPS.
Lectura secuencial de 128 Kb - 20,380 MBPS.

Prueba 2.4 MDRAID. RAID 6. Prueba IOPS


Veamos ahora qué tiene este sistema en el nivel RAID 6.

Opciones de creación de matriz
mdadm --create --verbose --chunk 16K / dev / md0 --level = 6 --raid-devices = 12 / dev / nvme0n1 / dev / nvme1n1 / dev / nvme2n1 / dev / nvme3n1 / dev / nvme4n1 / dev / nvme5n1 / dev / nvme8n1 / dev / nvme9n1 / dev / nvme10n1 / dev / nvme11n1 / dev / nvme6n1 / dev / nvme7n1

El volumen total de la matriz fue de 7450.87 GiB.

Comenzamos la prueba después de la inicialización preliminar de la matriz RAID.

Resultado de rendimiento (IOps) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k39907,64284961609.878167.6108594,6641950.41902561.6
8k19474,420701,630316,439737.857051.6394072.21875791.4
16k10371,410979,21602220992.829955,6225157,41267495.6
32k8505,68824.81289616657.823823173261.8596857.8
64k5679,459318576,211137,215906,4109469.6320874.6
128k3976,84170,25974,27716.61099668124.4160453.2
1m768,8811,21177,815152149,64880,45499

Resultado de rendimiento (IOps) en forma gráfica. Lectura / Escritura Mix%.



Prueba 2.5 MDRAID. RAID 6. Pruebas de retraso


Tiempo de respuesta promedio (ms) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R65% / W35%R100% / W0%
4k0.1937020.1455650.10558
8k0.2665820.1866180.127142
16k0.4262940.2816670.169504

Tiempo de respuesta promedio (ms) en forma gráfica. Lectura / Escritura Mix%.



Tiempo máximo de respuesta (ms) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R65% / W35%R100% / W0%
4k6.13064.54164.2322
8k6.24744.51973.5898
16k5.40745.58614.1404

Tiempo máximo de respuesta (ms) en forma gráfica. Lectura / Escritura Mix%.



Vale la pena señalar que aquí MDRAID mostró un muy buen nivel de demoras.

Prueba 2.6 MDRAID. RAID 6. Pruebas de ancho de banda


Escritura secuencial de 1 MB: 890 MBPS.
Lectura secuencial de 1 MB: 18800 MBPS.
Escritura secuencial de 128 Kb - 870 MBPS.
Lectura secuencial de 128 Kb - 10400 MBPS.

Prueba 3. Zvol sobre ZFS RAIDZ2


ZFS tiene una función de creación de RAID incorporada y un administrador de volumen incorporado que crea dispositivos de bloque virtual, que es utilizado por muchos fabricantes de almacenamiento. También aprovecharemos estas características creando un grupo con protección RAIDZ2 (análogo a RAID 6) y un volumen de bloque virtual encima.

Se compiló la versión 0.79 (ZFS). Opciones de creación de matriz y volumen:
ashift = 12 / compresión - off / dedup - off / recordsize = 1M / atime = off / cachefile = none / Type RAID = RAIDZ2

ZFS muestra muy buenos resultados con el grupo creado recientemente. Sin embargo, con el doblaje repetido, el rendimiento se reduce significativamente.

El enfoque SNIA es bueno porque le permite ver resultados reales al probar sistemas de archivos similares (el basado en ZFS) después de sobrescribirlos repetidamente.

Prueba 3.1 ZVOL (ZFS). RAIDZ2. Prueba de IOps


Resultado de rendimiento (IOps) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k15719,615147,214190,215592,417965,644832,276314.8
8k15536,214929,415140.81655117898.844553,476187.4
16k16696,615937,215982.61735018546,244895,475549,4
32k11859,6109159698,210235,41126526741.838167.2
64k74446440,26313,26578,27465,614145.819099
128k4425,43785,64059,83859,44246,47143,410052,6
1m772730,2779,6784824,4995,81514,2

Resultado de rendimiento (IOps) en forma gráfica. Lectura / Escritura Mix%.



Las cifras de rendimiento son completamente impresionantes. Al mismo tiempo, el zvol puro (antes de reescribir) da resultados significativamente mejores (5-6 veces más). Aquí, la prueba mostró que después del primer doblaje, el rendimiento cae.

Prueba 3.2 ZVOL (ZFS). RAIDZ2. Pruebas de retraso


Tiempo de respuesta promedio (ms) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R65% / W35%R100% / W0%
4k0.3328240.2552250.218354
8k0.32990.2590130.225514
16k0.1397380.1804670.233332

Tiempo de respuesta promedio (ms) en forma gráfica. Lectura / Escritura Mix%.



Tiempo máximo de respuesta (ms) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R65% / W35%R100% / W0%
4k90,5569,971884,4018
8k91,621486.6109104.7368
16k108.219286.2194105,658

Tiempo máximo de respuesta (ms) en forma gráfica. Lectura / Escritura Mix%.



Prueba 3.3 ZVOL (ZFS). RAIDZ2. Pruebas de ancho de banda


Escritura secuencial de 1 MB: 1150 MBPS.
Lectura secuencial de 1 MB: 5500 MBPS.
Escritura secuencial de 128 Kb - 1100 MBPS.
Lectura secuencial de 128 Kb - 5300 MBPS.

Prueba 4: RAIDIX ERA


Veamos ahora las pruebas de nuestro nuevo producto: RAIDIX ERA.
Creamos RAID6. Tamaño de la raya: 16kb. Una vez completada la inicialización, ejecute la prueba.

Resultado de rendimiento (IOps) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k354887363830486865.6619349.4921403.62202384.84073187.8
8k180914.8185371249927.2320438.8520188.41413096.42510729
16k92115.896327.2130661.2169247,4275446,6763307.41278465
32k59994.261765.283512.8116562.2167028.8420216.4640418.8
64k27660,428229.838687,656603.876976214958.8299137.8
128k14475.81473020674,230358.840259109258,2160141.8
1m2892,83031,84032,86331,67514.81587119078

Resultado de rendimiento (IOps) en forma gráfica. Lectura / Escritura Mix%.



Prueba 4.2 RAIDIX ERA. RAID 6. Pruebas de retraso


Tiempo de respuesta promedio (ms) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R65% / W35%R100% / W0%
4k0.163340.1363970,10958
8k0.2070560.1633250.132586
16k0.3137740.2257670.182928

Tiempo de respuesta promedio (ms) en forma gráfica. Lectura / Escritura Mix%.



Tiempo máximo de respuesta (ms) en forma de tabla. Lectura / Escritura Mix%.
Tamaño del bloqueR0% / W100%R65% / W35%R100% / W0%
4k5.3713.42443.5438
8k5.2433.74153.5414
16k7.6284.28914.0562

Tiempo máximo de respuesta (ms) en forma gráfica. Lectura / Escritura Mix%.



Los retrasos son similares a los que produce MDRAID. Pero para obtener conclusiones más precisas, se debe realizar una estimación de los retrasos bajo una carga más grave.

Prueba 4.3 RAIDIX ERA. RAID 6. Pruebas de ancho de banda


Escritura secuencial de 1 MB: 8160 MBPS.
Lectura secuencial de 1 MB - 19700 MBPS.
Escritura secuencial de 128 Kb - 6200 MBPS.
Lectura secuencial de 128 Kb - 19700 MBPS.

Conclusión


Como resultado de las pruebas, vale la pena comparar los números obtenidos de las soluciones de software con lo que nos proporciona la plataforma de hardware.

Para analizar el rendimiento de la carga aleatoria, compararemos la velocidad de RAID 6 (RAIDZ2) cuando trabaje con un bloque en 4k.
MD RAID 6RAIDZ2RAIDIX ERA RAID 6Hardware
4k R100% / W0%19025617631440731874,494,142
4k R65% / W35%108594179659214031823432
4k R0% / W100%3990715719354887958054



Para analizar el rendimiento de la carga en serie, analizaremos RAID 6 (RAIDZ2) con un bloque de 128k. Entre subprocesos, utilizamos un cambio de 10 GB para eliminar el impacto de caché y mostrar un rendimiento real.
MD RAID 6RAIDZ2RAIDIX ERA RAID 6Hardware
Lectura de 128k seq1040053001970020,400
128k seq escribir870110062007500



Cual es el resultado?


Las matrices RAID de software populares y asequibles para trabajar con dispositivos NVMe no pueden mostrar el rendimiento inherente al potencial del hardware.

Aquí hay una necesidad muy obvia de un software de control que pueda agitar la situación y mostrar que la simbiosis de control de programa con unidades NVMe puede ser muy productiva y flexible.

Al comprender esta solicitud, nuestra empresa creó un producto RAIDIX ERA, cuyo desarrollo se centró en resolver los siguientes problemas:

  • Alto rendimiento de lectura y escritura (varios millones de IOps) en matrices con paridad en modo mixto.
  • Rendimiento de transmisión de 30 GBps, incluso durante la conmutación por error y la recuperación.
  • Soporte para niveles RAID 5, 6, 7.3.
  • Inicialización y reconstrucción de fondo.
  • Configuraciones flexibles para diferentes tipos de carga (lado del usuario).

Hoy, podemos decir que estas tareas se han completado y que el producto está listo para usar.

Al mismo tiempo, entendiendo el interés de muchas partes interesadas en tales tecnologías, nos preparamos para el lanzamiento no solo de una licencia paga, sino también gratuita , que se puede utilizar por completo para resolver problemas tanto en unidades NVMe como SSD.

Lea más sobre RAIDIX ERA en nuestro sitio web .

UPD Pruebas de ZFS reducidas con el tamaño de registro y volblocksize 8k


Tabla de opciones de ZFS
NombrePropiedadVALORFUENTE
tanqueregistrar8Klocal
tanquecompresiónfuerapor defecto
tanquededucirfuerapor defecto
tanquesuma de comprobaciónfueralocal
tanquevolblocksize--
tanque / incursiónregistrar--
tanque / incursióncompresiónfueralocal
tanque / incursióndeducirfuerapor defecto
tanque / incursiónsuma de comprobaciónfueralocal
tanque / incursiónvolblocksize8kpor defecto

La grabación ha empeorado, la lectura es mejor.
Pero de todos modos, todos los resultados son significativamente peores que otras soluciones
Tamaño del bloqueR0% / W100%R5% / W95%R35% / W65%R50% / W50%R65% / W35%R95% / W5%R100% / W0%
4k13703.814399,820903.8256693161066955.2140849.8
8k1512616227,222393,627720,234274.867008139480.8
16k11111.211412.416980,820812.824680,248803,683710.4

Source: https://habr.com/ru/post/es420837/


All Articles