Algumas idéias ridículas para os fabricantes de discos rígidos

Recentemente, o disco rígido perdeu terreno na luta contra os SSDs, dos quais há velocidade e falta de medo de vibração por pânico, economizando apenas devido ao baixo custo de colocar um gigabyte de dados e mais ciclos de reescrita. Vamos pensar se as poucas idéias a seguir ajudarão a avançar no disco rígido.

Um disco rígido consiste em um ou vários discos finos com uma superfície ferromagnética montada em um eixo, girados pelo motor a uma velocidade de vários milhares de rotações por minuto. Uma parte separada é um bloco de cabeças que se move ao longo do raio do disco. Se foram utilizados sistemas anteriores que moviam o bloco de cabeças em uma linha reta (como o sistema usado em CD / DVD), agora o roqueiro é normalmente usado. As cabeças são fixadas em uma extremidade da viga e um sistema móvel está localizado no outro lado. No início, os servos eram responsáveis ​​por todos os movimentos, mas depois que aprenderam a fazer ímãs fortes "muito e barato", o mecanismo de interação do campo magnético do ímã e os campos eletromagnéticos da bobina de arame à qual a corrente elétrica era fornecida começou a ser usado.

Como armazenamento, um disco rígido fornece três dimensões:
  • ilinder - fica a uma certa distância do centro do disco, ao longo do qual ocorrem as operações de leitura e gravação e, antes de iniciá-las, é necessário mover o bloco principal para um ou outro cilindro;
  • cabeça - cada lado do disco na superfície em que os dados podem ser colocados e sobre os quais a cabeça é colocada, respectivamente, existe também o conceito de uma “faixa” que define os dados colocados em uma superfície específica em um determinado cilindro;
  • segmento - um pedaço do círculo da pista colocado em uma das superfícies de trabalho ao longo da qual um dado está localizado.


Para ler um segmento de dados, o disco rígido deve mover o bloco de cabeças para o cilindro desejado, selecionar o fluxo de dados da cabeça desejada e aguardar até que o disco se transforme no segmento desejado sob o bloco de cabeças e somente então os dados possam ser lidos ou gravados.
O tempo de acesso aos dados varia dependendo da sua sorte e existem várias situações.

Caso 1: você tem sorte e, depois de receber um comando para ler, o disco rígido viu que o bloco principal está localizado no cilindro desejado, começa a ler os dados e o primeiro segmento lido é o que você precisa. Para calcular a sua sorte, vamos tentar calcular o tempo que essa operação levará:
Defina as variáveis:
  • t1 é a hora em que o comando foi enviado para o disco rígido;
  • t2 - tempo de processamento do comando pelo disco rígido;
  • t3- ;
  • t4- ;
  • t5- ;
  • t6-

t3 e t4 para o caso descrito tendem a zero e nós os ignoraremos, assim como o tempo de transmissão do comando t1 (para 10-12 bytes do comando isso será 1/100 parte dos dados) e o tempo de processamento do comando t2 (depende da complexidade dos cálculos e da velocidade processador, mas assumimos que seja rápido o suficiente para ignorar esse período).

Restam t5 e t6 para calcular esses valores, tomamos as características das interfaces e a leitura do fluxo do disco (a velocidade de ler um determinado número de segmentos em uma linha de uma trilha). Para simplificar os cálculos, definimos que um segmento de 1000 bytes (na realidade são 512 ou 4096 bytes de dados mais uma certa quantidade de dados de serviço) e a leitura do fluxo como 50 Mb / s (há mais, há menos).

t5 - 1000 bytes * (1 / 50.000.000 bytes / s) = 20 μs por leitura / gravação de um segmento
t6 - depende da velocidade de transferência de dados, vamos calculá-lo para diferentes interfaces:

IDE
  • DMA33 - 33 Mb / s = 1000 * (1/33 000 000) = 30 μs (mais do que o tempo gasto na leitura)
  • DMA66 - 66 Mb / s = 1000 * (1/66 000 000) = 15 μs
  • DMA100 - 100 Mb / s = 1000 * (1/100 000 000) = 10 μs

SATA
  • SATA I-1500 Gbit / s = 150 Mb / s = 1000 * (1/150 000 000) = 6,6 μs
  • SATA II / SAS -3000 Gbit / s = 300 Mb / s = 1000 * (1/300 000 000) = 3,3 μs
  • SATA III / SAS 2-6000 Gb / s = 600 Mb / s = 1000 * (1/600 000 000) = 1,6 μs


