Nous avons assisté à un système d'exploitation sur l'optimisation de l'écriture lors de la fourchette. La raison étant que la plupart des Times Fork sont poursuivies par EXEC, nous ne voulons donc pas entraîner le coût des allocations de page et la copie des données de l'espace d'adresses de l'appelant inutilement.
Cela se produit donc également lors de la CP sur une Linux avec des systèmes de fichiers EXT4 ou XFS (journalisation). Si cela ne se produit pas, alors pourquoi pas?
Le mot clé à rechercher est reflink
. Il a été récemment mis en œuvre dans XFS.
EDIT: L'implémentation XFS a été initialement marquée expérimentale. Cet avertissement a été supprimé dans la version du noyau 4.16, plusieurs mois après avoir écrit ce qui précède :-).
De cp
Homme :
Lorsque -treflink [= Toujours] est spécifié, effectuez une copie légère, où les blocs de données sont copiés uniquement lorsqu'ils sont modifiés. Si cela n'est pas possible, la copie échoue, ou si -reflink = auto est spécifiée, retombez à une copie standard.
Cela fonctionne sur les systèmes de fichiers prenant en charge Copie-on-écriture ( refléter ), principalement BTRFS pour le moment. XFS reflète la mise en œuvre est en développement [1][2].
Linux a un appel système qui permet aux processus des utilisateurs de dire au noyau de faire copie sur des copies d'écriture des fichiers. FICLONERANGER ET FICLONE Utilisé comme options d'IOCTL Autoriser la copie sur les copies d'écriture des fichiers et des plages dans les fichiers à effectuer.
Ceci est utilisé par CP -REFLINK pour effectuer les copies où le système de fichiers prend en charge cela.
Sauf si vous introduisez un syscall pour cp
(ou au moins de copier un bloc), le système d'exploitation a du mal à déterminer que les données Le programme cp
va écrire est la même que la celui qu'il vient de lire un autre bloc. En plus de cela, vous auriez des frais généraux supplémentaires pour gérer les "plusieurs fichiers partagent les mêmes blocs" Scénario. Les grands fichiers similaires qui ne diffèrent que dans quelques blocs se produisent rarement. Donc, il est moins cher dans le tout pour copier ces blocs, puis ajouter ce surcharge administratif à tous les fichiers .
Maintenant, si vous "copiez" les fichiers (beaucoup d'entre eux) en ajoutant un autre clone/instantané du système de fichiers, dites, BTRFS, la situation est différente: vous avez maintenant "copié" Les fichiers du système de fichiers et les modifications de ceux-ci seront copiants-écrits. Cela existe, mais pas dans EXT4.
"JOURNALLING" est un concept totalement indépendant de cela, ce sont les structures administratives des fichiers comptant.