Bosh sahifa Wiki Copy-on-write

Copy-on-write

Copy-on-write (COW) — bir nechta obyekt bir xil ma’lumot blokidan faqat o‘zgartirish paytigacha birgalikda foydalanadigan resurs boshqaruv usulidir. O‘qishlar umumiy nusxadan bajariladi; writer blokni o‘zgartirmoqchi bo‘lsa unga alohida copy yaratiladi. Bu keraksiz oldindan nusxalashni kamaytiradi.

Xotiradagi COW

Operatsion tizim fork paytida parent process sahifalarini child uchun darhol to‘liq ko‘chirmasligi mumkin. Page table ikkala processni bir xil physical page’ga read-only yo‘naltiradi. Ulardan biri yozsa page fault yuz beradi, kernel yangi page ajratib mazmunni ko‘chiradi va writer mappingini yangilaydi.

Faqat yozilgan sahifalar nusxalanadi. Child darhol boshqa programni exec qilsa katta address space’ni ko‘chirishga hojat qolmaydi. Biroq forkdan keyin parent yoki child ko‘p page’ni o‘zgartirsa COW fault va memory overhead ortadi.

Storage snapshot

Snapshot yaratilganda live volume va snapshot eski bloklarni ulashadi. Live blok birinchi marta o‘zgartirilishidan oldin eski mazmun snapshot uchun boshqa joyga ko‘chiriladi, so‘ng original joyga yangi data yoziladi. Snapshot o‘z vaqt nuqtasidagi qiymatni saqlaydi.

Redirect-on-write modelida yangi data yangi blokka yozilib, live metadata yangi manzilga o‘tadi; eski blok snapshotda qoladi. Ikkala usul maqsad jihatidan yaqin, ammo write path va fragmentation xususiyati farq qiladi.

COW filesystem file clone yoki reflink orqali ikki faylni bir xil extentlarga bog‘laydi. Clone tez va avval deyarli qo‘shimcha joy talab qilmaydi. Bir fayl o‘zgarganda tegishli extent ajratiladi.

Metadata reference count yoki extent tree orqali blok kimga tegishli ekanini kuzatadi. Crash paytida metadata yangilanishi transactional bo‘lishi kerak; aks holda blok erta bo‘shatilishi yoki leak bo‘lishi mumkin. Checksum data corruptionni aniqlashga yordam beradi.

Persistent data structure

Functional programmingda immutable tree update butun tree’ni emas, rootdan o‘zgargan nodegacha bo‘lgan yo‘lni nusxalaydi. O‘zgarmagan subtreelar eski va yangi versiyada ulashiladi. Bu version history va thread-safe readni yengillashtiradi.

Har update yangi root qaytaradi. Eski rootga reference qolmasa garbage collector ulashilmaydigan node’larni tozalaydi. Juda ko‘p mayda update allocation va pointer traversal xarajatini oshirishi mumkin.

Performance

COW tez clone va snapshot beradi, ammo xarajatni birinchi yozuv vaqtiga ko‘chiradi. Write amplification eski blokni copy qilish, yangisini yozish va metadata update’dan keladi. Random write snapshot mavjud paytda latency spike yaratishi mumkin.

Uzoq snapshot chain fragmentationni oshiradi. Sequential file fizik jihatdan tarqoq extentlarga aylanib, read throughput pasayadi. Defragmentation COW sharingni buzib, vaqtincha qo‘shimcha joy talab qilishi mumkin.

Joy tugashi va monitoring

Snapshot logical volume hajmini ko‘rsatadi, fizik qo‘shimcha joy esa o‘zgarish tezligiga bog‘liq. COW pool to‘lsa live write yoki snapshot xato berishi mumkin. Free space, changed block rate va snapshot yoshi kuzatiladi.

Snapshotni o‘chirish blok reference’larini qayta hisoblash va metadata merge ishini boshlaydi. Bu operatsiya darhol joy bo‘shatmasligi mumkin. Peak workload vaqtida delete performancega ta’sir qilishi ehtimoli bor.

Xavfsizlik chegarasi

COW clone data isolationni avtomatik bermaydi. Shared physical block encryption key va access modeliga mos bo‘lishi kerak. Secure delete bitta logical file reference’ini olib tashlasa, blok boshqa snapshotda qolishi mumkin. Retention va data erasure barcha reference graphni hisobga oladi.

Bog‘liq tushunchalar

Snapshot, Virtual memory, Fork, Reflink, Immutable data, Write amplification, Redirect-on-write