Como calcular os threads máximos de gravação em um disco rígido se a velocidade X é desejada?

0

Estou tentando estabelecer os threads máximos de gravação que um disco rígido pode manipular, por exemplo, se a velocidade desejada for de 20KB / s por thread, como posso testar o máximo de gravações simultâneas antes que o disco seja mais lento, e vamos supor SO, sistema de arquivos ou o aplicativo não está à parte do gargalo.

Cada arquivo que está sendo escrito é diferente por usuário.

Eu li Alcance Velocidade máxima de gravação no disco rígido postado por outro usuário, mas onde esta questão é diferente é a outra questão focada em quantos arquivos um segundo enquanto o meu é quantos com base em X KB / seg.

Fiz um teste usando o HD Tune e o CrystalDiskMark, mas infelizmente acho que isso abrange apenas transferências de thread único ou não sei ler os resultados e calcular a partir deles.

Aqui está o resultado do CrystalDiskMark, não tenho certeza se isso é útil ou não.

insira a descrição da imagem aqui

Questões)

  • Como posso testar um disco rígido e descobrir quantos discos simultâneos gravam o disco pode manipular com base na configuração de uma velocidade mínima de 100 KB / s
Simon Hayter
fonte
1
Por que não jogar em um SSD e contornar o problema - SSDs não sofrem significativamente de diferenças em leituras aleatórias sequenciais e são muito mais rápidas em todos os sentidos. (Significa que a resposta se torna muito mais próxima da velocidade / usuários)
davidgo

Respostas:

1

Depende inteiramente se você está fazendo E / S seqüencial ou aleatória, e com que freqüência você quer / precisa descarregar para o disco ...

Tanto 20 KB / se 100 KB / s são insignificantes com o hardware atual. No screenshot do CrystalDiskMark, e sua preocupação eu suspeito que você esteja lidando com um disco giratório ... por que não usar um SSD?


max escritas simultâneas antes que a unidade acelere e se torne mais lenta

Não é uma questão de afogar o disco, mas sim que o movimento físico da cabeça leva tempo para ser concluído. Com E / S aleatória isso é exacerbado à medida que o tamanho de cada bloco escrito diminui, e o tempo de busca entre gravações aumenta.

vamos supor que o sistema operacional, o sistema de arquivos ou o aplicativo não façam parte do gargalo

Sem conhecer o estado do sistema de arquivos em termos de fragmentação e espaço livre, você não pode presumir isso, e certamente não pode assumir isso ao longo da vida de um produto ou instalação.


Se você está sofrendo de problemas de desempenho, então você vai querer fazer uso da E / S armazenada em buffer - isto é, gravar em um arquivo realmente coleta dados em um buffer, antes de gravar um bloco maior no disco de uma só vez.

Escrever 100 KB / s por um período de 10 segundos pode ser apresentado ao armazenamento como qualquer um dos seguintes (ou mais):

  • um bloco de 1 KB a cada 10ms
  • um bloco de 10 KB a cada 100ms
  • um bloco de 100 KB a cada 1 segundo
  • um bloco de 1.000 KB a cada 10 segundos

Estamos discutindo o regular (vermelho) ou infreqüente (verde)? Cada uma das cores " gravará " a mesma quantidade de dados no mesmo período de tempo.

gravar taxa de transferência em diferentes tamanhos de bloco

Escrever blocos maiores de uma só vez ajudará na taxa de transferência e na fragmentação do sistema de arquivos, embora haja uma desvantagem a ser considerada.

  • Escrevendo blocos maiores, com menos frequência - melhorará o rendimento, mas exigirá mais RAM e, em caso de perda de energia ou falha, uma parte maior dos dados será perdida
  • Escrever blocos menores, com mais freqüência - degradará o rendimento, mas exigirá menos RAM e menos dados serão mantidos na memória volátil.

O sistema de arquivos ou sistema operacional pode impor regras sobre a frequência com que o cache de arquivos é gravado no disco, portanto, talvez seja necessário gerenciar esse armazenamento em cache no aplicativo ... Comece usando E / S armazenada em buffer e, se isso não for possível, revise a situação.


vamos fingir que 1.000 usuários estão enviando arquivos de 1 GB a 20 KB / s

Você está satisfeito com o upload de um arquivo de 1 GB por mais de 14,5 horas? Com todos os problemas que as falhas ocorrem (ou seja, reenviá-lo desde o início).

Attie
fonte
Desculpe, IO aleatório, novos arquivos por usuário.
Simon Hayter
Basicamente, os usuários farão o upload de arquivos, eles variam em tamanho, mas seria considerado aceitável que eles fiquem em torno de 20 KB / s, obviamente, uma unidade mecânica com 20 KB / s por usuário com milhares de usuários causaria atraso devido ao salto da cabeça do disco Para trás e para frente, é essa parte que eu quero medir. Então, Idealmente, eu quero estimar este disco rígido pode manipular, 250 usuários, mas eu sei que não é tão fácil como isso, porque então você tem tempo de resposta entre o usuário eo disco, mas eu quero calcular isso na estimativa também.
Simon Hayter
Não há um utilitário no Powershell ou aplicativo que eu possa executar, que dispara 1000 threads de gravação, por exemplo?
Simon Hayter
A menos que você esteja lidando com um fluxo de dados que precisa ser capturado em tempo real a 20 KB / s, isso é realmente um problema? Mesmo assim, eu esperaria que seu aplicativo / sistema operacional armazenasse em cache uma parte do upload e escrevesse um bloco grande de uma só vez (como o verde no gráfico). Pode levar muitos segundos para preencher o cache e acionar uma gravação em disco, dependendo da configuração.
Attie
Sim, provavelmente há um aplicativo que pode comparar isso, mas não estou convencido de que seja de qualquer maneira informações úteis para o seu caso de uso ...
Attie