APFS: Copy on Write, tus discos duros y el consumo de energía

CoW no es una característica nueva y propia de macOS 10.13 High Sierra. De hecho, está presente en otros sistemas de archivos como Btrfs o ZFS y se utiliza de hecho de múltiples formas, desde la gestión de memoria virtual al almacenamiento de archivos pasando por las copias de seguridad en forma de snapshots o instantáneas[note]Característica que también es utilizada de forma limitada por macOS 10.13 High Sierra[/note]. CoW también es denominado implicit sharing o shadowing pero al final, no se trata más que de una forma de gestión de recursos para implementar de forma eficiente un duplicado de contenido o una copia del mismo de forma que si un archivo o recurso es duplicado pero no modificado, no es necesario crear un nuevo recurso: simplemente se crea y almacena una referencia al mismo en forma de metadatos. Lo que hace interesante a CoW es que si esa copia del archivo, y centrémonos específicamente en este caso, se modifica, solo se guardan los cambios mientras se mantiene referencia al archivo original. Esto resulta bastante eficiente ya que evita duplicados completos como ocurre en HFS+, por ejemplo, ya que cuando haces una copia de un archivo bajo este sistema de archivos, se copia todo.

Pero pongamos un ejemplo con un flujo de trabajo:

  • Bajo HFS+: duplicas un archivo de 20 Mb y le haces unas modificaciones. Esto implica que se crea una copia del archivo original completa[note]20 Mb + 20 Mb[/note] y haces modificaciones a este segundo archivo por un valor de 5 Mb con lo que la suma total de ambos archivos es 45 Mb reales[note]Es decir, el consumo físico de espacio de almacenamiento es de 45 Mb.[/note]
  • Bajo APFS: duplicas un archivo de 20 Mb y haces modificaciones. Lo que se crea como copia es una referencia al archivo original y cuando haces modificaciones al archivo copiado por un valor de 5 MB lo que tienes al final es:
    • El archivo original de 20 Mb
    • La copia referenciada al archivo original que tiene 0 Mb
    • Los cambios hechos al segundo documento por valor de 5 Mb, lo que suma un total real de 25 Mb

Lo que resulta muy conveniente, porque por el camino estamos ahorrando un montón de espacio de almacenamiento, aunque resulta confuso porque cuando pides información al respecto de ambos archivos, el original y la copia, te indica que los dos suman 45 Mb. ¿Por qué? Porque el segundo archivo, que es la copia del primero más las modificaciones, ocupa 25 Mb aunque no lo haga físicamente. Sí, es un poco lioso, pero si lo piensas con detenimiento está bien hecho así. ¿Qué pasa con el almacenamiento fantasma? Realmente, trabajando con este ejemplo, el sistema te dirá que tienes 45 MB ocupados, pero realmente son 25 Mb, y esos 20 Mb de diferencia se encargará el sistema de gestionarlos, así que no te preocupes al respecto.

Ahora que ya sabemos cómo funciona CoW de forma básica, vamos a ver cómo se implementa esta forma de trabajo en el mundo físico de una unidad de almacenamiento.

Cuando creamos un archivo, este ocupa una serie de sectores en la unidad de almacenamiento en un disco tradicional[note]O una serie de celdas de memoria en un SSD[/note] generalmente contiguas para que la lectura de ese archivo sea lo más secuencial posible. En el caso de CoW, cuando trabajamos con el segundo archivo, lo que tenemos es una referencia al primer archivo y una serie de sectores o bloques de celdas de memoria en el caso del SSD con los cambios y modificaciones.

A la hora de la lectura de ese archivo nos encontramos con dos escenarios:

  • En un disco duro tradicional, el disco debe leer los sectores del disco que corresponden al archivo original y a continuación los sectores que corresponden a las modificaciones y presentar el resultado todo junto al usuario. Esta es la clave por la que APFS no resulta eficiente en un disco duro tradicional: la cabeza lectora del disco duro tradicional tiene que hacer muchísimos viajes para recopilar toda la información y presentarla y esto supone un consumo no solo de energía por parte del disco, sino también, es más exigente a nivel de procesador, que se tiene que encargar de indicar al disco duro tradicional dónde está ubicado todo ciclo a ciclo de procesador.
  • En un SSD esta tarea es mucho más sencilla porque no hay partes mecánicas que puedan ralentizar el proceso y el acceso a las celdas de memoria es instantáneo, aunque la necesidad de utilizar ciclos de procesador adicionales para reunir la información y presentarla sigue estando ahí.

