Disco rígido muito mais lento ao executar várias leituras simultâneas longas

1

Resumo

  • De um disco rígido tradicional (discos giratórios)
  • leia um arquivo grande, obtenha um bom desempenho
  • leia outro arquivo grande ao mesmo tempo, obtenha uma taxa de transferência total dividida por 5 a 10. Uma queda de desempenho muito grande!

Além disso, a cabeça do disco movendo-se mecanicamente para frente e para trás várias vezes por segundo pode ser ouvida e sentida com a mão. Também após algumas horas a temperatura foi observada como sendo maior.

Se isso acontecer raramente ou por um curto período de tempo, tudo bem. Se isso é frequente ou por um longo período de tempo, não apenas o desempenho é ruim e anuncia vida útil mais curta.

Exemplo

  • Disco: um disco Western Digital de 2 terabytes.
  • A taxa de transferência ao ler um arquivo grande pode ser de 50 a 100 MB / s.
  • Efeito mais extremo com arquivos grandes: arquivos de vídeo (por exemplo, de 1 GB a 13 GB de tamanho). Também acontece quando se lê arquivos de foto bruta (~ 25MB).
  • Assim que outro programa lê outro arquivo simultaneamente, a taxa de transferência total cai para 5-10 MB / s.

Informações adicionais

Não é uma questão de fragmentação de arquivos. Se os arquivos estivessem fragmentados, a taxa de transferência seria lenta (muito mais lenta que a nominal de 50-100MB / s), mesmo ao ler apenas um arquivo.

Pergunta

Pode ser feito algo para obter uma taxa de transferência total razoavelmente alta ao ler vários arquivos grandes simultaneamente?

    
por Stéphane Gourichon 23.10.2016 / 09:11

2 respostas

1

Resposta rápida

  • (1) Descubra qual é o dispositivo de bloco correto (por exemplo, com mount ).
  • (2) Obtenha permissão de root.
  • (3) Ajuste o read_ahead_kb para o dispositivo.

Em meu caso, emitindo este comando:

echo 100000 > /sys/block/sdb/queue/read_ahead_kb

trouxe de volta desempenho e alívio mecânico em questão de segundos.

Por que esse valor?

O valor padrão é 128. Eu observei algum efeito aumentando-o para outros valores primeiro, como 4096, e fiquei satisfeito em 100000, mas eu acho que (1) a maior parte do efeito é obtida com o aumento inicial, (2) efeitos (se houver algum dependendo da situação, como a pressão da memória) são proporcionais ao valor e (3) pode haver algum valor acima do qual o aumento realmente não altera nada.

Mas e a sua situação?

Detalhes

  • Documentação oficial no link link é muito curto:" Número máximo de kilobytes para leitura antecipada para sistemas de arquivos neste bloco dispositivo. "

  • Documentação do RedHat 6.4.3. Noop explica um pouco mais, com dicas sobre quando aumentar pode ou não ser uma boa ideia (dica: pressão de memória). Então parece que este parâmetro é usado pelo escalonador Noop IO.

  • armazenamento - Linux - real- ajuste de controlador RAID de hardware mundial (scsi e cciss) - Falha do servidor tem dicas sobre casos (streaming de vídeo, acesso ao banco de dados) e como fazer um palpite. Além disso, o parâmetro pode ser definido não apenas através de /sys tree, mas também usando o comando blockdev .

Ou você também pode usar a fonte, luke:

por 23.10.2016 / 09:11
0

Spoiler: Haverá uma resposta SIM no final da postagem

Resposta curta:
NÃO.

Resposta de tamanho médio:
NÃO, porque
Existem 2 processos que querem acessar um recurso (o disco rígido) ao mesmo tempo. Cada processo lerá dados diferentes, portanto, o chefe precisa pular para o local onde o processo precisa de dados do prato. Estes saltos levam muito tempo e diminuem muito o rendimento total do seu disco rígido!

Resposta longa,
porque você parece carecer de algum entendimento (básico) do princípio de funcionamento de um disco rígido:
NÃO, porque
o disco rígido dos discos giratórios se comporta como um livro.

