¿Qué ha cambiado la vista de lista del Finder en Lion para hacer que "Calcular todos los tamaños" sea exponencialmente más rápido?

Desde mucho antes de que Mac OS X apareciera en escena, hemos podido pedirle al Finder que calcule todos los tamaños para determinar la suma total del espacio de tamaño de archivo legible contenido en cada carpeta para la ventana del Finder en cuestión.

Finder - vista de lista - mostrar opciones de vista - Calcular todos los tamaños

He probado el tamaño de la vista de lista de las carpetas en varias Mac donde no importa si hay un SSD presente o no, pero Lion es tan rápido en el cálculo de tamaños que tengo curiosidad por saber si hay alguna nueva estructura de datos de almacenamiento en caché o si Finder está usando el información de metadatos de Spotlight o una base de datos similar para acelerar enormemente este cálculo.

¿Dónde conseguiste esa ventana? Basado en el botón "Usar como predeterminado" en la parte inferior, se parece a la ventana "Mostrar opciones de vista" (<kbd>⌘J</kbd>), pero no pude mostrar nada en la sección inferior.
@CajunLuke, debe cambiar la vista de su ventana a la lista antes de abrir la ventana "Mostrar opciones de vista".

Respuestas (4)

No he observado que Lion sea más rápido en el cálculo de tamaños de carpetas (y paquetes/paquetes) durante la primera vez que calcula tamaños en una carpeta. Sin embargo, los cálculos posteriores en la misma carpeta parecen ser mucho más rápidos.

Parte de la rapidez percibida puede ser que Finder mostrará inmediatamente los tamaños calculados previamente en texto gris mientras recalcula los tamaños de las carpetas, en lugar de mostrar "--" hasta que se haya calculado. Después de volver a calcular el tamaño de una carpeta, el número se actualizará (si el tamaño ha cambiado) y se volverá negro.

Debido a que el Finder está almacenando en caché los tamaños de carpeta calculados previamente, es posible que solo esté recalculando los tamaños de las carpetas que han cambiado desde la última vez que se calculó.

Después de algunos meses de observar esto de cerca, tienes toda la razón. El mecanismo de almacenamiento en caché ahora es tan bueno que en las Mac que he usado durante un tiempo, estos datos casi siempre son correctos e instantáneos. Solo en una Mac nueva, poco después de la reinstalación o la confederación, se nota la velocidad anterior, ya que el sistema operativo tiene que recopilar la información por completo.

Antes de Lion, la columna Tamaño de archivo en Finder.app mostraba el tamaño que cada archivo requiere en el disco duro, no el tamaño exacto del archivo. Por ejemplo, los archivos de 1 byte se mostraban como 4 KB porque, de hecho, ocupan 4 KB de espacio en un sistema con formato HFS. No había una manera fácil de ver el tamaño real del archivo de 1 byte, aparte de abrir Archivo › Obtener información (o usar una aplicación diferente, como Terminal.app y luego usar ls -lsa, o un reemplazo de Finder.app como TotalFinder.app ).

(En el pasado, informé esto como error 8926275 en bugreport.apple.com ) .

A partir de Lion, este comportamiento se ha corregido y la columna Tamaño de archivo ahora mostrará el tamaño de archivo exacto para cada archivo en lugar del tamaño que asigna en el disco duro (que de todos modos depende del sistema de archivos).

Dado que estos tamaños son los mismos números que obtendría del lsbinario en la Terminal, son mucho más eficientes de calcular.

Este es un detalle increíble también. A medida que los SSD se vuelven más frecuentes y el almacenamiento se vuelve más sofisticado con las instantáneas, supongo que hace mucho tiempo que debe dejar de preocuparse por cuánto espacio ocupa una instancia específica de un archivo y solo preocuparse por el tamaño lógico de los archivos en lugar del físico.
no entiendo esto ¿Cómo es eso más eficiente? ¿No es una sola stat(2)llamada responsable de recuperar ambos números? Y ls(1)no muestra el tamaño real de los paquetes/paquetes/carpetas en absoluto, así que no tengo idea de por qué eso es relevante.
@Ken lsmuestra los tamaños de archivo muy bien para archivos normales. statpuede hacer lo mismo para un solo archivo. Mi punto es que el "trabajo adicional" necesario para calcular los tamaños de paquetes/carpetas ahora solo se necesita para paquetes/carpetas, ya no para archivos normales.
Mathias: Sí, lsmuestra tamaños de archivo para archivos regulares, no paquetes (eso es lo que dije). Lo hace llamando a stat. ¿Qué "trabajo adicional" se requería anteriormente para los archivos normales? Una sola statllamada devuelve tanto bloques ( st_blocks) como bytes ( st_size).

A partir de OS X Lion, Apple agregó una base de datos SQLite que el sistema operativo usa para el seguimiento de archivos en funciones del sistema como Spotlight. Consultar desde una base de datos SQLite en lugar de inspeccionar el sistema de archivos cada vez es más que probable que sea la causa de la mejora del rendimiento. La revisión de OS X Lion de John Siracusa explica en profundidad los cambios en el sistema de archivos en Lion. En particular, aquí encontrará una explicación sobre la nueva base de datos SQLite.

Espero que esto ayude.

Este es un enlace muy bueno, sin embargo, la base de datos SQLite aparece en todas mis Mac para rastrear solo los documentos que tienen versiones, que es un pequeño subconjunto del total de archivos en el disco. Si puede encontrar un enlace a una base de datos que almacene archivos de todos los tamaños, sería interesante, por decir lo menos, ya que el sistema de archivos ya es una base de datos para hacer esto, ¿no?

No me sorprendería si estuvieran usando metadatos de Spotlight para almacenar en caché los tamaños de los archivos. Si ya está utilizando FSEvents para realizar un seguimiento de todos los cambios en el sistema de archivos y (potencialmente) Time Machine para realizar una copia de seguridad de todos esos cambios, el costo adicional de calcular y almacenar tamaños de archivos agregados es insignificante.

Veré si puedo hacer que fs_events derrame los frijoles si se trata de metadatos o de otra manera. Me encantaría leer los datos destacados, pero aún no tengo evidencia directa.