Desempenho ruim do iSCSI com discos SSD e rede 10 Gbe

8

Alvo iSCSI

Ubuntu 14.04 (Trusty Tahr) com 16 GB de RAM e 16 core CPU como Alvo iSCSI apoiado pelo LVM usando três discos SSD da Samsung, cada um capaz de executar 65k IOPS usando um controlador LSI de 6 Gbit / s com cache integrado.

Referência no disco SSD no 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

Em que sdd está configurado no hardware RAID 0 usando três SSDs Samsung 850 EVO.

Iniciador

Eu exportei um LUN 500G em um cliente Ubuntu 14.04 com 32 GB de RAM e 8 CPUs core.

Referência no 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

Há um declínio significativo no desempenho ao executar o DAS e pela rede. Esperávamos pelo menos 10k IOPS.

A comunicação entre o alvo e o iniciador é menor que 1 ms e o iperf mostra uma taxa de transferência de rede de 9,2 Gbit / s.

Eu entendo que haverá um impacto no desempenho de gravações 4k, já que cada dado precisa passar pela pilha de rede do iniciador e do alvo antes de ser gravado no disco, mas é uma queda inaceitável de 65k para 2k.

Onde o problema pode estar? Eu tenho uma NIC Ethernet de 10 Gbit / s entre o destino e o iniciador. Alguma idéia?

    
por Kevin Parker 22.03.2015 / 11:17

1 resposta

18

Resposta curta: são os resultados da latência de rede e de uma carga de trabalho em série (conforme você impôs usando direct=1 , sync=1 e iodepth=1 ).

Resposta longa: usando direct=1 , sync=1 e iodepth=1 você criou uma carga de trabalho serial, pois novas gravações não podem ser enfileiradas antes que a gravação anterior seja confirmada e confirmada. Em outras palavras, a taxa de envio de gravações depende estritamente da latência da rede. Um simples ping entre duas máquinas pode muito bem estar no excesso de 0,2 ms, mais ainda quando se usa um protocolo de nível mais alto como o TCP (e o iSCSI em cima dele). Supondo uma latência de rede total de cerca de 0,33ms, você tem um valor máximo de IOPS de cerca de 3.000. Isso é sem considerar outras fontes de latência (es: os próprios discos), portanto, está de acordo com o que você gravou.

Tente isto: execute um primeiro benchmark sem --direct=1 --sync=1 e outro com essas opções em vigor, mas aumentando a iodepth para 32 solicitações. Então relate aqui os resultados.

    
por 22.03.2015 / 12:57