Por que dividi a velocidade SATA por 10, mesmo que o byte seja 8 bits? O fato é que a transmissão ocorre no modo serial e, para transferir dados de maneira confiável, são usados sinais de sincronização (bits de início e parada, porta olá COM ) ou os dados são codificados para não obter um canal saturado , a codificação é usada de forma que, apesar de pelo valor do fluxo de bytes original (todos os 0 ou 255), como resultado, obtemos uma combinação com um número igual de zeros e uns, a frequência do sinal também diminui devido à transcodificação do sinal (sim, a frequência é mais baixa e a velocidade é mais alta).

No total, obtemos que, em caso de sorte, você receberá seus dados em 21,6 - 50 μs e, pelos cálculos desse caso, entende por que os fabricantes criam novas interfaces de alta velocidade, apesar do fato de a velocidade de leitura de discos ser muito mais lenta (quanto mais rápida a interface de comunicação, mais rapidamente, seus dados podem ser transferidos a partir do momento em que estiverem prontos entre o remetente e o destinatário).

Caso 2: você não tem tanta sorte e precisa mover o bloco principal para outro cilindro e, depois que o cilindro desejado for encontrado, aguarde até que o disco gire 180 graus para acessar o segmento desejado.

Infelizmente, não sei o tempo de movimentação e posicionamento da cabeça, mas você pode calcular quanto tempo leva para mover o segmento em um círculo e o tempo de posicionamento igual à metade do tempo de rotação do disco, e esse valor é conhecido e, portanto, consideramos o tempo de rotação do disco (metade para o posicionamento meia volta do disco de leitura).

Para calcular, você precisa descobrir quantas rotações ocorrem por segundo e descobrir o período dividindo 1 pelo número de rotações:

5400 rpm - 1 (5400/60) = 11ms
5900 rpm - T = 10 ms
7200 rpm - T = 8 ms
10.000 rpm - T = 6 ms
15.000 rpm - T = 4 ms

Você encontra algum significado familiar? Direita! O tempo médio de acesso a dados para um disco é aproximadamente igual ou igual ao período de rotação do disco, por que a média? Como existe:

Caso 3: você está sem sorte, o bloco de cabeçote está no primeiro cilindro e o segmento no último, o tempo de movimento do bloco de cabeçote demorou quase o mesmo que o período de rotação do disco após o bloco de cabeçote ser posicionado no cilindro desejado, e quando a leitura dos dados começou, descobrimos que obtivemos o próximo segmento após o desejado e, para lê-lo, você precisa esperar até que o disco faça outra revolução, enquanto eu não digo nada sobre o caso 4: quando os dados não são do primeiro (e possivelmente subsequente) momento foram pr leia (conte quanto tempo demora, Minium * T 2 vol.).

Que conclusão pode ser feita nesta fase? "Eureka: você precisa girar o eixo até 100500 rotações!". Mas nem tudo é tão simples, se você estava girando em um carrossel, você deve saber que, se o carrossel não girar muito rápido, é fácil permanecer nele em qualquer parte, se o carrossel for desenrolado muito rapidamente, a única maneira de ficar é ficar mais perto do centro e segurar firme. O que acontecerá com os discos se eles forem desaparafusados ​​fortemente: primeiro, as bordas do disco começarão a se dispersar em direções diferentes devido a forças centrífugas, e o disco começará a se expandir primeiro aumentando em direções diferentes e, como a velocidade de rotação não diminui e o tamanho do disco aumenta, as centrífugas também aumentam forças, o que leva à destruição de ligações moleculares e temos "bigbadabum", e várias peças do disco.Por causa da ação das forças centrífugas, os discos de alta velocidade produzem um diâmetro menor para que não se rasgem.

Aqui a primeira idéia ridícula aparece : por que é impossível fazer dois blocos de cabeças localizados um em frente ao outro em vez de um (e se funcionar com dois, tente 3, 4 e até 5, 6). O que isso nos dá:

1) com um aumento no número de peças, a "confiabilidade" do sistema "diminui, mas, como temos um sistema de backup," aumentamos a confiabilidade ".

2) os bloqueios de cabeça se movem de forma síncrona (os pulsos causados ​​pelo movimento das cabeças não funcionam durante a leitura / gravação de dados) e, se o segmento acabou de pular, o segundo bloco de cabeça terá a chance de lê-lo em T rev / 2 (para isso, no caso clássico, precisamos giraria o eixo duas vezes mais rápido).

3) os blocos de cabeçote atuam em tarefas separadas (a influência dos pulsos de movimento do bloco de cabeçote não é essencial para operações de leitura / gravação), o controlador sabendo onde esse ou aquele segmento está localizado pode mover o bloco de cabeçotes que é mais vantajoso em posição, para reduzir o tempo perdido na rotação do eixo e o número as operações de entrada / saída dobrarão.

4) Existem duas situações em que precisamos processar uma grande quantidade de dados de uma só vez:

-copiar / mover um arquivo grande (Hi Blu-ray);
-read-modify-write um arquivo (Olá para os bancos de dados).

