Vimos o SO executando a otimização de cópia na gravação ao criar um processo. O motivo é que na maioria das vezes a bifurcação é realizada pelo exec, portanto, não queremos incorrer no custo das alocações de páginas e copiar os dados do espaço de endereço do chamador desnecessariamente.
O mesmo acontece com o CP no Linux com sistemas de arquivos ext4 ou xfs (journaling). Se isso não acontecer, por que não?
linux
filesystems
ext4
xfs
copy-on-write
Mridul Verma
fonte
fonte
Respostas:
A palavra-chave para pesquisar é
reflink
. Foi recentemente implementado no XFS.EDIT: a implementação do XFS foi inicialmente marcada como EXPERIMENTAL. Este aviso foi removido na versão 4.16 do kernel, vários meses depois que eu escrevi o acima :-).
fonte
Na
cp
página do manual :Isso funciona em sistemas de arquivos que suportam Copy-on-Write ( reflink ), principalmente BTRFS no momento. A implementação do reflink XFS está em desenvolvimento [1] [2] .
fonte
O Linux possui uma chamada de sistema que permite que os processos do espaço do usuário digam ao kernel para fazer cópias nas cópias de arquivos gravadas. FICLONERANGE e FICLONE usados como opções para ioctl permitem copiar cópias de arquivos e intervalos nos arquivos a serem feitos.
Isso é usado pelo cp --reflink para fazer as cópias nas quais o sistema de arquivos suporta isso.
fonte
A menos que você introduza um syscall para
cp
(ou pelo menos copie um bloco), o sistema operacional dificilmente descobrirá que os dados que ocp
programa irá gravar são os mesmos que foram lidos em outro bloco. Além disso, você teria uma sobrecarga adicional para gerenciar o cenário "vários arquivos compartilham os mesmos blocos". Arquivos grandes e similares que diferem apenas em alguns blocos ocorrem raramente. Portanto, no geral, é mais barato copiar esses blocos e adicionar essa sobrecarga administrativa a todos os arquivos.Agora, se você "copiar" arquivos (muitos deles) adicionando outro clone / instantâneo do sistema de arquivos no, digamos, BTRFS, a situação é diferente: Agora você "copiou" todos os arquivos no sistema de arquivos e quaisquer alterações em eles serão copiados na gravação. Isso existe, mas não no ext4.
"Journalling" é um conceito completamente independente disso, são as estruturas administrativas dos arquivos que contam.
fonte