A razão para encontrar é mais rápido na segunda vez é que o linux não arquiva cache . Sempre que um arquivo é acessado pela primeira vez, ele mantém o conteúdo do arquivo na memória (é claro que só faz isso quando você tem RAM livre disponível). Se o arquivo for lido novamente mais tarde, ele poderá buscar o conteúdo da memória sem realmente ter que ler o arquivo novamente. Como o acesso à memória é muito mais rápido do que o acesso ao disco, isso aumenta a performance geral.
Então o que acontece é que no primeiro find
, a maioria dos arquivos ainda não estão na memória, então o Linux precisa fazer muitas operações de disco. Isso é lento, então leva algum tempo.
Quando você executa find
novamente, a maioria dos arquivos e diretórios já está na memória e é muito mais rápida.
Você mesmo pode testar isso se limpar o cache entre as duas execuções de localização. Então o segundo achado não será mais rápido que o primeiro. Aqui está como fica no meu sistema:
# This clears the cache. Be careful through, you might loose some data (Although this shouldn't happen, it's better to be sure)
$ sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
3
$ time find /usr/lib -name "lib*"
find /usr/lib/ -name "lib*" 0,47s user 1,41s system 8% cpu 21,435 total
# Now the file names are in the cache. The next find is very fast:
$ time find /usr/lib -name "lib*"
find /usr/lib/ -name "lib*" 0,19s user 0,28s system 69% cpu 0,673 total
# If we clear the cache, the time goes back to the starting time again
$ sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
3
$ time find /usr/lib -name "lib*"
find /usr/lib/ -name "lib*" 0,39s user 1,45s system 10% cpu 16,866 total