NVMe ssd: Por que a escrita em 4k é mais rápida que a leitura?

51

Eu tenho um SSD Samsung 960 Pro 512 GB no NVMe com o PCIe Gen.3x4 em execução. Eu uso o driver Samsung NVMe 2.0.0.1607. O SSD está funcionando bem. No entanto, não entendo por que a escrita de 4k é mais rápida que a leitura de 4k. Estou usando o AS Benchmark:

insira a descrição da imagem aqui

É um fator de 3! Há algo de errado (com o meu sistema ou o AS Benchmark) ou isso é normal?

musbach
fonte
E ainda muito mais rápido que um disco rígido rotativo!
Zan Lynx

Respostas:

76

As leituras em 4K serão a coisa mais difícil que a unidade pode fazer. Eles estão entre os menores tamanhos de bloco com os quais o inversor poderá lidar, e não há como pré-carregar grandes quantidades de dados; na verdade, eles provavelmente são ineficientes se a lógica de carga antecipada da unidade pretender ler qualquer coisa maior que 4kb.

É mais provável que as leituras de unidade "Normal" sejam maiores que 4kb, pois há muito poucos arquivos muito pequenos e até mesmo o arquivo de paginação é lido em partes grandes, pois seria estranho que um programa tivesse "apenas" 4KB de memória paginada. Isso significa que qualquer pré-carregamento que a unidade tente fazer realmente penalizará a taxa de transferência da unidade.

As leituras em 4K podem passar pelo buffer da unidade, mas a parte "aleatória" do teste as torna totalmente imprevisíveis. O controlador não saberá quando a unidade precisará das leituras "grandes" mais comuns novamente.

As gravações em 4K, por outro lado, podem ser armazenadas em buffer, enfileiradas e gravadas sequencialmente de maneira eficiente. O buffer da unidade pode executar grande parte do trabalho de captura e gravação para o qual foi projetado, e o nivelador de desgaste pode até alocar todas essas gravações em 4K no mesmo bloco de apagamento da unidade, transformando ocasionalmente o que é uma gravação "aleatória" em 4K algo mais próximo de uma gravação seqüencial.

Na verdade, eu suspeito que isso é o que está acontecendo nas gravações "4K-64Thrd", o "64-Thrd" aparentemente está usando uma grande profundidade de fila , sinalizando para a unidade que possui uma grande quantidade de dados para ler ou gravar . Isso aciona muitos agrupamentos de gravações e, portanto, se aproxima da velocidade de gravação sequencial da unidade. Ainda há uma sobrecarga na execução de uma gravação em 4K, mas agora você está expondo completamente o potencial do buffer. Na versão de leitura do teste, o controlador do inversor, agora reconhecendo que está sob uma carga pesada muito constante, para de pré-carregar dados, possivelmente evita o buffer e alterna para o modo de leitura "bruto", aproximando-se novamente da velocidade de leitura sequencial.

Basicamente, o controlador da unidade pode fazer algo para tornar a gravação em 4K mais eficiente, especialmente se um cluster chegar em um momento semelhante, enquanto não pode fazer nada para tornar um único 4K mais eficiente, especialmente se estiver tentando otimizar fluxo de dados pré-carregando dados no cache.

Mokubai
fonte
5
Não faz parte da resposta em si, mas suspeito que a "leitura em 4K" (versão não 64Thrd) esteja realmente expondo o tamanho do bloco de leitura padrão da unidade como 32K ou 64K. Isso seria 2600/50 = 52 (64K com alguma sobrecarga + a leitura 4K original) ou 1200/50 = 24 (32K com alguma sobrecarga + a leitura 4K reduzindo-a).
Mokubai
16
Boa resposta no geral, mas não acredito que "existam muito poucos arquivos tão pequenos". Na verdade, suspeito que na maioria dos sistemas a maioria dos arquivos seja 4k ou menor. Eles não ocupam a maior parte do espaço , mas isso é outra questão.
Hbbs
3
A resposta mais simples é provavelmente a seguinte: se você fizer uma de cada vez, não poderá sobrepor as leituras, porque nem descobrirá para que bloco será a próxima leitura até retornar os dados da leitura anterior. Mas você pode sobrepor completamente as gravações, pois pode obter todos os dados para a próxima gravação enquanto ainda trabalha na anterior.
David Schwartz
2
@hobbs Se você usar, por exemplo, NTFS, o tamanho padrão do cluster é 4K (ou um múltiplo), o que significa que o sistema de arquivos NTFS funciona em blocos de 4K, mesmo que os arquivos e / ou os metadados sejam menores. Portanto, arquivos menores não fazem diferença. Para todos os efeitos, um sistema Windows lê / grava em blocos 4K ou múltiplos disso.
Tonny
11
@ Hobbs: Com o NTFS, você provavelmente obterá a leitura desses arquivos pequenos gratuitamente (!). Arquivos pequenos são armazenados na própria entrada do diretório, adjacente ao nome do arquivo. Você precisa atingir um tamanho de arquivo bastante particular próximo a 4KB para ter um arquivo 4KB real em disco.
MSalters
16

