Remova diretórios sequencialmente e simultaneamente em segundo plano

Remova diretórios sequencialmente e simultaneamente em segundo plano

Parte de um script que estou escrevendo utiliza rm -rfpara remover completamente dois diretórios.

Esses diretórios são relativamente grandes e podem levar um tempo considerável para serem removidos.

Atualmente os diretórios são removidos sequencialmente:

rm -rf dir1
rm -rf dir2

Seria mais rápido removê-los simultaneamente em segundo plano por meio de:

rm -rf dir1 &
rm -rf dir2 &
wait

Se sim, por que?

Responder1

Depende.

Se os arquivos removidos estiverem no mesmo sistema de arquivos e dispositivo de hardware, eles eventualmente serão sequenciais de qualquer maneira, porque o sistema operacional aguardará o recurso físico para realizar as operações reais no hardware. Embora cada instância rmenfileirará as operações para que uma esteja disponível quando a outra terminar, não espere uma grande melhoria com isso.

Se rmocorrer em arquivos que estão em 2 dispositivos FS/Hardware diferentes, será efetivamente paralelo e assíncrono, portanto será duas vezes mais rápido.

Responder2

Como alx741 disse, não acho que você obterá nenhum benefício real de uma forma ou de outra, a menos que estejam em sistemas de arquivos separados. Fiz alguns testes com um arquivo de 700 MB. Aqui estão meus testes que apoiam meus pensamentos. Não tenho várias partições locais para brincar, então não posso testar isso.

Aqui está como um comando sequencialmente.

time rm -f test.dat1 test.dat2
real    0m0.297s
user    0m0.000s
sys     0m0.295s

Aqui está simultaneamente

time rm -f test.dat1 &
time rm -f test.dat2 &
real    0m0.145s
user    0m0.000s
sys     0m0.144s

real    0m0.150s
user    0m0.000s
sys     0m0.150s

Aqui eles estão em sequência novamente como dois comandos separados.

time rm -f test.dat1
time rm -f test.dat2
real    0m0.146s
user    0m0.000s
sys     0m0.146s

real    0m0.153s
user    0m0.000s
sys     0m0.152s

Responder3

É teoricamente possível que a execução simultânea (concorrente/paralela) possa serMais devagar. É concebível que o sistema operacional mantenha cada diretório em cluster. Ou seja, o conteúdo de dir1pode ter números de inode próximos uns dos outros e usar blocos de dados próximos uns dos outros. E o mesmo pode ser verdade para dir2. Mas o conteúdo de dir1pode não estar próximo do conteúdo de dir2. (Isso pode depender da versão do sistema operacional, do tipo de sistema de arquivos e do histórico de como os diretórios foram criados.) Se for esse o caso (os dois diretórios não estão próximos um do outro) e o sistema de arquivos estiver em um disco (HDD ) que requer busca física de cabeças de E/S, então a execução simultânea pode exigir mais busca (→ thrashing) do que a execução sequencial.

informação relacionada