Eu tenho uma caixa rodando o servidor Ubuntu 16.04. Ele tem um disco rígido SATA interno com o sistema operacional nele e um disco rígido USB 3 conectado que eu uso para armazenamento de arquivos grandes / de longo prazo. Muitas vezes, isso significa copiar um arquivo ou pasta grande da unidade interna para a unidade USB. No entanto, sempre que faço isso, o restante do sistema fica incrivelmente lento, se não quase completamente congelado, até que a transferência de arquivos seja concluída.
Eu executei alguns testes para garantir que não era devido à sobrecarga do programa ou ao tipo de arquivo. Eu tentei grandes arquivos contíguos e grandes pastas de muitos arquivos pequenos, e tentei usar cp, pv com pipes, tar com pipes e rsync. Em todos os casos, o resto do sistema trava.
Eu também tentei executar cada um desses comandos com ionice -c 3 nice -n 20 na frente deles, dando ao processo menor prioridade para o processador e o IO. htop mostra que o processo tem um bom valor de 19. Não sei se esse é o mínimo real ou se ele não está sendo definido corretamente, mas, independentemente disso, a maioria dos outros processos, incluindo os serviços da Web, tem valores menores que 19 .
A caixa está executando várias páginas web dinâmicas, um casal com php e par com python. Aqueles tornam-se basicamente inutilizáveis para a duração da transferência de arquivos. Eu presumo que a lentidão é causada pela sobrecarga do USB, já que, pelo que entendi, todas as transferências USB precisam passar pela CPU. É isso que está realmente causando a desaceleração? E, mais importante, há alguma maneira de eu atenuar isso?
EDIT (respondendo comentários):
Unidades internas e externas estão usando o ext4 nativo, portanto não há FUSE. Nada deve indexar os arquivos que eu conheço, exceto o que o Ubuntu possa fazer por padrão (isso é o Ubuntu Server sem cabeçalho). A CPU não parece estar sob carga na perspectiva de htop
, mas os relatórios de uso de tempo de atividade saltam de cerca de 0,5 para 6,0-8,0. A limitação de taxa pv
usando -L
parece ajudar, por isso é uma solução para uma ferramenta. Eu costumo usar apenas pv
ao copiar arquivos únicos. Existe alguma maneira de limitar os outros programas? Eu também prefiro mudar a priorização em vez de limitá-la. Otimize com base na carga do sistema.
É uma instalação pura do servidor Ubuntu. Ele tem o xorg instalado, mas eu não acho que haja nem mesmo um gerenciador de janelas instalado, eu só queria o X11 encaminhando sobre o ssh.
Além disso, embora os limitadores de taxa em pv, rsync, etc funcionem bem para salvar o sistema, eu também gostaria de maximizar a taxa de transferência. Existe alguma maneira, além de nice / ionice que não parece fazer muito, de dizer ao sistema para fazer a transferência o mais rápido possível, mas dar a mais alguma prioridade no sistema se ele quiser? Então, por exemplo, se eu tiver uma transferência para USB que levará uma hora para ser concluída, então meia hora em alguém começa a usar um dos sites python, ele será transferido o mais rápido possível para a primeira meia hora, mas sistema iria começar a limitá-lo quando o usuário começa a fazer pedidos para o site python. (Estou começando a pensar que esta questão deveria ter sido postada no Server Fault, e peço desculpas por isso.)