Na versão clássica do disco rígido, ao copiar, lemos o bloco de dados no buffer, movemos o bloco de cabeças para outra parte, escrevemos dados, retornamos para um novo pedaço de dados, com uma pequena quantidade de buffer, perdemos muito tempo movendo o bloco de cabeças com uma grande quantidade de dados . No caso da modificação de um arquivo, preenchemos o buffer, modificamos (isso pode ser feito em paralelo com a leitura, assim que os primeiros dados na configuração desejada são recebidos) e após a modificação que escrevemos. Em um esquema modificado, podemos copiar o arquivo na velocidade máxima, ler dados de um bloco de cabeçotes e gravar o segundo bloco na velocidade mais alta possível, o que dependerá principalmente da fragmentação do arquivo. Agora, para discos rígidos, isso é possível se duas unidades forem usadas , uma leitura,escreva para outro.

O segundo aspecto da operação do disco rígido é a sua confiabilidade e, em particular, defeitos típicos, omitimos os defeitos da lógica do programa, isso precisa ser reparado em outro lugar. Só irei anunciar defeitos que dependem dos recursos de design do disco rígido:
  • obstrução do eixo durante a partida (bem, existe a chance de rolar o eixo com uma ação externa, iniciar o disco, ler os dados e enviá-lo para repouso);
  • encravamento do eixo durante a operação (aqui as consequências já dependem da sua sorte);
  • , , , () ( , );
  • , , , , , ;
  • , , , , .

Todo mundo sabe que o maior valor não é o custo do disco rígido (oi $ -y), mas os gigabytes de "informações úteis" cuidadosamente coletadas. Para salvar dados, são utilizados sistemas RAID de diferentes níveis, para os quais é necessário o uso de vários discos rígidos. É aqui que surge a segunda idéia ridícula : usar a tecnologia RAID em uma única unidade.

No caso de uma falha completa do disco, ele certamente não será salvo, mas em caso de perda de dados de um a dois segmentos, ajudará completamente a corrigir a situação.

A primeira abordagem, que é facilmente implementada por software, é colocar toda a superfície, ou apenas dados críticos ou importantes (0 segmento, tabela de partições, arquivos de configuração do sistema) usando a tecnologia RAID 5: A + B = Soma, obtendo duas partes de três podemos restaurar facilmente o terceiro, o espelho ou a duplicação são amplamente utilizados; por exemplo, várias entradas da tabela de arquivos mestre são duplicadas no NTFS, mas isso não economiza muito em caso de uma falha grave; além disso, o "espelho" perde metade do volume no dobro, enquanto no caso da coleta de estatísticas segmentos ilegíveis, é possível perceber a possibilidade de colocação de dados em um "A + B + C + D + E + E + F + G = I", perderemos 1/9 do volume, mas aumentará a chance de recuperação de dados em caso de perda de um segmento de dados.

A segunda abordagem relacionada à modificação da lógica do trabalho do controlador é usar dados com uma soma de verificação para colocar dados não em uma faixa, mas em diferentes superfícies dos discos, essa implementação salvará a situação em que um dos chefes de trabalho parou de responder completamente, sempre lemos valores de outras superfícies receberão os dados iniciais, mas, salvando os dados, podemos acalmar solenemente o sofredor.

Na verdade, a terceira idéia ridícula (embora já se refira a unidades externas como uma classe) será a seguinte: delegar suporte para alocação de arquivos e suporte ao sistema de arquivos ao controlador de disco.

agradecimentos: owniumo
Já possui: Disco rígido Kinetic para armazenamento escalável de objetos


Como isso ajudará: o processador central transferirá apenas o descritor de arquivo e qual peça ele precisa, deixando de ser distraído por interrupções associadas à construção da cadeia FAT, por exemplo, e o controlador calculará onde as peças especificadas estão armazenadas e fornecerá ao controlador apenas a parte desejada do arquivo.

Você pode implementar isso:
  • desenvolvimento e substituição de firmware de fábrica (possivelmente no hardware atual, mas caro em termos de modificações subseqüentes e o número de opções de disco, olá aos desenvolvedores de aplicativos móveis);
  • desenvolvimento de um sistema de arquivos que dará suporte ao firmware dos fabricantes de discos;
  • desenvolvimento e implementação de uma linguagem de programação no firmware com a ajuda da qual você pode descrever o trabalho com o sistema de arquivos

Aqui estão, na verdade, três idéias ridículas que são difíceis de se testar, mas elas não dão um sono tranquilo.

PS O uso aleatório de marcas registradas ou patentes é aleatório. Todas as idéias originais estão disponíveis para uso sob um contrato de licenciamento de formigueiros .

Source: https://habr.com/ru/post/pt383225/


All Articles