Kami telah melihat OS melakukan optimasi Copy on Write ketika forking proses. Alasannya adalah bahwa sebagian besar waktu garpu diproses oleh exec, jadi kami tidak ingin mengeluarkan biaya alokasi halaman dan menyalin data dari ruang alamat pemanggil yang tidak perlu.
Begitu juga ini terjadi ketika melakukan CP pada linux dengan sistem file ext4 atau xfs (journaling). Jika tidak terjadi, mengapa tidak?
linux
filesystems
ext4
xfs
copy-on-write
Mridul Verma
sumber
sumber
Jawaban:
Kata kunci untuk pencarian adalah
reflink
. Baru-baru ini diimplementasikan dalam XFS.EDIT: implementasi XFS awalnya ditandai EXPERIMENTAL. Peringatan ini telah dihapus pada rilis kernel 4.16, beberapa bulan setelah saya menulis di atas :-).
sumber
Dari
cp
halaman manual :Ini berfungsi pada sistem file yang mendukung Copy-on-Write ( reflink ), terutama BTRFS saat ini. Implementasi reflink XFS sedang dalam pengembangan [1] [2] .
sumber
Linux memiliki system call yang memungkinkan proses userspace memberitahu kernel untuk membuat salinan pada salinan file yang ditulis. FICLONERANGE dan FICLONE digunakan sebagai opsi untuk ioctl memungkinkan penyalinan pada salinan file yang ditulis dan rentang dalam file yang akan dibuat.
Ini digunakan oleh cp --reflink untuk membuat salinan yang mendukung sistem file ini.
sumber
Kecuali Anda memperkenalkan syscall untuk
cp
(atau setidaknya menyalin blok), OS mengalami kesulitan untuk mengetahui bahwa data yangcp
akan ditulis oleh program sama dengan yang baru saja dibaca dari blok lain. Selain itu, Anda akan memiliki overhead tambahan untuk mengelola skenario "beberapa file berbagi blok yang sama". File besar serupa yang hanya berbeda dalam beberapa blok jarang terjadi. Jadi secara keseluruhan lebih murah hanya menyalin blok-blok itu, lalu menambahkan overhead administratif ini ke semua file.Sekarang jika Anda "menyalin" file (banyak dari mereka) dengan menambahkan klon / snapshot lain dari sistem file di, katakanlah, BTRFS, situasinya berbeda: Sekarang Anda telah "menyalin" semua file di sistem file, dan setiap perubahan ke mereka akan menjadi copy-on-write. Ini ada, tetapi tidak di ext4.
"Journalling" adalah konsep yang sepenuhnya independen dari itu, itu adalah struktur administrasi untuk file yang diperhitungkan.
sumber