Problema e análise de largura de banda SSD

1

Eu tenho o SSD P3700 da Intel montado em um servidor Lenovo x3650 M5 com dois processadores Intel Xeon E5-2630 v3. O servidor está executando o Ubuntu 14.04 com o kernel 4.6.4.

Eu tenho usado fio para comparar o SSD usando leituras sequenciais síncronas com tamanho de bloco de 1MB. O resultado da largura de banda é de ~ 1,4 GB / seg. Isso é relativamente pequeno para o máximo de 2,8 GB / s que deveria ser. Eu testemunhei um P3700 atinge essa largura de banda com um benchmark semelhante em um PC high-end.

Usando o blktrace , vejo que há uma grande latência de ~ 425usec até receber de volta os dados.

Editar - Eu realmente não sei se ~ latência de 425usec é alta desde a minha comparação com o P3700 spec estava incorreto. A latência de especificação é 20us para leituras sequenciais e tamanho de bloco 4KB . Medindo a latência usando fio e o tamanho do bloco de 4KB no meu sistema, obtenho uma média de ~ 50usec, que é IMHO bastante decente.

259,0    0    40510     1.298997405 21580  Q   R 99427328 + 1024 [read_simple]
259,0    0    40511     1.298998348 21580  X   R 99427328 / 99427584 [read_simple]
259,0    0    40512     1.298998572 21580  Q   R 99427584 + 768 [read_simple]
259,0    0    40513     1.298998775 21580  G   R 99427328 + 256 [read_simple]
259,0    0    40514     1.298999664 21580  X   R 99427584 / 99427840 [read_simple]
259,0    0    40515     1.298999882 21580  Q   R 99427840 + 512 [read_simple]
259,0    0    40516     1.299000060 21580  G   R 99427584 + 256 [read_simple]
259,0    0    40517     1.299001737 21580  D  RS 99427328 + 256 [read_simple]
259,0    0    40518     1.299002539 21580  X   R 99427840 / 99428096 [read_simple]
259,0    0    40519     1.299002738 21580  Q   R 99428096 + 256 [read_simple]
259,0    0    40520     1.299002932 21580  G   R 99427840 + 256 [read_simple]
259,0    0    40521     1.299004179 21580  D  RS 99427584 + 256 [read_simple]
259,0    0    40522     1.299005114 21580  G   R 99428096 + 256 [read_simple]
259,0    0    40523     1.299006132 21580  D  RS 99427840 + 256 [read_simple]
259,0    0    40524     1.299006563 21580  U   N [read_simple] 1
259,0    0    40525     1.299006765 21580  I  RS 99428096 + 256 [read_simple]
259,0    0    40526     1.299007810 21580  D  RS 99428096 + 256 [read_simple]
259,0    0    40527     1.299433368     0  C  RS 99427328 + 256 [0]
259,0    0    40528     1.299457972     0  C  RS 99427584 + 256 [0]
259,0    0    40529     1.299499252     0  C  RS 99428096 + 256 [0]
259,0    0    40530     1.299509996     0  C  RS 99427840 + 256 [0]

Eu suspeitei que há um problema com o tratamento de interrupções, talvez por algum motivo, o CPU1 obtém a interrupção do SSD e, em seguida, o encaminha para o CPU0, que adiciona a sobrecarga extra. Mas olhando para / proc / interrupts (veja a imagem abaixo) parece que todas as interrupções do nvme0q0 (e nvme0q1 por alguma razão) atingem somente o core0 - o que é OK desde que eu corro fio somente no core0.

Interrompe a captura de tela da tabela / proc / interrupt

Alguma outra ideia? depurar aconselhar? solução?

Obrigado!

    
por Gilsho 20.07.2016 / 21:01

0 respostas