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.
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.
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ó.
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 ls
binario en la Terminal, son mucho más eficientes de calcular.
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.ls
muestra los tamaños de archivo muy bien para archivos normales. stat
puede 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.ls
muestra 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 stat
llamada 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.
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.
Cajunluke
pdd