Benchmark leitura de pastas com muitos arquivos
01/05/2013 1 Comentário
Olá a todos.
Este post é uma continuação ao post de geração de muitos arquivos em uma única pasta.
Após verificar o tempo de geração de arquivos em uma única pasta aproveitei para fazer uma segunda medição: Qual o tempo de leitura de arquivos em uma pasta com diferentes números de arquivos?
Para este exemplo, executei a rotina apenas no Ubuntu 12.04.
O algoritmo executado aproveitava os arquivos gerados do post anterior e gera um número aleatório que coincide com um arquivo na pasta. Esta rotina foi repetida, um certo número de vezes, para se chegar a um tempo médio de leitura. Os testes foram executados para cada uma das pastas geradas.
A tabela abaixo representa os dados medidos:
Interações | Arquivos | Tempo (mS) |
1.000 | 10 | 0,377 |
1.000 | 1.000 | 0,864 |
1.000 | 1.000.000 | 0,783 |
1.000 | 10.000.000 | 0,868 |
1.000.000 | 10.000.000 | 0,399 |
Num primeiro momento podemos verificar (e que a maioria deve saber) que é mais rápido ler do que gravar arquivos.
O mais importante a ser verificado é o tempo constante de leitura. Os tempos menores podem se valer de algum recurso do sistema operacional, tal como cache ou outras funcionalidades do IO.
Nas primeiras medições foram executados loops de mil interações lendo nas diferentes pastas. O tempo aumenta muito pouco conforme aumentamos o número de arquivos nas pastas. Este tempo esta na ordem de 0.1 mS ou seja 0.0001 S. Para a grande maioria das aplicações, podemos considerar como irrelevante o tempo de leitura em pastas com muitos arquivos.
Por fim, um teste extremo foi executado, iterando 1 milhão de vezes na pasta que continha 10 milhões de arquivos. Surpreendentemente o tempo médio de leitura diminuiu, certamente por conta de recursos de IO do SO.
Bom pessoal, eu gostei muito de ter realizado estas medições, pois não tenho dúvidas: O tempo de gravação e leitura de arquivos em pastas que contenham muitos deles, aumenta mas numa proporção que não é relevante para a grande maioria das aplicações.
Um abraço.