Estou tentando copiar um arquivo de 200 GB de uma montagem NFS para um disco local. O disco local é um sistema de arquivos XFS em um LVM sobre um sistema RAID 5 (controlador RAID de hardware).
Estou usando rsync
para monitorar a velocidade de transferência. No início, a velocidade de IO é de cerca de 200 MB/s, estável para os primeiros 18 GB. Mas então o desempenho cai por um fator de 10 a 20 e nunca recupera a taxa inicial. Às vezes, atinge cerca de 50-100 MB/s, mas apenas por alguns segundos, e então o processo parece travar um pouco.
Ao mesmo tempo, todas as operações file-stat no sistema de arquivos de destino ficam bloqueadas por um longo período (minutos). Além disso, interromper o processo de cópia bloqueia por vários minutos. Uma exclusão subsequente do arquivo parcialmente copiado também leva vários minutos.
Alguma ideia sobre o que poderia estar causando isso?
Responder1
Graças ao comentário de jet, examinei o cache de E/S de disco no Linux. Acontece que, como o sistema tem muita RAM (48GB) que é quase gratuita, muita é usada para o cache de E/S.
Monitorei /proc/meminfo e procurei os campos 'Dirty' (páginas sujas de cache de E/S) e 'Writeback' (páginas sujas gravadas no disco).
watch -n1 -- "grep -E Dirty|Writeback /proc/meminfo"
Mostra que o Dirty aumenta para cerca de 18 GB, depois diminui novamente, enquanto o Writeback aumenta, uma vez que as páginas sujas foram gravadas, ele cresce novamente, etc. Monitorando o disco io usando iostat
um, vê-se que durante o cache o disco não grava, apenas enquanto 'Writeback' diminui os dados são gravados no disco. A velocidade de gravação é de cerca de 15 MB/s.
Portanto, os primeiros 18 GB são rápidos, gravados no cache, mas quando a gravação real ocorre, ela fica mais lenta e, durante a gravação, a E/S do disco fica saturada e bloqueada até que todas as páginas sujas sejam enviadas para o disco.