Hemos visto que el sistema operativo realiza la optimización de Copia en escritura al bifurcar un proceso. La razón es que la mayoría de las veces la bifurcación es ejecutada por un ejecutivo, por lo que no queremos incurrir en el costo de las asignaciones de páginas y la copia innecesaria de los datos del espacio de direcciones de la persona que llama.
Esto también sucede cuando se hace CP en un linux con sistemas de archivos ext4 o xfs (journaling). Si no sucede, entonces ¿por qué no?
linux
filesystems
ext4
xfs
copy-on-write
Mridul Verma
fuente
fuente
Respuestas:
La palabra clave para buscar es
reflink
. Recientemente se implementó en XFS.EDITAR: la implementación de XFS se marcó inicialmente como EXPERIMENTAL. Esta advertencia se eliminó en la versión 4.16 del kernel, varios meses después de que escribí lo anterior :-).
fuente
Desde la
cp
página del manual :Esto funciona en sistemas de archivos que admiten Copia en escritura ( reflink ), principalmente BTRFS en este momento. La implementación de XFS reflink está en desarrollo [1] [2] .
fuente
Linux tiene una llamada al sistema que permite que los procesos del espacio de usuario le digan al núcleo que haga copias de copias de escritura de archivos. FICLONERANGE y FICLONE utilizados como opciones para ioctl permiten realizar copias de escritura y escritura de archivos y rangos dentro de los archivos.
Esto lo utiliza cp --reflink para hacer las copias donde el sistema de archivos lo admite.
fuente
A menos que introduzca una llamada al sistema
cp
(o al menos para copiar un bloque), el sistema operativo tiene dificultades para darse cuenta de que los datos que elcp
programa va a escribir son los mismos que acaba de leer de otro bloque. Además de eso, tendría una sobrecarga adicional para administrar el escenario "varios archivos comparten los mismos bloques". Los archivos similares grandes que solo difieren en pocos bloques ocurren raramente. Por lo tanto, en general es más barato copiar esos bloques y luego agregar esta sobrecarga administrativa a todos los archivos.Ahora, si "copia" archivos (muchos de ellos) agregando otro clon / instantánea del sistema de archivos en, por ejemplo, BTRFS, la situación es diferente: ahora ha "copiado" todos los archivos en el sistema de archivos y cualquier cambio en ellos serán copia en escritura. Esto existe, pero no en ext4.
"Journalling" es un concepto completamente independiente de eso, son las estructuras administrativas para los archivos que cuentan.
fuente