¿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?

10

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.

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

He probado el tamaño de la vista de lista de carpetas en varias Mac donde no importa si hay un SSD o no, pero Lion es tan rápido en el cálculo de tamaños. 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.

bmike
fuente
1
¿De dónde sacaste esa ventana? Según el botón "Usar como valores predeterminados" en la parte inferior, se parece a la ventana "Mostrar opciones de visualización" (<kbd> ⌘J </kbd>), pero no pude mostrar nada en la sección inferior.
Cajunluke
1
@CajunLuke necesita cambiar su vista de ventana a lista antes de abrir la ventana "Mostrar opciones de vista".
pdd

Respuestas:

3

No he observado que Lion sea más rápido al calcular los tamaños de carpeta (y paquete / paquete) 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 carpeta, en lugar de mostrar "-" hasta que se haya calculado. Después de que se haya recalculado 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é de forma observable los tamaños de carpeta previamente calculados, es posible que solo vuelva a calcular los tamaños de las carpetas que han cambiado desde la última vez que se calculó.

joelseph
fuente
Creo que este es el meollo del problema. El almacenamiento en caché es mucho mejor y los resultados parciales o obsoletos se muestran de forma incremental. No puedo decir si el algoritmo está ajustado para completar los datos que están a la vista, pero el almacenamiento en caché solo parece ser la respuesta a mi gusto con cómo funciona en la práctica ahora.
bmike
Después de algunos meses de observar esto de cerca, tiene toda la razón. El mecanismo de almacenamiento en caché ahora es tan bueno que en los Mac que he usado durante un tiempo, estos datos son casi siempre correctos e instantáneos. Solo en una nueva Mac poco después de la reinstalación o confederación se nota la velocidad anterior, ya que el sistema operativo tiene que recopilar la información por completo.
bmike
7

Antes de Lion, la columna Tamaño del 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 muestran 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 Finder.app como TotalFinder.app ).

(De vuelta en el día, me informó de esto como error 8926275 en bugreport.apple.com ).

A partir de Lion, este comportamiento se ha corregido, y la columna Tamaño del archivo ahora mostrará el tamaño exacto del archivo 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 Terminal, son mucho más eficientes para calcular.

Mathias Bynens
fuente
1
Este es un detalle impresionante también. A medida que el SSD se vuelve más frecuente y el almacenamiento se vuelve más sofisticado con las instantáneas, supongo que ha pasado mucho tiempo debido a que deja de preocuparse por la cantidad de espacio que ocupa una instancia específica de un archivo y solo se preocupa por el tamaño lógico de los archivos en lugar del físico.
bmike
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, por lo que no tengo idea de por qué es relevante.
Ken
@Ken lsmuestra los tamaños de archivo muy bien para los archivos normales. statpuede hacer lo mismo para un solo archivo. Mi punto es que el "trabajo extra" necesario para calcular los tamaños de paquetes / paquetes / carpetas ahora solo se necesita para paquetes / paquetes / carpetas, ya no para archivos normales.
Mathias Bynens
Mathias: Sí, lsmuestra los tamaños de archivo para archivos normales, no paquetes (eso es lo que dije). Hace esto llamando stat. ¿Qué "trabajo adicional" se requería para los archivos normales anteriormente? Una sola statllamada devuelve ambos bloques ( st_blocks) y bytes ( st_size).
Ken
1

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 rastrear todos los cambios en el sistema de archivos y (potencialmente) Time Machine para respaldar todos esos cambios, el costo adicional de calcular y almacenar tamaños de archivo agregados es insignificante.

Cajunluke
fuente
Veré si puedo conseguir fs_events para derramar los beans si son metadatos o no. Me encantaría leer datos destacados, pero todavía no tengo evidencia directa.
bmike
1

Comenzando con OS X Lion, Apple ha agregado una base de datos SQLite que el sistema operativo utiliza para el seguimiento de archivos en funciones del sistema como Spotlight. La consulta 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 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.

Christian Correa
fuente
Este es un enlace muy bueno, sin embargo, la base de datos SQLite aparece en todos mis Mac para rastrear solo 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 todos los tamaños de archivo, sería interesante por decir lo menos ya que el sistema de archivos ya es una base de datos para hacer esto, ¿no?
bmike