Um cache simples não funcionaria. Um cache consiste em verificar se você já tem a resposta e apenas reprocessar se não tiver. Mas, nesse caso, uma única entrada ausente tornaria outras inúteis. Por isso, teria que manter todos os tamanhos diretório atualizado toda a hora.
Além disso, não subestime o possível impacto da sua proposta. Quando os sistemas de arquivos diários eram novos, havia muita oposição porque a atualização do diário era muito cara. Além disso, a maioria dos sistemas de arquivos permite opções como noatime
, nodiratime
e relatime
que reduzem esses tipos de atualização de dados. Observe que todos esses (diários e atualizações de tempo) são limitados no tempo, todos eles recebem um número específico de acessos de bloco (e geralmente são "ocultos" pelo agendamento avançado de E / S), mas atualizar o tamanho de cada diretório no caminho significa um desconhecido. quantidade de acessos.
Finalmente, nos sistemas de arquivos POSIX, não existe um 'diretório de contenção' real. Uma entrada de arquivo em um diretório aponta para um inode (a estrutura do disco que contém as informações do arquivo), mas não há referência do inode para o diretório. Isso permite o recurso 'hard link', onde mais de uma entrada (geralmente em diretórios diferentes) aponta para o mesmo inode. Mesmo se você mantiver uma lista de diretórios que apontam para o inode, estará multiplicando o número (já grande) de atualizações. Pior, agora você deve acompanhar se já atualizou cada diretório, pois em algum momento da cadeia, você terá um ancestral compartilhado, que não deve contar duas vezes a atualização. Ou deveria? talvez você precise manter dois tamanhos em cada diretório, um que conte todos os arquivos 'reais',
Afinal, não parece tão útil.