La siguiente pregunta que te harás es sencilla ¿Entonces, porque no desfragmentar el disco para que APFS sea más eficiente en un disco duro tradicional? Esto nos lleva a una característica que tu no ves pero que está presente en HFS+, la desfragmentación automática. Para una serie de archivos de un tamaño mínimo especificado[note]Si no recuerdo mal, archivos mayores de 20 MB, aunque podéis corregirme[/note], el sistema se encarga de buscar en el disco una ubicación en la que hay espacio suficiente para colocar ese archivo de forma que a la hora de leerlo, no sea necesario que la cabeza lectora viaje de aquí para allá por la superficie de plato giratorio localizando los diferentes bloques de información, acelerando el proceso de lectura y adicionalmente, siendo más efectivo en términos de consumo de energía, ya que el procesador ejecuta los ciclos para la lectura de archivo y el disco lee de corrido toda la información. Esto es clave, por ejemplo, para la reproducción de vídeo de alta calidad sin saltos ni cortes. APFS sin embargo no desfragmenta por dos razones:

  • El acceso a la información en un disco SSD es instantánea, comparativamente a la de un disco duro tradicional[note]Que se suele medir en milisegundos en un disco duro tradicional, pero que al final, por muchos milisegundos que sean, acaban pesando[/note]
  • Leer y escribir continuamente en las celdas de memoria de un disco SSD penaliza su vida, y la desfragmentación es un proceso realmente intensivo al respecto, por lo que lo que podría parecer un beneficio realmente lo que hace es limitar de forma rápida y drástica la vida de una unidad SSD.

Así la desfragmentación en un SSD, con APFS, no es necesaria porque no hay cabezas lectoras que se muevan a lo largo de un plato mecánico con lo que los tiempos de acceso se reducen prácticamente a cero y la información puede estar repartida a lo largo de la unidad de almacenamiento en bloques más pequeños. Lo que pasa es que para buscar todos esos bloques si es necesario más ciclos de procesador  para localizar y leer toda esa información repartida, que puede ser mucha. Ahora piensa que no has hecho una modificación al archivo sino 10. Tienes la información original del archivo, y 10 extensiones en forma de cambios adicionales hechos al archivo[note]y bloques de celdas consumidos[/note] repartidos a lo largo del SSD. Hay que buscarlos, leerlos y reproducirlos. En un disco duro tradicional sería impensable en términos de rendimiento, en un SSD sí es factible trabajar así.

En términos de eficiencia energética entre ambos sistemas de almacenamiento hay relativas pocas diferencias[note]Lo comido por lo servido[/note] pero con APFS sí que podemos notar que en procesos intensivos de lectura y escritura, el procesador hace un esfuerzo adicional para localizar toda esa información repartida por la unidad de almacenamiento, buscando, localizando reuniendo y presentando el archivo a través de la construcción del mismo a través de las diferentes celdas de memoria que ocupa el archivo en toda la extensión del SSDDe esto se encarga el sistema de archivos, que mantiene controlada la información de dónde está cada fragmento de archivo, incluso cuando hay enormes cantidades de extensiones que corresponden a muchos cambios en muchos archivos. El problema de ésto es cuando estás haciendo tareas intensivas de lectura y escritura y simultáneamente de procesador tirando de batería en el caso de los portátiles.

Después de todo este rollo, hemos aprendido un par de cosas interesantes. La primera de ellas, es por qué APFS no es eficiente en un disco duro convencional en términos de rendimiento y por extensión, por qué APFS no está disponible en Fussion Drive ya que este sistema implica el uso de un disco duro convencional. La segunda, que en términos energéticos, APFS resulta de forma general algo menos eficiente que HFS+ cuando lee y escribe datos, aunque lo compensa sobre todo en términos de eficiencia de consumo de recursos físicos.

0 0 votos
Article Rating
Subscribe
Notify of
6 Comments
Oldest
Newest Most Voted
Opiniones Inline
Ver todos los comentarios
dasswich
dasswich
6 years ago

Este tipo de entradas son geniales. Muchas gracias.

wenmusic
6 years ago

Pedazo de artículo, Carlos. Muy instructivo.

erretxea
erretxea
6 years ago

Es lo que me hacía falta para decidirme por seguir con HFS+. Gracias ?

sault
6 years ago

pa cuando salgo macos 14 a este ritmo ya tendré mas claro lo del AFPS.…ASPF… buenos , eso

thnx

fjofre
fjofre
6 years ago

Y que pasa si borro el archivo original?

6
0
Me encantaría saber tu opinión, por favor, deja un comentariox
()
x