O sistema trava quando a E / S do disco está saturada

8

Quando faço uma grande transferência de arquivos do meu disco rígido externo USB3 para o meu disco rígido interno (ou vice-versa), seja via Nautilus ou via terminal, o Ubuntu (Unity) irá travar quase completamente. Coisas como alt-tab levam 20 segundos ou mais para concluir enquanto a transferência de arquivos está sendo executada. Este não é o caso quando há muitas leituras / gravações aleatórias no disco, como ao instalar pacotes.

Quando eu estava executando o Windows, eu podia executar uma transferência de arquivos em segundo plano e ainda ser capaz de fazer as coisas, ainda que mais lentamente quando algo precisava acessar o disco. Eu ainda poderia alt-tab muito bem.

Parece que o Ubuntu prioriza a transferência de arquivos acima de todas as outras E / S de disco, e é por isso que ele é bloqueado. No Windows, parece que as transferências de arquivos têm uma prioridade mais baixa, o que significa que o sistema pode permanecer responsivo enquanto o disco estiver saturado.

Como posso consertar isso? É bastante irritante, pois o computador fica completamente inutilizável ao copiar arquivos. Esse problema ocorre em 14.04 e 15.10. Eu sou forçado a ligar o meu disco rígido em uma porta USB2 para evitar esse problema, e isso resulta em tempos de transferência muito mais longos.

    
por Degru 29.11.2015 / 20:54

1 resposta

10

Eu tive o mesmo problema no meu laptop, que tem um sistema de disco bastante lento em comparação com o restante do computador.

Consegui melhorar muito isso, alterando o algoritmo de agendamento usado para transferências de disco. Por padrão, o Ubuntu usa Deadline, mas acho que meu sistema responde mais rápido quando eu uso o cfq.

Para ver o agendador que você está usando, emita o comando

cat /sys/class/block/sda/queue/scheduler    

Para fazer uma alteração única (até a reinicialização), emita o comando

echo cfq | sudo tee /sys/class/block/sda/queue/scheduler

Note que é importante que a mudança seja feita para o que você tem para o seu disco rígido externo; O meu geralmente é carregado como sdb. então eu lançaria o comando echo cfq | sudo tee /sys/class/block/sdb/queue/scheduler

Eu faço a minha mudança permanente para todas as unidades anexadas ao meu computador, adicionando o parâmetro de kernel elevator=cfq no meu arquivo grub, que é assim:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noautogroup elevator=cfq"
    
por Charles Green 29.11.2015 / 22:24