Por que meu HDD é tão lento nos testes de velocidade "4K"?

46

O que há de errado com a minha velocidade em 4K? Por que é tão lento? Ou deveria ser assim?

Captura de tela do benchmark

Essa velocidade está boa? Por que tenho velocidade tão baixa em 4K?

Usuário6539
fonte
13
Isso é normal e esperado. "4K", neste contexto, significa leitura / gravação aleatória (em blocos de 4 kilobytes, daí o "4K"), no qual os HDDs mecânicos executam terrivelmente. É aí que você deseja um SSD. Veja aqui uma explicação mais aprofundada.
Bob
O 4Kb é usado porque é o tamanho típico de um cluster de disco e, em muitos HDDs modernos, do setor real (a estrutura de baixo nível no próprio disco). Ou seja, a menor quantidade de dados que provavelmente será transferida por vez em qualquer leitura ou gravação, mesmo que os dados solicitados sejam menores. Interessante que nenhuma resposta nesta página até agora mencione clusters ou setores.
thomasrutter
2
@thomasrutter Porque não é relevante para a resposta. A parte importante é que esse teste envolve busca aleatória. Não é relevante (até certo ponto) a quantidade de dados que está sendo transferida e se esse é um múltiplo do tamanho de setor do disco; a parte importante é que o teste transfira uma quantidade mínima de dados para medir o desempenho da busca.
Micheal Johnson
Esse teste está em uma partição ou em todo o disco? Os testes no nível da partição podem ter um desempenho muito pior nos acessos em 4K se você tiver um disco com setores físicos em 4K, mas 1 mil setores lógicos, e desalinhar o limite da partição para ultrapassar os setores.
Toby Speight
Ferramentas modernas de particionamento tendem a garantir que as partições iniciem e terminem em um limite do setor; até 1 MB de granularidade é comum agora. Longe vão os dias dos antigos "setores de 63 512 bytes" que causariam problemas aos setores nativos de 4Kb.
thomasrutter

Respostas:

85

O que você está correndo em é típico de HDDs mecânicos, e um dos principais benefícios de SSDs: HDDs têm terrível desempenho de acesso aleatório.

No CrystalDiskMark, "Seq" significa acesso seqüencial enquanto "4K" significa acesso aleatório (em pedaços de 4kB por vez, porque bytes únicos seriam muito lentos e irreais 1 ).


Definições

De maneira geral, existem duas maneiras diferentes de acessar um arquivo.

Acesso sequencial

Acesso sequencial significa que você lê ou grava o arquivo mais ou menos um byte após o outro. Por exemplo, se você estiver assistindo a um vídeo, carregará o vídeo do começo ao fim. Se você estiver baixando um arquivo, ele será baixado e gravado no disco do começo ao fim.

Da perspectiva do disco, ele vê comandos como "leia o bloco nº 1, leia o bloco nº 2, leia o bloco nº 3, leia o bloco de bytes nº 4" 1 .

Acesso aleatório

Acesso aleatório significa que não há um padrão óbvio para as leituras ou gravações. Isso não precisa significar verdadeiramente aleatório; realmente significa "não sequencial". Por exemplo, se você estiver iniciando muitos programas ao mesmo tempo, eles precisarão ler muitos arquivos espalhados pela sua unidade.

Do ponto de vista da unidade, está vendo comandos como "leia o bloco nº 56, leia o bloco nº 5463, leia o bloco nº 14, leia o bloco nº 5" "

Blocos

Eu mencionei blocos algumas vezes. Como os computadores lidam com tamanhos tão grandes (1 MB ~ = 1000000 B), até o acesso seqüencial é ineficiente se você precisar solicitar à unidade cada byte individual - há muita conversa. Na prática, o sistema operacional solicita blocos de dados do disco de cada vez.

Um bloco é apenas um intervalo de bytes; por exemplo, o bloco 1 pode ser os bytes 1 a 512, o bloco 2 pode ser os bytes 513 a 1024, etc. Esses blocos têm 512 bytes ou 4096 bytes, dependendo da unidade. Porém, mesmo depois de lidar com blocos em vez de bytes individuais, o acesso seqüencial a blocos é mais rápido que o acesso aleatório a blocos.


atuação

Sequencial

