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 john
a 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.
fonte
Respostas:
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.
fonte
Há algumas coisas que você pode verificar para tentar melhorar o desempenho do SSD no Linux.
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.
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.
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
hdparm
no dispositivo. O cache de write-back pode ter um impacto positivo no desempenho do SSD em comparação com o write-through.fonte
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.conf
tantoreduzir 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
Observe que as
*_ratio
configurações se referem à porcentagem de RAM disponível. Se você deseja um melhor controle, use as*_bytes
configurações. Eu pessoalmente uso a seguinte configuração para minha estação de trabalho: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.
fonte