Diminuição da taxa de transferência ao copiar grandes quantidades de dados

2

Estou usando um sistema Ubuntu 16.04.3 LTS (4.10.0-40-generic) com dois HDDs e várias partições em cada disco. Quando copio dados (< 5GB) entre os dois discos, obtenho uma taxa de transferência de cerca de 70 MB / s. No entanto, quando tento copiar uma grande quantidade de dados (> 30 GB) de um disco para outro, percebo vários problemas de desempenho.

Minha pergunta é se esse comportamento é normal ou esperado nos sistemas Linux?
Alguém pode me explicar isso e me aconselhar como evitar essa queda no desempenho?

Abaixo, descreverei minhas observações. No exemplo, copiei um arquivo de imagem de disco de 54 GB de sda8 (partição de 325 GB) para sdb8 (partição de 1,6 TB)

1) A taxa de transferência diminui e o iowait aumenta
Quando tento copiar mais de 50 GB, percebo que gradualmente a taxa de transferência diminui. Eu estou monitorando o desempenho usando olhares, no topo, iotop e iostat. Com um progresso de 30 GB, a taxa de transferência caiu para 58 MB / s, de 46 GB para 36 MB / s, de 52 GB para 12 MB / s. Depois disso, a taxa de transferência realmente começa a flutuar e cai abaixo de 1MB / s. Ao mesmo tempo, vejo que o iowait está aumentando de 0% até 62% no final. Durante a cópia, o disco sd8 tem uma porcentagem 'ocupada' entre 40% e 60%. O sdb do disco está 100% ocupado o tempo todo. Não apenas a taxa de transferência cai, mas também meu sistema fica menos responsivo. Eu espero que o iowait seja a causa disso.
Isso é um comportamento normal? Como a diminuição no desempenho pode ser evitada?

2) IOwait permanece alto depois de copiar
Quando a cópia terminou, percebo que o iowait ainda está alto e gradualmente começa a reduzir para valores normais. Isso leva alguns minutos. Eu acho que durante esse tempo os dados ainda são gravados em sdb a uma taxa em torno de 1 ou 2 MB / s. Usando o iotop, parece que o processo "jdb2 / sdb4-8" está causando essa gravação em disco. Durante o tempo em que o IOwait está diminuindo, meu sistema ainda sofre de falta de resposta. Também é ver que o disco sda não está mais ocupado, mas o disco sdb ainda está operando em 100% ocupado.
O que está causando a má resposta do meu sistema por alguns minutos após a ação de cópia?
Isso pode ser evitado?

3) A cópia da unidade de rede aumenta os efeitos
Quando tento copiar do meu Synology NAS para o meu disco local (sdb8), os efeitos são ainda piores. Primeiro, a unidade de rede é montada no meu sistema e, em seguida, a cópia é iniciada. Inicialmente, também é obtida uma taxa de transferência de 70MB / s, mas a taxa de transferência deve ser mais rápida. Após alguns GB, a taxa de transferência caiu muito abaixo de 1 MB / s. A cópia foi tentada usando arrastar e soltar do Nautilus, comando "cp", comando rsync, aplicativo FreeFileSync, mas todos mostraram desempenho ruim.
Qual poderia ser a causa que os efeitos de diminuição de desempenho são piores usando unidades de rede?

Informações adicionais
Durante a cópia, "iostat -dx 5" foi usado para monitorar o desempenho do disco. Cerca de 5 GB de monitoramento de progresso de cópia mostram:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0,00     0,00  530,40    0,00 68064,80     0,00   256,65     1,62    3,06    3,06    0,00   1,63  86,72
sdb               0,00 18767,20    0,20  112,40    23,20 73169,60  1300,05   144,32 1345,39  308,00 1347,23   8,88 100,00

Quando a cópia progrediu para cerca de 52 GB, mostra:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0,00     0,00   64,60    0,00  8268,80     0,00   256,00     0,22    3,41    3,41    0,00   1,76  11,36
sdb               0,00  1054,40    0,20   10,60     6,40  6681,60  1238,52   148,56 9458,00    0,00 9636,45  92,59 100,00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0,00     0,00   50,20    0,00  6425,60     0,00   256,00     0,16    3,09    3,09    0,00   1,64   8,24
sdb               0,00  2905,80    0,40   17,00     8,80 10289,60  1183,72   141,86 10199,77  652,00 10424,42  57,47 100,00

Eu percebo que estas são múltiplas perguntas, mas eu suspeito que todas estão relacionadas à mesma causa e espero que alguém possa esclarecer isso para mim.

    
por user3074126 15.01.2018 / 00:46

1 resposta

0

Infelizmente, isso é normal e esperado para o seu caso de uso de arquivos grandes. Seu caso de dois discos rígidos e um arquivo 50G + elimina um monte de conversas enganosas de "dispositivos lentos", "barramentos lentos" e "sistemas de arquivos lentos", e você fica com o problema inexplicável de uma cópia lenta. Você deve ter um pouco de memória para obter o desempenho que você tem para arquivos de 30G. Os buffers do sistema são usados, preenchidos e depois que o comando copy terminar, eventualmente serão liberados para o destino, tornando o tempo / taxas reais um pouco difíceis (até o comando "time" terminará muito antes dos buffers serem finalmente liberados.

A única "solução" que eu encontrei é usar um comando "copy" que permite você mesmo configurar buffers explícitos, como tar ou cpio podem fazer. Definir um buffer de 2M no tar me permitiu acelerar uma cópia de 10M / seg de um arquivo de 50G para cerca de 35M / seg - ainda muito mais lenta do que os 100M / seg nominais que recebo em arquivos menores (ou no Windows). >     

por ubfan1 15.01.2018 / 06:20