O acesso seqüencial geralmente é mais rápido que o acesso aleatório. Isso ocorre porque o acesso seqüencial permite que o sistema operacional e a unidade prevejam o que será necessário a seguir e carreguem um grande pedaço com antecedência. Se você solicitou os blocos "1, 2, 3, 4", o sistema operacional pode adivinhar que você desejará "5, 6, 7, 8" a seguir; portanto, ele diz à unidade para ler "1, 2, 3, 4 , 5, 6, 7, 8 "de uma só vez. Da mesma forma, a unidade pode ler o armazenamento físico de uma só vez, em vez de "procurar 1, ler 1,2,3,4, procurar 5, ler 5,6,7,8".

Ah, eu mencionei procurar algo. Os HDDs mecânicos têm um tempo de busca muito lento por causa de sua disposição física: eles consistem em vários discos metalizados pesados ​​girando ao redor, com os braços físicos se movendo para frente e para trás para ler o disco. Aqui está um vídeo de um disco rígido aberto, onde você pode ver os discos giratórios e os braços em movimento.

Diagrama das partes internas do disco rígido
Imagem de http://www.realtechs.net/data%20recovery/process2.html

Isso significa que, a qualquer momento, apenas o bit de dados sob a cabeça no final do braço pode ser lido. A unidade precisa esperar por duas coisas: precisa esperar o braço se mover para o anel direito ("faixa") do disco e também precisa esperar que o disco gire para que os dados necessários estejam sob a leitura cabeça. Isso é conhecido como busca 2 . Tanto os braços giratórios quanto os em movimento levam um tempo físico para se mover, e não podem ser acelerados por muito sem arriscar danos.

Isso normalmente leva muito, muito tempo, muito mais tempo do que a leitura real. Estamos falando de> 5ms apenas para chegar ao local onde o byte solicitado mora, enquanto a leitura real do byte é em média de cerca de 0,00000625ms por byte seqüencial lido (ou 0,003125ms por bloco de 512 B).

Aleatória

O acesso aleatório, por outro lado, não tem esse benefício da previsibilidade. Portanto, se você quiser ler 8 bytes aleatórios, talvez dos blocos "8,34,76,996,112,644,888,341", a unidade precisará ir "procure 8, leia 8, procure34, leia 34, procure76, leia 76, ..." . Observe como ele precisa procurar novamente para cada bloco? Em vez de uma média de 0,003125ms por bloco sequencial de 512 B, agora é uma média de (busca de 5ms + leitura de 0,003125ms) = 5,003125ms por bloco. Isso é muitas, muitas vezes mais lento. Milhares de vezes mais devagar, de fato.

SSDs

Felizmente, agora temos uma solução: SSDs.

Um SSD, uma unidade de estado sólido , é, como o próprio nome indica, estado sólido . Isso significa que não possui partes móveis . Além disso, a maneira como um SSD é organizado significa que não há (efetivamente 3 ) a necessidade de procurar a localização de um byte; já sabe . É por isso que um SSD tem muito menos uma lacuna de desempenho entre acesso seqüencial e aleatório.

Ainda existe uma lacuna, mas isso pode ser atribuído em grande parte a não ser capaz de prever o que vem a seguir e pré - carregar esses dados antes de serem solicitados.


1 Com mais precisão, as unidades LBA são endereçadas em blocos de 512 bytes (512n / 512e) ou 4kB (4Kn) por motivos de eficiência. Além disso, programas reais quase nunca precisam de apenas um byte de cada vez.

2 Tecnicamente, procurar refere-se apenas ao deslocamento do braço. A espera pela rotação dos dados sob o cabeçote é a latência de rotação, além do tempo de busca.

3 Tecnicamente, eles têm tabelas de pesquisa e remapeamento por outros motivos, por exemplo, nivelamento de desgaste, mas são completamente insignificantes em comparação com um HDD ...

