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!