Outras respostas já explicaram por que a escrita é mais rápida que a leitura; Gostaria de acrescentar que, para esta unidade, isso é absolutamente normal, pois é confirmado pelos benchmarks que você pode encontrar nas análises.

Opinião de ArsTecnica

A ArsTechnica revisou a unidade, sua versão (512 GB) e a de 2 TB:

ArsTechnica (Este gráfico não é imediatamente visível na resenha, é o quinto na primeira galeria, você deve clicar nele)

O desempenho desses dois modelos é muito semelhante e seus números se parecem com os seus: a unidade pode ler a 37 MB / se escrever em 151 MB / s.

Opinião de AnandTech

A AnandTech também revisou a unidade: eles usaram o modelo de 2 TB, calculando a média dos resultados dos testes com uma profundidade de fila de 1, 2 e 4. Estes são os gráficos:

Leitura AnandTech 4K Gravação AnandTech 4K

A unidade lê em 137 MB / se escreve em 437 MB / s. O número é muito maior que o seu, mas provavelmente é devido às profundidades da fila mais altas. De qualquer forma, a velocidade de gravação é 3 vezes a velocidade de leitura, como no seu caso.

Revisão do PC World

Mais uma análise da PC World : eles testaram a versão de 1 TB e os resultados para 4K são 30 MB / s para leitura e 155 MB / s para gravação: Gráfico PC World a velocidade de gravação está alinhada com a sua, mas aqui está a unidade. ainda mais lento na leitura. O resultado é que a proporção é de cinco para um, não de três para um.

Conclusão

As análises confirmam que, para esta unidade, é normal que a velocidade de gravação para 4K aleatório seja muito mais rápida que a velocidade de leitura: dependendo do teste, pode ser até 5 vezes mais rápida.

Sua unidade está bem. Não há motivo para acreditar que esteja com defeito ou que seu sistema esteja com um problema.

Fabio diz Restabelecer Monica
fonte
8

O controlador SSD armazena em cache as gravações na NVRAM integrada e a libera para a mídia flash em momentos oportunos. A latência de gravação é, portanto, a latência de acesso ao cache, geralmente 20us. As leituras, pelo contrário, são veiculadas na mídia, com tempo de acesso de 120 a 150us, na melhor das hipóteses.

Andrey Kuzmin
fonte
1

Para expandir a resposta de Andrey, você precisa observar as despesas gerais envolvidas antes que o SSD possa sinalizar ao computador que a operação está concluída.

Para uma gravação, os dados devem ser meramente gravados em um cache interno da RAM. Posteriormente, ele será gravado na memória flash, juntamente com outros blocos de 4k e metadados necessários para verificar, corrigir erros e localizá-los.

Para uma leitura, o SSD deve primeiro localizar os dados. O local que o computador deseja ler é chamado de endereço lógico e não possui um relacionamento direto com o local físico dos dados na memória flash. O SSD converte o endereço lógico em um físico, com base na geometria da memória flash (a maneira como as células são organizadas), remapeamento incorreto de blocos, nivelamento de desgaste e vários outros fatores. Em seguida, é necessário aguardar o término de qualquer outra operação antes de recuperar os dados do flash, verificá-los e, se necessário, reler e aplicar a correção de erros, possivelmente até reescrever o bloco inteiro em outro lugar.

Embora o tempo total gasto por uma operação de gravação possa ser maior que uma operação de leitura típica, o tempo gasto para o SSD relatar que a operação foi concluída na medida em que ele pode processar comandos adicionais é menor. Com blocos grandes, a sobrecarga não é o fator limitante, mas com muitos blocos pequenos, ele começa a limitar a velocidade de leitura / gravação.

user3241
fonte