Eu tenho uma caixa executando o servidor Ubuntu 16.04. Ele possui um disco rígido SATA interno com o sistema operacional e um disco rígido USB 3 conectado que eu uso para armazenamento de arquivos grandes / longos. 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 do arquivo seja concluída.
Eu executei alguns testes para garantir que não se devesse à sobrecarga do programa ou ao tipo de arquivo. Tentei arquivos grandes contíguos e pastas grandes de muitos arquivos pequenos, e tentei usar cp, pv com pipes, tar com pipes e rsync. Em todos os casos, o restante do sistema trava.
Também tentei executar cada um desses comandos com o ionice -c 3 nice -n 20 na frente deles, dando ao processo a menor prioridade para processador e E / S. htop mostra que o processo tem um bom valor de 19. Não sei se esse é o mínimo real ou se não está sendo definido corretamente, mas, independentemente disso, a maioria dos outros processos, incluindo os serviços da Web, tem valores agradáveis inferiores a 19 de qualquer maneira .
A caixa está executando várias páginas da web dinâmicas, algumas com php e outras com python. Eles se tornam basicamente inutilizáveis durante a transferência do arquivo. Presumo que a desaceleração seja causada pela sobrecarga do USB, pois, como eu o entendo, todas as transferências USB precisam passar pela CPU. É isso que realmente está causando a desaceleração? E, mais importante, existe alguma maneira de mitigar isso?
EDIT (resposta a comentários):
As unidades internas e externas estão usando 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 (este é o Ubuntu Server decapitado). A CPU não parece estar sob carga da htop
perspectiva da empresa, mas os relatórios de uso do tempo de atividade saltam de cerca de 0,5 para 6,0-8,0. O pv
uso de limitação de taxa -L
parece ajudar, por isso é uma solução para uma ferramenta. Normalmente, uso apenas pv
ao copiar arquivos únicos. Existe alguma maneira de limitar a taxa de outros programas? Eu também preferiria alterar a priorização em vez de apenas limitá-la. Otimize com base na carga do sistema.
É uma instalação pura do servidor Ubuntu. Ele tem o xorg instalado, mas acho que não há sequer um gerenciador de janelas instalado, eu só queria o encaminhamento do X11 pelo ssh.
Além disso, enquanto os limitadores de taxa em pv, rsync, etc funcionam 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, dizer ao sistema para fazer a transferência o mais rápido possível, mas dar mais prioridade ao sistema, se ele quiser? Assim, por exemplo, se eu tiver uma transferência para USB que levará uma hora para ser concluída, meia hora em alguém começar a usar um dos sites python, ela será transferida o mais rápido possível na primeira meia hora, mas então o O sistema começaria a limitá-lo quando o usuário começar a fazer solicitações ao site python. (Estou começando a pensar que esta pergunta deveria ter sido postada em Server Fault, e peço desculpas por isso.)
iotop
ou atop
ver o acesso ao arquivo ... BTW use rsync
com a -P
opção entre outras, em vez de pv
, deve envolver menos chamadas do sistema se você copiar muitos arquivos ... Quando você copia sem pv
, você tem o mesmo problema?
top
ouhtop
). Você tentoupv -L
limitar a taxa de transferência em seus testes? Reduziu o problema? De que taxa de transferência estamos falando?