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


12

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

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

  • Leitura sequencial: 718,498 MB / s
  • Gravação sequencial: 777.414 MB / s
  • Leitura aleatória 512KB: 160.541 MB / s
  • Gravação aleatória 512KB: 838.930 MB / s
  • 4KB de leitura aleatória (QD = 1): 26.985 MB / s [6588.1 IOPS]
  • Gravação aleatória de 4KB (QD = 1): 135.603 MB / s [33106.2 IOPS]
  • 4KB de leitura aleatória (QD = 32): 177.003 MB / s [43213.6 IOPS]
  • Gravação aleatória de 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
  • 4KiB de leitura aleatória (Q = 32, T = 1): 744.328 MB / s [181720.7 IOPS]
  • Gravação aleatória de 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
  • 4KiB de leitura aleatória (Q = 1, T = 1): 56,585 MB / s [13814,7 IOPS]
  • Gravação aleatória de 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
  • Leitura aleatória 512KB: 39.260 MB / s
  • Gravação aleatória 512KB: 57.409 MB / s
  • 4KB de leitura aleatória (QD = 1): 0,546 MB / s [133,4 IOPS]
  • Gravação aleatória de 4KB (QD = 1): 0,757 MB / s [184,9 IOPS]
  • 4KB de leitura aleatória (QD = 32): 1.582 MB / s [386.3 IOPS]
  • Gravação aleatória de 4KB (QD = 32): 0.700 MB / s [171.0 IOPS]

Em todos os casos, a "Leitura aleatória 4KB Q1" é mais lenta que a gravação e, na maioria dos casos, é o oposto de "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 outro motivo ?!

Respostas:


9

TL; DR: É porque o SSD está mentindo para você e dizendo que a gravação é feita antes. Ele não pode se safar da mesma coisa para leituras.

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

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

A desvantagem disso é que, diante da súbita perda de energia, pode haver perda 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 em cache no NAND em caso de perda repentina de energia.

Você vê o mesmo para os 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 a isso, precisamos considerar o caso QD32, que é mais complicado e mais interessante.

Não é verdade o que você diz que leituras aleatórias geralmente são mais rápidas que gravações aleatórias no QD32. Depende muito de quais SSDs específicos você analisa.

Se você observar as leituras aleatórias de 4k QD1 em muitos SSDs SATA, todas elas parecem ter desempenho na faixa de 20 a 30 MB / s. Por que é que? Isso ocorre porque as leituras aleatórias de 4k QD1 são principalmente sobre latências e não sobre taxa de transferência. A latência vem de três partes:

  1. A latência da interface do SATA / AHCI que envolve dizer à unidade o que fazer e enviar os dados.
  2. O próprio controlador precisa descobrir o que fazer com os dados e as instruções que recebeu.
  3. O tempo que leva para realmente ler ou gravar os dados em um dado NAND.

Nem 1. nem 3. mudaram 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 bastante a latência de 1., e é por isso que certos SSDs m.2 e PCIe recentemente apresentaram grandes melhorias aqui.

Uma coisa que um controlador SSD pode fazer para ajudar muito com a latência é ler ou gravar em várias matrizes NAND em paralelo e dessa maneira mascarar a maior parte da latência de 3. Se você estiver fazendo leituras aleatórias QD32 4k com NCQ, o SSD pode atender à leitura pedidos fora de ordem e verifique se está lendo o maior número possível de dados NAND em paralelo.

Para gravações aleatórias QD32 4k, o SSD faz algo chamado combinação de gravação. Quando muitas solicitações de gravação pequenas chegam no controlador SSD, elas são armazenadas em cache localmente e quando um buffer grande o suficiente de gravações é construído, o controlador o divide em pedaços de tamanho adequado e grava os pedaços em várias matrizes NAND em paralelo, novamente para ajudar a mascarar o Latência NAND. Outra vantagem da combinação de gravação é que a maioria dos SSDs hoje em dia tem um tamanho de página (a menor quantidade que pode ser lida ou gravada) 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 isso que os SSDs são tão agressivos no cache de gravação.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.