Imagine que você tenha um livro com apenas páginas vazias. Esse é o seu disco rígido quando você o compra. Nenhum dado armazenado nele.
Então você coloca em seu computador (digamos como uma segunda unidade, então não temos que lidar com o sistema operacional aqui). Quando você escreve um documento de texto longo (chamado 'texto A') e o salva no disco, é como escrever as primeiras 10 páginas (páginas 1 a 10) do seu livro. Então você copia uma imagem jpg no disco, é como fazer um desenho da sua casa nas próximas 5 páginas livres do seu livro (p. 11-15).
A tabela de conteúdo do seu livro agora tem 2 entradas:

  • texto A: p. 1-10
  • foto da casa: p. 11-15

Todos os dados no seu disco rígido podem ser apagados novamente, por isso você escreveu e desenhou tudo com um lápis, e não com uma caneta esferográfica.
Agora você escreve uma lista de compras em seu livro: p. 16-17.
Em seguida, você não gosta ou precisa mais desse desenho e quer apagá-lo, então você o remove com uma borracha. Páginas 11-15 estão em branco.
Seu TOC se parece com:

  • texto A: p. 1-10
  • lista de compras: p. 16-17

Agora você quer desenhar uma imagem do supermercado local, que é maior do que a sua casa. Então você precisa de 12 páginas. Você poderia começar na página 11, o que significa que você não teria páginas consecutivas suficientes e você precisa continuar com 18, ou você poderia começar com 18 e ter espaço suficiente para desenhar de uma só vez. A maioria ou todos os sistemas operacionais são espertos o suficiente para escolher um pedaço de espaço livre que seja grande o suficiente para os dados, mas se não houver espaço livre suficiente, ele terá que dividir o arquivo em partes menores que caberão no espaço livre existente. áreas. Isso é chamado de Fragmentação .
Vamos imaginar que você também precise fazer isso. Seu TOC se parece com:

  • texto A: p. 1-10
  • foto do supermercado, fragmento 1 de 2: p. 11-15
  • lista de compras: p. 16-17
  • foto do supermercado, fragmento 2 de 2: p. 18 a 24

Agora começamos a READING o livro.
Você quer saber os itens da sua lista de compras. O TOC diz para você ir para a página 16. Você começa a ler até chegar ao final da página 17. Feito.
Próximo: você quer ver como o supermercado fica onde você quer ir às compras. O TOC diz para você ir para a p.11 (você está na p.18 (= final da p.17) e tem que navegar 7 páginas de volta. Em um disco rígido, o cabeçote de leitura-gravação precisa fazer um salto. comece a ler até chegar ao fim de p.15, depois navegue para a p.18 (a cabeça pula de novo) e continue.

Navegar em um livro leva menos tempo do que ler, mas em um disco rígido é quase o contrário. A cabeça não pode simplesmente se mover para a próxima pista / cilindro, mas tem que 'procurar' o cilindro correto (aceleração, movimento, desaceleração, tempo de estabilização). Veja Wikipedia . Portanto, devido à fragmentação, sua leitura demora mais do que se o arquivo fosse armazenado consecutivamente.

E agora, fazemos READING WITH 2 PEOPLE :
Você quer ver a imagem do supermercado e eu quero ler o seu texto A.
Você navega até a página 11 e começa a ler.
Quando você leu p.11, eu naveguei para p.1 e comecei a ler.
Quando eu li. p.1, você navega para p.12 e continua lendo.
Quando você leu. p.12, eu navego para p.2 e continuo lendo.
...
você pode imaginar que demora muito mais para ler as páginas só porque a navegação é muito longa.
O mesmo acontece com o seu disco rígido. Você não pode fazer nada sobre isso, mas evitando o acesso simultâneo, pois isso sempre torna mais lento.

Agora, finalmente, a resposta SIM:
SIM: Compre um SSD.
Este é um disco eletrônico e opera como RAM, então você não tem quase nenhum tempo de busca e a taxa de transferência total está sempre próxima da taxa de transferência máxima possível (se não houver outros gargalos em outro lugar).

    
por 23.10.2016 / 13:36