O que mudou a exibição da lista do Finder no Lion para tornar “Calcular todos os tamanhos” exponencialmente mais rápido?

10

Desde muito antes de o Mac OS X entrar em cena, solicitamos ao Finder que calcule todos os tamanhos para determinar a soma total do espaço de tamanho de arquivo legível contido em cada pasta da janela do Finder em questão.

Finder - exibição em lista - mostrar opções de exibição - Calcular todos os tamanhos

Testei o dimensionamento de pastas da exibição em lista em vários Macs, onde não importa se um SSD está presente ou não, mas o Lion é tão rápido no cálculo de tamanhos. Estou curioso para saber se há alguma nova estrutura de dados em cache ou se o Finder está usando o informações de metadados do Spotlight ou de um banco de dados semelhante para acelerar imensamente esse cálculo.

bmike
fonte
1
Onde você conseguiu essa janela? Com base no botão "Usar como padrão" na parte inferior, ele se parece com a janela "Mostrar opções de exibição" (<kbd> ⌘J </kbd>), mas não consegui mostrar nada na seção inferior.
Cajunluke 28/03
1
@CajunLuke, você precisa mudar a visualização da janela para listar antes de abrir a janela "Mostrar opções de exibição".
Pdd

Respostas:

3

Não observei que o Lion era mais rápido no cálculo de tamanhos de pastas (e pacotes / pacotes) durante a primeira vez que calcula tamanhos em uma pasta. No entanto, os cálculos subsequentes na mesma pasta parecem ser muito mais rápidos.

Parte da rapidez percebida pode ser que o Finder mostre imediatamente os tamanhos calculados anteriormente em texto cinza enquanto recalcula os tamanhos das pastas, em vez de mostrar "-" até que seja calculado. Depois que o tamanho de uma pasta for recalculado, o número será atualizado (se o tamanho tiver sido alterado) e ficará preto.

Como o Finder está observando o cache de tamanhos de pastas calculados anteriormente, é possível que apenas recalcule os tamanhos das pastas que foram alteradas desde a última vez em que foi calculado.

joelseph
fonte
Eu acho que este é o ponto principal da questão. O armazenamento em cache é muito melhor e os resultados parciais ou obsoletos são exibidos de forma incremental. Não sei dizer se o algoritmo foi ajustado para preencher os dados que estão em exibição, mas apenas o cache parece ser a resposta para o meu prazer em saber como ele funciona na prática agora.
Bmike
Depois de alguns meses observando isso de perto, você está totalmente correto. O mecanismo de armazenamento em cache agora é tão bom que nos Macs que utilizo há algum tempo, esses dados são quase sempre corretos e instantâneos. Somente em um novo Mac, logo após a reinstalação ou a confederação, é notada a velocidade mais antiga, pois o sistema operacional precisa coletar as informações completamente.
bmike
7

Antes do Lion, a coluna Tamanho do arquivo no Finder.app exibia o tamanho que cada arquivo requer no disco rígido, não o tamanho exato do arquivo. Por exemplo, arquivos de 1 byte foram exibidos como 4 KB, porque na verdade ocupam 4 KB de espaço em um sistema formatado em HFS. Não havia uma maneira fácil de ver o tamanho real do arquivo de 1 byte, além de abrir Arquivo ›Obter informações (ou usar um aplicativo diferente, como Terminal.app e depois usar ls -lsa, ou uma substituição do Finder.app como TotalFinder.app ).

(Naquele dia, relatei isso como bug 8926275 em bugreport.apple.com .)

No Lion, esse comportamento foi corrigido e a coluna Tamanho do arquivo agora mostrará o tamanho exato do arquivo para cada arquivo, e não o tamanho que ele aloca no disco rígido (que depende do sistema de arquivos).

Como esses tamanhos são os mesmos números que você obteria do lsbinário no Terminal, eles são muito mais eficientes para calcular.

Mathias Bynens
fonte
1
Este é um detalhe incrível também. À medida que o SSD se torna mais prevalente e o armazenamento fica mais sofisticado com os snapshots, suponho que já tenha passado muito tempo de parar de se preocupar com quanto espaço uma instância específica de um arquivo está ocupando e apenas se preocupar com o tamanho lógico dos arquivos, em oposição ao físico.
bmike
Eu não entendo isso. Como isso é mais eficiente? Uma única stat(2)chamada não é responsável por recuperar os dois números? E ls(1)não mostra o tamanho real de bundles / packages / folders, por isso não faço ideia do porquê disso ser relevante.
26712 Ken
O @Ken lsmostra muito bem o tamanho dos arquivos para arquivos regulares. statpode fazer o mesmo para um único arquivo. O que quero dizer é que o “trabalho extra” necessário para calcular o tamanho dos pacotes configuráveis ​​/ pastas / agora é necessário apenas para pacotes configuráveis ​​/ pacotes / pastas, e não para arquivos regulares.
Mathias Bynens
Mathias: Sim, lsmostra o tamanho dos arquivos comuns, não os pacotes (foi o que eu disse). Faz isso chamando stat. Que "trabalho extra" era necessário para arquivos regulares anteriormente? Uma única statchamada retorna os blocos ( st_blocks) e bytes ( st_size).
Ken
1

Eu não ficaria surpreso se eles estivessem usando os metadados do Spotlight para armazenar em cache os tamanhos dos arquivos. Se você já está usando o FSEvents para rastrear todas as alterações no sistema de arquivos e (potencialmente) o Time Machine para fazer backup de todas essas alterações, o custo adicional de calcular e armazenar tamanhos de arquivo agregados é insignificante.

Cajunluke
fonte
Vou ver se consigo fazer com que fs_events derrame os feijões se forem metadados ou não. Eu adoraria ler dados em destaque - mas ainda não tenho evidências diretas.
Bmike
1

A partir do OS X Lion, a Apple adicionou um banco de dados SQLite que o sistema operacional usa para rastreamento de arquivos em recursos do sistema, como o Spotlight. Consultar a partir de um banco de dados SQLite em vez de inspecionar o sistema de arquivos toda vez é mais do que provável a causa da melhoria de desempenho. A revisão do OS X Lion de John Siracusa explica detalhadamente as alterações no sistema de arquivos do Lion. Particularmente, aqui você encontrará uma explicação sobre o novo banco de dados SQLite.

Espero que isto ajude.

Christian Correa
fonte
Este é um link muito interessante, no entanto, o banco de dados SQLite aparece em todos os meus macs para rastrear apenas documentos que possuem versões, que é um pequeno subconjunto do total de arquivos na unidade. Se você puder encontrar um link para um banco de dados que armazene todos os tamanhos de arquivo, seria interessante dizer o mínimo, já que o sistema de arquivos já é um banco de dados para fazer isso, não?
bmike