Baixo desempenho iSCSI com discos SSD e rede de 10 Gbe

10

Destino iSCSI

Ubuntu 14.04 (Trusty Tahr) com 16 GB de RAM e 16 núcleos de CPU como destino iSCSI suportado por LVM usando três discos SSD 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

Onde sddestá configurado no RAID 0 de hardware usando três SSDs Samsung 850 EVO.

Iniciador

Exportei um LUN 500G em um cliente Ubuntu 14.04 com 32 GB de RAM e 8 CPUs principais.

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á uma queda significativa de desempenho ao fazer o DAS e pela rede, eu esperava pelo menos 10k IOPS.

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

Entendo que haverá um impacto no desempenho das gravações em 4k, pois cada dado precisa passar pela pilha de rede do iniciador e do destino antes de ser gravado no disco, mas essa é uma queda inaceitável de 65k para 2k.

Onde pode estar o problema? Eu tenho uma NIC Ethernet de 10 Gbit / s entre o alvo e o iniciador. Alguma ideia?

Kevin Parker
fonte
2
Não chega nem perto de informações suficientes e nossas bolas de cristal são caras demais para desperdiçá-las com clientes que não pagam. Se você quiser ajuda, forneça informações significativas que possam ser usadas para ajudá-lo a resolver as coisas.
TomTom
Eu editei minha pergunta, se você tiver tempo, pode me ajudar com suas sugestões.
Kevin Parker
Como é provável que a NIC e a CPU sejam o gargalo em qualquer instalação iSCSI de software, convém mencionar quais são elas.
rakslice

Respostas:

20

Resposta curta: Este é o resultado de latência de rede e uma carga de trabalho de série (como você imposta usando direct=1, sync=1e iodepth=1).

Resposta longa: usando direct=1, sync=1e iodepth=1você criou uma carga de trabalho de série, como novas gravações não podem ser colocados em fila antes da gravação anterior foi cometido e confirmada. Em outras palavras, a taxa de envio de gravações depende estritamente da latência da rede. Uma simples pingmáquina entre duas pode muito bem exceder 0,2 ms, mais ainda quando se usa um protocolo de nível superior como TCP (e iSCSI na parte superior). Presumindo uma latência total da rede de cerca de 0,33 ms, você tem um valor máximo de IOPS de cerca de 3000. Isso não leva em consideração outras fontes de latência (es: os próprios discos), portanto, está alinhado com o que você gravou.

Tente o seguinte: execute uma primeira referência sem --direct=1 --sync=1e outra com essas opções, mas aumentando iodepthpara 32 solicitações. Em seguida, relate aqui os resultados.

shodanshok
fonte