Observando a saída do comando tar
(-v flag) - observação pelo olho humano - parece ser bem mais lento quando é executado dentro de um subdiretório com cerca de quatrocentos mil pequenos arquivos (400000), existem outros subdiretórios dentro deste subdiretório com outros milhares de arquivos pequenos.
Quando tar
começa a empacotar esses subdiretórios, podemos ver cada arquivo relatado por tar
, um por um, levando cerca de 1 a 2 segundos entre eles, é incrivelmente lento considerando arquivos pequenos como alguns bytes ou dúzias de KBytes de tamanho.
Este sistema de arquivos está usando o jfs2 e é hospedado por um sistema AIX 7.1. Ele é armazenado em um sistema de armazenamento usando algum tipo de modo RAID de redundância baseado em dispositivos SSD ("discos rígidos de estado sólido"). Não há alertas ou qualquer tipo de problema relatado neste sistema de armazenamento.
Muitos testes foram feitos, enviando e não enviando o pacote tar
para um dispositivo de fita ou um arquivo normal, mas o teste a seguir é suficiente para observar essa lentidão inesperada:
tar -cvf /dev/null .
Como o jfs2 trabalha para lidar com muitos arquivos pequenos? É algo que pode ser trabalhado ao configurar um sistema de arquivos jfs2? Como tar
lida com esse tipo de estrutura de arquivos?
EDIT: informações de concorrência
Também foram feitos testes executando-os simultaneamente e não simultaneamente com outros serviços neste FS ou em todo o sistema. Mas isso não muda a lentidão, toda vez que o comando tar
começa a lidar com os subdiretórios com muitos arquivos, ele se comporta mais lentamente do que antes, nunca.
Tags performance tar jfs filesystems aix