5 votos

¿Cómo es DaisyDisk tan rápido?

DaisyDisk escanea el disco duro de mi Mac con una rapidez increíble en comparación con, por ejemplo, du . Me pregunto cuál es el truco. Sospecho que no sería tan rápido en sistemas de archivos que no sean Mac, pero no lo he probado. ¿Alguna pista?

10voto

Ramesh Sukumaran Puntos 181

Soy el desarrollador de DaisyDisk. Tendría que alargarme para explicar cómo lo conseguimos en la parte de ingeniería, pero puedo asegurar que la aplicación no hace ningún "atajo" o "truco". El escaneo es real y completo.

Como ya se ha mencionado, es un poco difícil hacer una medición precisa debido a la caché del disco. Cada experimento le dará un tiempo diferente, dependiendo de muchos factores. Pero es cierto que DaisyDisk es mucho más rápido que cualquier otro escáner de disco. Esto se nota especialmente en los discos SSD. Sin embargo, no he intentado compararlo con "du".

0 votos

No estaba insinuando "atajos" o "trucos" en ningún sentido negativo :-) A lo que me refería es que no parecía que DD estuviera escaneando el tipo de cada archivo examinando el contenido mientras se ejecutaba; sólo está mirando las entradas del catálogo/directorio (que es lo mismo que du ) para construir la salida rápida. Examinar el tipo tendría que ser asumido rápidamente por la extensión del archivo (o donde se encontró, por ejemplo, el dir de música de iTunes) o examinar el archivo (más lento). Al ver que el tiempo de bmike coincidía estrechamente con du con DD, yo asumiría que DD no está examinando el contenido del archivo. En cualquier caso, ¡una buena aplicación y una gran interfaz de usuario!

0 votos

No hay problema, y gracias por el cumplido :) Por supuesto, DaisyDisk no necesita escanear el contenido de los archivos, sólo el catálogo (nombre, tamaño) es suficiente para la tarea de encontrar los mayores acaparadores de espacio. Esto es exactamente lo que hace 'du' también, sólo que de forma menos óptima (supongo). Sólo quería señalar que es imposible encontrar a los mayores "infractores" hasta que no los escanees todos, así que no hay realmente ningún atajo. También hasta ahora no usamos la información de la extensión (tipo) en DaisyDisk, sólo el tamaño. (Quizás lo añadamos más adelante).

0 votos

Gracias @swa16, me alegra saber de ti :) DD tiene, en efecto, una gran interfaz de usuario, ¡sigue el buen trabajo!

4voto

Jenea Puntos 2702

Nunca he utilizado DaisyDisk, pero a juzgar por el vídeo de demostración de su página web, parece que utilizan algunos trucos para hacerlo rápido.

En primer lugar, ¿está usted seguro de que du ¿es más lento? Pruebe a ejecutar du / >/dev/null y ver si es más rápido que DaisyDisk tenga en cuenta que el sistema de archivos puede haber sido almacenado en caché después de lo que fue primero para propósitos de tiempo, por lo que la segunda ejecución tendrá esa ventaja.

du es bastante rápido, ya que sólo mira las entradas del directorio e informa de la ruta y el tamaño de los archivos. La única forma de saber de qué archivo se trata sería hacer una conjetura por la extensión del archivo o mirar el archivo para determinar su tipo (por ejemplo, los bytes "mágicos" de UNIX). La ruta de la extensión del archivo es rápida, examinar el archivo es obviamente mucho más lento ya que tienes que sacar el archivo.

Con la du de salida, podría determinar rápidamente la vista de los directorios de nivel superior; puede filtrar eso en el código y hacer una representación como lo hace DaisyDisk y sólo mostrar rebanadas de pastel de tamaño. Si se profundiza en los directorios (por ejemplo, /Users), entonces se repite el proceso pero centrándose sólo en ese nivel. Dado que DaisyDisk sólo muestra los 10 o 20 principales acaparadores de espacio, no necesita entrar en detalles para averiguar cuáles son los archivos más pequeños (fíjese que los agrupa convenientemente en "Archivos pequeños de 750 MB" o alguna etiqueta). En este punto, todavía no necesita profundizar tanto en los archivos reales y tal vez si no adivina por la extensión sólo tiene que determinar la "magia" de unos pocos archivos grandes que va muy rápido.

