Atividade de gravação pesada no desempenho do sistema de bombas nucleares SSD


13

Percebi que, quando faço aplicativos pesados ​​de gravação, todo o sistema fica mais lento. Para testar isso, eu executei isso para fazer uma (relativamente) baixa CPU, alta atividade de disco:

john -incremental > file_on_SSD

Isso distribui dezenas de milhares de strings por segundo para um arquivo no disco do sistema.

Quando isso acontece, o mouse fica lento, os TTYs ficam sem resposta, os aplicativos "desaparecem" e geralmente todo o computador fica inutilizável. Quando eu posso eventualmente Control + C john, o sistema volta à sua força máxima após alguns segundos.

Este é um exemplo extremo, mas tenho problemas semelhantes com atividades um pouco menos intensivas em gravação, como copiar arquivos grandes de fontes rápidas ou transcodificação.

Meu disco principal do sistema operacional é um SSD bastante rápido ( OCZ Agility 60GB ) com EXT4. Se eu gravar johna saída em um disco mecânico com EXT4, não encontro as mesmas lentidões, embora a taxa seja muito mais lenta (o SSD faz ~ 42.000 palavras por segundo, o mecânico faz 8.000 w / s). A taxa de transferência pode ser relevante. O disco mecânico também não tem nada a ver com o sistema. São apenas dados.

E estou usando o kernel 2.6.35-2, mas notei esse problema desde que obtive esse SSD quando provavelmente estava usando 0,31 ou algo desse período.

Então, o que está causando a desaceleração? Questão EXT4? Problema no kernel? Problema de SSD? Tudo acima? Algo mais?

Se você acha que preciso executar um teste adicional, basta deixar um comentário e me dizer o que fazer e anexarei o resultado à pergunta.


Talvez você também deva mencionar qual SSD você está usando. Nem todos os SSDs são iguais.
Cristian Ciupitu

@ Cristian: Adicionado. É uma agilidade da OCZ.
Oli

Respostas:


12

Esse é um problema conhecido há algum tempo. O uso de um FS ajustado por SSD como o Btrfs pode ajudar, mas não pode.

Por fim, é um erro nos sistemas de gerenciamento de agendador / memória de E / S. Recentemente, houve alguns patches que visam solucionar esse problema. Consulte Corrigido: O problema de capacidade de resposta do desktop Linux?

Esses patches podem eventualmente chegar ao kernel da linha principal, mas, por enquanto, você provavelmente precisará compilar seu próprio kernel se desejar corrigir esse problema.


2
Se bem entendi, os patches para isso devem entrar no linux 2.6.37 .
JanC 28/08/10

1

Há algumas coisas que você pode verificar para tentar melhorar o desempenho do SSD no Linux.

  1. Defina o ponto de montagem como 'noatime'. Atividade extra que atualiza os tempos de acesso geralmente é desperdiçada na maioria dos casos de uso. Especialmente no caso de bombear continuamente linhas únicas em um arquivo, você está forçando várias atualizações no sistema de arquivos para cada acesso.

  2. Verifique o elevador. O elevador padrão para a maioria das distros é configurado para pratos giratórios de acesso aleatório. Os SSDs não precisam de lógica extra, portanto, configurar o elevador para noop pode melhorar o desempenho, permitindo que o hardware gerencie as gravações.

  3. Armazenamento em cache write-through v write-back. Isso é um pouco mais esotérico, mas você pode verificar o método de armazenamento em cache usado hdparmno dispositivo. O cache de write-back pode ter um impacto positivo no desempenho do SSD em comparação com o write-through.


Você poderia @nzwulfin escrever um pouco mais sobre a configuração do elevador?
Grzegorz Wierzowiecki

Parece que o desempenho do SSD foi bom. É todo o resto que sofre.
Thorbjørn Ravn Andersen

0

Seu cache de arquivos provavelmente está ajustado incorretamente para sua carga de trabalho. Infelizmente, o kernel do Linux é estúpido o suficiente para não lidar com isso automaticamente e os padrões são muito ruins se você tiver muita memória RAM e dispositivos de bloco lentos o suficiente. Consulte https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ para obter detalhes.

Eu sugiro tentar modificar /etc/sysctl.conftanto

vm.dirty_background_ratio = 3
vm.dirty_ratio = 6

reduzir bastante a pressão da RAM causada pelo cache de gravação para permitir que o kernel lide melhor com outras tarefas. Isso trocará uma latência aprimorada por uma taxa de transferência mais baixa.

Outra possibilidade é aumentar o armazenamento em cache, mas se o seu processo estiver constantemente escrevendo novos dados o tempo todo, você atingirá uma latência muito ruim se o cache ficar cheio. Se você quiser experimentar, pode fazer algo como

vm.dirty_background_ratio = 5
vm.dirty_ratio = 80

Observe que as *_ratioconfigurações se referem à porcentagem de RAM disponível. Se você deseja um melhor controle, use as *_bytesconfigurações. Eu pessoalmente uso a seguinte configuração para minha estação de trabalho:

vm.dirty_background_bytes = 50000000
vm.dirty_bytes = 200000000

Isso limita o cache de gravação em segundo plano a 50 MB e força a gravação síncrona se 200 MB estiverem no cache.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.