Prumo
fonte
@KamilMaciorowski Na verdade, estou repensando essa simplificação agora, porque isso afasta meu cálculo de tempo de busca e leitura. Ah bem. Não é muito importante para os conceitos.
Bob
Você deve corrigir a parte aleatória Notice how it needs to look for every single byte?:: substitua bytepor block(e altere o exemplo de acordo). O drive procura a parte 4k (que pode ser ainda mais dispersa em partes de 512 bytes, mas não inferior a isso. Ela não procura entre todos os bytes! Ela procura entre todos os blocos, se o próximo bloco não estiver logo atrás (o que acontece muito em discos fragmentados.) E procurar (mover a cabeça ao redor do prato e esperar o bloco passar por baixo dele) é o que leva muito tempo (alguns milissegundos)
Olivier Dulac
2
Um pequeno dienote para 4 kiB / 512B. O 4kiB também tem o tamanho da página, bem, quase tudo, de modo que o OS $ provavelmente retire o bloco completo de 4 kiB, mesmo que os drivers LBA leiam em pedaços de 512 B. Também não acho que o problema seja que o HDD precise 'localizar' qualquer byte mais do que o SDD, além de precisar rodar fisicamente para corrigir a posição. Se você acessar o bloco novamente, precisará procurá-lo novamente, pois o HDD está girando continuamente. Qualquer remapeamento de bloco provavelmente será um efeito secundário (e o remapeamento de bloco geralmente ocorre logo após o dano de qualquer maneira, acredito que para minimizar a busca).
Maciej Piechotka
(Possivelmente, uma observação lateral completa - não tenho certeza sobre NAND / NOR, mas pelo menos o endereçamento DDR também não é completamente aleatório, como o nome indicaria, mas funciona em 'burst' de endereços. Na maioria dos casos, isso é 64 B devido a um tamanho de $ line da maioria das CPUs, mas pode ser muito maior para outras aplicações).
Maciej Piechotka
1
@OlivierDulac Eu ainda acho que a introdução de blocos é potencialmente confusa, mas tentei explicar. Resposta atualizada.
Bob
3

Como já apontado por outras respostas, "4K" quase certamente se refere ao acesso aleatório em blocos de tamanho 4 KiB.

Toda vez que um disco rígido (não um SSD) é solicitado a ler ou gravar dados, há dois atrasos significativos envolvidos:

  • Procure a latência, para que a cabeça de leitura / gravação "busque" a faixa circular correta (ou "cilindro") no prato, incluindo qualquer tempo necessário para que a cabeça se estabilize na pista e sincronize com os dados armazenados no prato
  • Latência de rotação, para que o prato giratório abaixo da cabeça de leitura / gravação gire de modo que a parte desejada da pista (o "setor") passe sob a cabeça

Ambos têm uma quantidade de tempo relativamente constante para qualquer unidade. A busca por latência é uma função da velocidade com que a cabeça pode ser movida e até que ponto ela precisa ser movida, e a latência rotacional é uma função da velocidade com que o prato está girando. Além do mais, eles não mudaram muito nas últimas décadas. Os fabricantes costumavam usar tempos médios de busca, por exemplo, em anúncios; eles praticamente pararam de fazer isso quando havia pouco ou nenhum desenvolvimento na área. Nenhum fabricante, especialmente em um ambiente de alta concorrência, deseja que seus produtos não sejam melhores do que os de seus concorrentes.

Um disco rígido de desktop típico gira a 7200 rpm, enquanto um laptop típico pode girar em torno de 5000 rpm. Isso significa que, a cada segundo, ele passa por um total de 120 rotações (unidade de desktop) ou cerca de 83 rotações (unidade de laptop). Como, em média, o disco precisará girar meia revolução antes que o setor desejado passe pela cabeça, isso significa que podemos esperar que o disco possa atender aproximadamente o dobro do número de solicitações de E / S por segundo, assumindo que

  • a busca é feita enquanto o disco está girando (esta é provavelmente uma aposta segura para os discos rígidos hoje em que a E / S envolve busca) e a latência da busca não é maior que a latência de rotação da E / S específica
  • ou a cabeça já está sobre o cilindro correto, fazendo com que o inversor não precise procurar (que é um caso especial do exposto acima, com uma latência de busca igual a zero)

Portanto, devemos esperar poder executar na ordem de 200 E / S por segundo se os dados que estão sendo solicitados a acessar (para leitura ou gravação) estiverem relativamente localizados fisicamente, resultando em latência rotacional como fator limitante. No caso geral, esperamos que a unidade seja capaz de executar na ordem de 100 E / S por segundo se os dados estiverem espalhados pelo prato ou pratos, exigindo uma procura considerável e fazendo com que a latência da busca seja o fator limitante . Em termos de armazenamento, este é o " IOPSdesempenho "do disco rígido; esse, não o desempenho sequencial de E / S, é normalmente o fator limitante nos sistemas de armazenamento do mundo real. (Essa é uma grande razão pela qual os SSDs são muito mais rápidos de usar: eles eliminam a latência rotacional e reduz bastante a latência de busca, pois o movimento físico do cabeçote de leitura / gravação se torna uma pesquisa de tabela nas tabelas da camada de mapeamento flash, que são armazenadas eletronicamente.)

As gravações geralmente são mais lentas quando há uma descarga de cache envolvida. Normalmente, sistemas operacionais e discos rígidos tentam reordenar gravações aleatórias para transformar E / S aleatória em E / S sequencial sempre que possível, para melhorar o desempenho. Se houver uma barreira explícita de liberação ou gravação no cache , essa otimização será eliminada com o objetivo de garantir que o estado dos dados no armazenamento persistente seja consistente com o que o software espera. Basicamente, o mesmo raciocínio se aplica durante a leitura quando não há cache de disco envolvido, porque não existe (atualmente incomum nos sistemas de desktop) ou porque o software o ignora deliberadamente (o que geralmente é feito ao medir o desempenho de E / S). Ambos reduzem o desempenho potencial máximo de IOPS ao do caso mais pessimista, ou 120 IOPS para uma unidade de 7200 rpm.

  • Com 100 IOPS a 4 KiB por E / S, obtemos um desempenho de cerca de 400 KB / s.
  • Com 200 IOPS a 4 KiB por E / S, obtemos um desempenho de cerca de 800 KB / s.

Que coincide quase exatamente com seus números. A E / S aleatória com tamanhos de bloco pequenos é um fator de desempenho absoluto para discos rígidos rotacionais, e é também por isso que é uma métrica relevante.

Quanto às E / S puramente seqüenciais, a taxa de transferência na faixa de 150 MB / s não é de todo irracional para os discos rígidos rotacionais modernos. Mas muito pouca E / S do mundo real é estritamente seqüencial; portanto, na maioria das situações, o desempenho de E / S puramente seqüencial se torna mais um exercício acadêmico do que uma indicação do desempenho do mundo real.

um CVn
fonte
Essa é uma ótima resposta e é muito melhor que a minha :) Apenas uma pequena nota: pelo menos a Seagate ainda especifica a latência média de busca em suas folhas de dados . WD não parece.
1300 Bob
@ Bob Obrigado. Na verdade, eu quis dizer em anúncios e similares; Eu editei a resposta para esclarecer isso. Eu acho que é seguro dizer que muito poucas pessoas ler as folhas de dados, mesmo que isso provavelmente seria uma experiência decepcionante para muitos ...
um CVn
2

