Bajo rendimiento iSCSI con discos SSD y red de 10 Gbe

10

Objetivo iSCSI

Ubuntu 14.04 (Trusty Tahr) con 16 GB de RAM y 16 núcleos de CPU como objetivo iSCSI respaldado por LVM usando tres discos SSD Samsung, cada uno capaz de hacer 65k IOPS usando un controlador LSI de 6 Gbit / s con caché integrada.

Punto de referencia en el disco SSD en el destino:

fio --filename=/dev/sdd --direct=1 --sync=1 --rw=write --bs=4k --numjobs=10 --iodepth=1 --runtime=60 --time_based --group_reporting --name=ssd-max

iops=65514

Dónde sddestá configurado en RAID 0 de hardware usando tres SSD Samsung 850 EVO.

Iniciador

Exporté un LUN 500G en un cliente Ubuntu 14.04 con 32 GB de RAM y 8 CPU centrales.

Punto de referencia en LUN exportado

fio --filename=/dev/sdg --direct=1 --sync=1 --rw=write --bs=4k --numjobs=10 --iodepth=1 --runtime=60 --time_based --group_reporting --name=client-max

iops=2400

Hay una caída significativa en el rendimiento al hacer DAS y en la red, esperaba al menos 10k IOPS.

La comunicación entre el objetivo y el iniciador es inferior a 1 ms e iperf muestra un rendimiento de red de 9,2 Gbit / s.

Entiendo que habrá un impacto en el rendimiento de las escrituras de 4k ya que cada dato debe pasar por la pila de red del iniciador y el destino antes de escribirse en el disco, pero esta es una caída inaceptable de 65k a 2k.

¿Dónde puede estar el problema? Tengo una NIC Ethernet de 10 Gbit / s entre el objetivo y el iniciador. ¿Algunas ideas?

Kevin Parker
fuente
2
No está cerca de suficiente información y nuestras bolas de cristal son demasiado caras para desperdiciarlas en clientes que no pagan. Si desea ayuda, proporcione información significativa que pueda usarse para ayudarlo a concretar las cosas.
TomTom
He editado mi pregunta, si tienes tiempo puedes ayudarme con tus sugerencias.
Kevin Parker
Dado que es probable que la NIC y la CPU sean el cuello de botella en cualquier configuración iSCSI de software, es posible que desee mencionar cuáles son.
rakslice

Respuestas:

20

Respuesta corta: Estos son los resultados de la latencia de la red y una carga de trabajo en serie (como lo impuso al usar direct=1, sync=1y iodepth=1).

Respuesta larga: usando direct=1, sync=1y iodepth=1creó una carga de trabajo en serie, ya que las nuevas escrituras no se pueden poner en cola antes de que se confirmara y confirmara la escritura anterior . En otras palabras, la tasa de envío de escrituras depende estrictamente de la latencia de la red. Un simple pingentre dos máquinas puede superar los 0.2 ms, más aún cuando se utiliza un protocolo de nivel superior como TCP (e iSCSI encima). Suponiendo una latencia total de la red de aproximadamente 0,33 ms, tiene un valor de IOPS máximo de aproximadamente 3000. Esto es sin tener en cuenta otras fuentes de latencia (es decir, los discos mismos), por lo que está en línea con lo que grabó.

Intente esto: ejecute un primer punto de referencia sin --direct=1 --sync=1, y otro con estas opciones implementadas pero aumentando las iodepth32 solicitudes. Luego informe aquí los resultados.

shodanshok
fuente