Remover diretórios sequencialmente vs. simultaneamente em segundo plano [duplicado]

2

Parte de um script que estou escrevendo utiliza rm -rf para 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:

rm -rf dir1 &
rm -rf dir2 &
wait

Se sim, por que?

    
por John 23.06.2016 / 21:37

3 respostas

3

Depende.

Se os arquivos removidos estiverem no mesmo sistema de arquivos e dispositivo de hardware, eles eventualmente serão seqüenciais, pois o sistema operacional aguardará o recurso físico para realizar as operações reais no hardware. Embora cada instância de rm enfileire as operações para que uma esteja disponível quando a outra terminar, não espere uma grande melhoria a partir disso.

Se o rm ocorrer em arquivos que estejam em 2 dispositivos FS / Hardware diferentes, ele será efetivamente paralelo e assíncrono, portanto será duas vezes mais rápido.

    
por 23.06.2016 / 22:05
1

Como alx741 disse que eu não acho que você vai obter qualquer benefício real de uma forma ou de outra a menos que eles estejam em sistemas de arquivos separados. Eu fiz alguns testes com um arquivo de 700MB. Aqui estão meus testes que fazem backup dos meus pensamentos. Eu 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 é 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
    
por 23.06.2016 / 23:38
0

É teoricamente possível que o simultâneo (concorrente / paralelo) a execução pode ser mais lenta . É concebível que o sistema operacional pode manter cada diretório em cluster. Ou seja, o conteúdo de dir1 pode ter números de inode que estão perto um do outro e use blocos de dados próximos uns dos outros. E o mesmo pode ser verdade para dir2 . Mas o conteúdo de dir1 pode 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 a história de como os diretórios foram criados. Se este for o caso (os dois diretórios não estão próximos), e o sistema de arquivos está em um disco (HDD) que requer fisicamente a procura de cabeças de E / S, então a execução simultânea pode exigir mais procura (→ thrashing) que a execução sequencial.

    
por 24.06.2016 / 10:40