4K refere-se a E / S aleatória . Isso significa que o disco está sendo solicitado a acessar pequenos blocos (4 KB de tamanho) em pontos aleatórios no arquivo de teste. Esta é uma fraqueza dos discos rígidos; a capacidade de acessar dados em diferentes regiões do disco é limitada pela velocidade na qual o disco está girando e a rapidez com que as cabeças de leitura e gravação podem se mover. A E / S sequencial , onde os blocos consecutivos estão sendo acessados, é muito mais fácil porque a unidade pode simplesmente ler ou gravar os blocos enquanto o disco está girando.

Uma unidade de estado sólido (SSD) não tem nenhum problema com E / S aleatória, pois tudo o que precisa fazer é procurar onde os dados estão armazenados na memória subjacente (normalmente flash NAND, pode ser 3D XPoint ou até DRAM) e ler ou escreva os dados no local apropriado. Os SSDs são totalmente eletrônicos e não precisam esperar em um disco rotativo ou em um cabeçote de leitura / gravação em movimento para acessar dados, o que os torna muito mais rápidos que os discos rígidos nesse sentido. É por esse motivo que a atualização para um SSD aumenta drasticamente o desempenho do sistema.

Nota lateral: o desempenho seqüencial de E / S em um SSD também costuma ser muito maior do que em um disco rígido. Um SSD típico possui vários chips NAND conectados em paralelo ao controlador de memória flash e pode acessá-los simultaneamente. Ao espalhar dados entre esses chips, é obtido um layout de unidade semelhante ao RAID 0, o que aumenta muito o desempenho. (Observe que muitas unidades mais recentes, especialmente as mais baratas, usam um tipo de NAND chamado TLC NAND, que tende a ser lento ao gravar dados. As unidades com TLC NAND geralmente usam um pequeno buffer de NAND mais rápido para fornecer maior desempenho para operações de gravação menores, mas podem desacelerar drasticamente quando o buffer estiver cheio.)

bwDraco
fonte
IIRC, alguns SSDs NVMe até usam um cache DRAM.
timuzhti
1
A maioria faz. Os SSDs Dramless estão no nível mais baixo.
Journeyman Geek