Así que lo que probablemente estamos viendo es que determinó rápidamente el nombre, la ruta y el tamaño de cada archivo en la unidad (como du puede demostrarlo), pero mostrando hábilmente sólo a los principales infractores para ayudarle a llegar a lo que le interesa, ya que la mayoría de la gente no utilizará una herramienta como ésta para obtener los pequeños archivos insignificantes; irá al Finder para examinar los archivos si es que te molestas en ese nivel . Realmente no parece haber nada especial aquí, excepto que sólo necesita examinar el tipo de archivo o el contenido cuando el usuario lo pide específicamente y el programa evita hacer ese pesado trabajo la mayor parte del tiempo.

¿Qué es lo que hace que DaisyDisk sea especial en comparación con (por ejemplo) la aplicación gratuita "Grand Perspective" para OSX? Por un lado, una interfaz elegante (me gusta la función de examinar el archivo y arrastrarlo para recogerlo/eliminarlo), pero también creo que GP examina los archivos mientras los escanea, ya que muestra todo en su vista gráfica y colorea por tipo de archivo. Usted podría hacer el mecanismo de color por tipo con un du también, pero sólo estás adivinando basándote en la extensión del archivo y/o en dónde lo has encontrado.

En definitiva, se trata de una aplicación hábil con una interfaz inteligente. ¿Por qué es rápida? Porque parece que han tomado atajos para evitar el trabajo pesado hasta que sea absolutamente necesario. Para mí, estoy bien con la Gran Perspectiva :-)

0 votos

Sospechaba que estaban tomando atajos, pero tampoco había tenido en cuenta la salida de la pantalla, que es lo que más probablemente les está llevando la mayor parte del tiempo (se me sigue olvidando, ¡maldito IO! :)

3voto

Oskar Puntos 1242

No soy capaz de medir ninguna gran diferencia en du o DaisyDisk que la aplicación nativa es más lenta en algunos casos que la herramienta de línea de comandos.

time du ~ > /dev/null 2>&1

La primera edición de du fue de 0m7.947s y la segunda fue de 0m5.465s y DaisyDisk fue de unos 8 segundos con un cronómetro ambas veces.

Mi opinión es que está viendo retrasos debido a la salida en pantalla de las herramientas de línea de comandos que miden más del disco. ¿Está utilizando DaisyDisk para escanear como administrador?

0 votos

De hecho, es probable que esa sea la respuesta. Además, lo que dijo @bjb :)

3voto

Rich S Puntos 106

Me he dado cuenta de que du utiliza getattrlist() en modo monohilo. Encontré un código que Apple publicó hace algún tiempo con la versión de High Sierra. Daisydisk probablemente utiliza getattrlistbulk() con múltiples hilos, ya que noté un uso más uniforme del núcleo de la CPU.

En mi Mac, daisydisk es siempre 2x - 3x más rápido que du . He probado esto con mi carpeta de inicio de 100G, 20K directorios, 350K archivos. El sistema de archivos hace algo de caché, así que es mejor probar esto en un sistema frío, o con un directorio grande para reducir los beneficios de la caché.

Este fragmento de código me ha resultado útil para getattrlistbulk - https://www.snip2code.com/Snippet/526248/A-sample-on-how-to-properly-use-getattrl

Este fragmento todavía utiliza un solo hilo, y el hilo estaba ligado a la IO, mi uso de la CPU fue de alrededor del 35% solamente. Si de alguna manera se distribuye el trabajo en múltiples hilos, espero que esto sea súper rápido.

0 votos

Excelente respuesta e información de la API. Estoy encontrando ncdu también es agradablemente rápido. Asegúrese de leer todos los comentarios del desarrollador de DaisyDisk - detalles muy interesantes apple.stackexchange.com/a/263198/5472

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X