Por que as leituras de 4k nos benchmarks do hdd / ssd são mais lentas que as gravações?

7

Existem várias ferramentas de referência disponíveis para testar a velocidade de uma unidade de computador.

Aqui está um exemplo de referência de um SSD SATA:

  • Leitura sequencial: 718.498 MB / s
  • Gravação sequencial: 777.414 MB / s
  • Aleatório Ler 512 KB: 160,541 MB / s
  • Random Write 512KB: 838.930 MB / s
  • Leitura aleatória 4KB (QD = 1): 26,985 MB / s [6588,1 IOPS]
  • Gravação aleatória 4KB (QD = 1): 135,603 MB / s [33106,2 IOPS]
  • Leitura aleatória de 4KB (QD = 32): 177,003 MB / s [43213,6 IOPS]
  • Escrita aleatória 4KB (QD = 32): 178,397 MB / s [43554,0 IOPS]

m.2 SSD:

  • Leitura Sequencial (Q = 32, T = 1): 829,119 MB / s
  • Gravação sequencial (Q = 32, T = 1): 677,645 MB / s
  • Aleatório Ler 4KiB (Q = 32, T = 1): 744,328 MB / s [181720,7 IOPS]
  • Escrita aleatória 4KiB (Q = 32, T = 1): 144,876 MB / s [35370,1 IOPS]
  • Leitura Sequencial (T = 1): 785.600 MB / s
  • Gravação Sequencial (T = 1): 789.973 MB / s
  • Leitura aleatória 4KiB (Q = 1, T = 1): 56,585 MB / s [13814,7 IOPS]
  • Aleatório Grave 4KiB (Q = 1, T = 1): 170.449 MB / s [41613,5 IOPS]

HDD:

  • Leitura sequencial: 114,988 MB / s
  • Gravação sequencial: 111,043 MB / s
  • Aleatório Ler 512 KB: 39.260 MB / s
  • Random Write 512KB: 57,409 MB / s
  • Aleatório Ler 4KB (QD = 1): 0,546 MB / s [133,4 IOPS]
  • Escrita aleatória 4KB (QD = 1): 0,757 MB / s [184,9 IOPS]
  • Aleatório Ler 4KB (QD = 32): 1,582 MB / s [386,3 IOPS]
  • Escrita aleatória 4KB (QD = 32): 0,700 MB / s [171,0 IOPS]

Em todos os casos, "Random Read 4KB Q1" é mais lento que write e na maioria dos casos é o oposto para "QD32".

Em alguns fóruns, as pessoas dizem que é uma limitação em relação à estrutura do chip SSD, mas, como de costume, os discos rígidos mostram o mesmo comportamento, parece ser uma outra razão!

    
por mgutt 03.08.2016 / 01:19

1 resposta

5

TL; DR: É porque o SSD está mentindo para você e dizendo que a gravação é feita antes dela. Não pode se dar bem com as leituras.

A versão mais longa da resposta é o cache de gravação.

Vamos começar com o caso QD1. O SSD reportará a gravação como concluída no sistema operacional depois de receber os dados e salvá-los em um cache localmente na unidade, mas antes de gravá-los na NAND. Isso faz uma grande diferença porque, na verdade, gravar dados em NAND é bastante lento. Para leituras, ele realmente tem que ler os dados do NAND antes que ele possa enviá-lo de volta (a menos que tenha lido antes e ainda tenha em cache, mas isso é muito improvável com leituras aleatórias).

A desvantagem disso é que, em face da perda repentina de energia, pode haver perda de dados de dados gravados no SSD, mas que ainda não chegaram ao NAND. Alguns SSDs corporativos incluem um super capacitor que armazena energia suficiente para terminar de gravar os dados no cache para NAND em caso de perda repentina de energia.

Você vê a mesma coisa para discos rígidos, porque eles também estão fazendo cache de gravação. Eles simplesmente não estão sendo tão agressivos quanto a isso. Por que o SSD é tão agressivo? Para responder, precisamos nos mover para considerar o caso do QD32, que é mais complicado e mais interessante.

Não é verdade o que você diz que as leituras aleatórias são geralmente mais rápidas do que as escritas aleatórias no QD32. Depende muito de quais SSDs específicos você olha.

Se você olhar para as leituras aleatórias de 4k QD1 em muitos SSDs SATA, todas parecem funcionar na faixa de 20-30 MB / s. Por que é que? É porque as leituras aleatórias de 4k QD1 são principalmente sobre latências e não throughput. A latência vem de três partes:

  1. A latência da interface do SATA / AHCI, que envolve informar ao drive o que fazer e enviar os dados.
  2. O controlador em si tem que descobrir o que fazer com os dados e instruções que recebeu.
  3. O tempo necessário para ler ou gravar os dados em um dado NAND.

Nenhum 1. ou 3. mudou muito em muito tempo, e é por isso que as leituras aleatórias de 1k QD1 também não mudaram muito.

A recente mudança de SSDs de SATA / AHCI para PCIe / NVMe reduziu muito a latência de 1., razão pela qual alguns SSDs m.2 e PCIe recentemente mostraram grandes melhorias aqui.

Uma coisa que um controlador SSD pode fazer para ajudar bastante com a latência é ler ou gravar em vários NAND em paralelo e assim mascarar a maior parte da latência de 3. Se você estiver fazendo leituras aleatórias QD32 4k com NCQ, o SSD pode Atender os pedidos de leitura fora de ordem e certifique-se de que está lendo a partir de quantos NAND morre em paralelo quanto possível.

Para QD32 4k escreve aleatoriamente, o SSD faz algo chamado escrita combinando. Quando um monte de pequenos pedidos de gravação vem no controlador SSD armazena-los localmente e quando um buffer grande o suficiente de gravações construiu o controlador divide em pedaços de bom tamanho e escreve os pedaços para múltiplos NAND morre em paralelo, novamente para ajudar a mascarar o Latência NAND. Outra vantagem da combinação de gravação é que a maioria dos SSDs atualmente tem um tamanho de página (menor que pode ser lido ou gravado) maior que 4k, e combinar gravações até chegar ao tamanho da página ajuda a evitar muita amplificação de gravação. É para fazer essas coisas que os SSDs são tão agressivos no cache de gravação.

    
por 24.09.2016 / 11:04