Dasar ZFS: Panyimpenan lan Kinerja

Dasar ZFS: Panyimpenan lan Kinerja

Spring iki kita wis rembugan sawetara topik pambuko, f.eks. carane mriksa kacepetan drive и apa RAID. Ing kaloro kasebut, kita malah janji bakal terus sinau kinerja macem-macem topologi multi-disk ing ZFS. Iki minangka sistem file generasi sabanjure sing saiki disebarake ing endi wae Apple kanggo ubuntu.

Nah, dina iki minangka dina sing paling apik kanggo kenalan karo ZFS, para pembaca sing penasaran. Cukup ngerti sing ing pangembang OpenZFS Matt Ahrens taksiran andhap asor, "pancen hard."

Nanging sadurunge kita tekan nomer-lan bakal ana, aku janji-kanggo kabeh opsi konfigurasi ZFS wolung disk, kita kudu ngomong babagan carane Umumé, ZFS nyimpen data ing disk.

Zpool, vdev lan piranti

Dasar ZFS: Panyimpenan lan Kinerja
Diagram blumbang lengkap iki kalebu telung vdev tambahan, siji saka saben kelas, lan papat kanggo RAIDz2

Dasar ZFS: Panyimpenan lan Kinerja
Biasane ora ana alesan kanggo nggawe kumpulan jinis lan ukuran vdev sing ora cocog - nanging yen sampeyan pengin, ora ana sing ngalangi sampeyan nindakake.

Kanggo ngerti tenan sistem file ZFS, sampeyan kudu nliti struktur nyata. Kaping pisanan, ZFS nggabungake volume tradisional lan lapisan manajemen sistem file. Kapindho, nggunakake mekanisme copy-on-write transaksional. Fitur kasebut tegese sistem kasebut sacara struktural beda banget karo sistem file konvensional lan array RAID. Setel blok bangunan dhasar sing kudu dingerteni yaiku kolam panyimpenan (zpool), piranti virtual (vdev) lan piranti nyata (piranti).

zpool

Kolam panyimpenan zpool minangka struktur ZFS paling dhuwur. Saben blumbang ngemot siji utawa luwih piranti virtual. Sabanjure, saben-saben ngemot siji utawa luwih piranti nyata (piranti). Kolam virtual minangka unit mandiri. Siji komputer fisik bisa ngemot loro utawa luwih blumbang kapisah, nanging saben rampung independen saka liyane. Pools ora bisa nuduhake piranti virtual.

ZFS redundansi ing tingkat piranti virtual, ora ing tingkat blumbang. Pancen ora ana redundansi ing tingkat blumbang-yen vdev utawa vdev darmabakti ilang, kabeh blumbang ilang bebarengan karo.

Kolam panyimpenan modern bisa urip ing mundhut saka cache utawa log piranti virtual - sanajan padha bisa kelangan jumlah cilik saka data reged yen ilang log vdev sak outage daya utawa sistem kacilakan.

Ana misconception umum yen ZFS "garis data" ditulis ing kabeh blumbang. Iki ora bener. Zpool ora RAID0 lucu, iku luwih lucu JBOD kanthi mekanisme distribusi variabel kompleks.

Umume, cathetan disebarake ing antarane piranti virtual sing kasedhiya miturut ruang bebas sing kasedhiya, saengga ing teori kabeh bakal diisi bebarengan. Versi luwih anyar saka ZFS njupuk vdev saiki (panggunaan) menyang akun - yen siji piranti virtual Ngartekno sibuk saka liyane (contone, amarga maca mbukak), iku bakal sementara Mlayu kanggo nulis, senadyan gadhah rasio papan free paling dhuwur.

Mekanisme deteksi daur ulang sing dibangun ing metode alokasi nulis ZFS modern bisa nyuda latensi lan nambah throughput sajrone beban sing ora biasa, nanging ora. carte blanche kanggo involuntary nyawiji saka HDDs alon lan SSDs cepet ing siji blumbang. Kolam renang sing ora padha bakal isih bisa digunakake kanthi kacepetan piranti sing paling alon, yaiku, kaya-kaya kabeh kalebu piranti kasebut.

vdev

Saben blumbang panyimpenan kasusun saka siji utawa luwih piranti virtual (vdev). Sabanjure, saben vdev kalebu siji utawa luwih piranti nyata. Umume piranti virtual digunakake kanggo panyimpenan data sing prasaja, nanging ana sawetara kelas helper vdev, kalebu CACHE, LOG, lan KHUSUS. Saben jinis vdev iki bisa duwe salah siji saka limang topologies: siji-piranti, RAIDz1, RAIDz2, RAIDz3 utawa pangilon.

RAIDz1, RAIDz2 lan RAIDz3 minangka varietas khusus sing diarani RAID paritas kaping pindho (diagonal). 1, 2 lan 3 nuduhake pirang-pirang blok paritas sing dialokasikan kanggo saben jalur data. Tinimbang duwe disk sing kapisah kanggo nyedhiyakake paritas, piranti RAIDz virtual nyebarake paritas semi-rata ing disk. A array RAIDz bisa ilang minangka akeh disk minangka pamblokiran paritas; yen ilang liyane, bakal gagal lan njupuk blumbang panyimpenan karo.

Ing pangilon piranti virtual (pangilon vdev), saben blok disimpen ing saben piranti ing vdev. Senajan pangilon loro-sudhut sing paling umum, pangilon bisa duwe nomer sembarang piranti-ing panginstalan luwih gedhe, triple asring digunakake kanggo nambah kinerja maca lan toleransi fault. Pangilon vdev bisa slamet saka kegagalan anggere paling ora siji piranti ing vdev tetep operasional.

Single vdevs iku sipate mbebayani. Piranti virtual kasebut ora bakal urip kanthi gagal - lan yen digunakake minangka panyimpenan utawa vdev khusus, kegagalan kasebut bakal nyebabake karusakan kabeh blumbang. Ati-ati banget ing kene.

Piranti virtual CACHE, LOG, lan KHUSUS bisa digawe ing topologi ing ndhuwur - nanging elinga yen kelangan piranti virtual KHUSUS tegese kelangan blumbang, mula topologi sing berlebihan dianjurake banget.

piranti

Iki mbokmenawa istilah sing paling gampang dimangerteni ing ZFS - secara harfiah minangka piranti akses acak blok. Elinga yen piranti virtual digawe saka piranti individu, lan blumbang digawe saka piranti virtual.

Disk, status magnetik utawa solid, minangka piranti pamblokiran sing paling umum digunakake minangka blok bangunan vdev. Nanging, piranti apa wae sing duwe deskriptor ing / dev bakal ditindakake - supaya kabeh array RAID hardware bisa digunakake minangka piranti individu.

File mentah sing prasaja minangka salah sawijining piranti pamblokiran alternatif sing paling penting sing bisa dibangun vdev. Test pools saka file langka - cara trep banget kanggo mriksa printah blumbang lan ndeleng carane akeh papan kasedhiya ing blumbang utawa piranti virtual saka topologi diwenehi.

Dasar ZFS: Panyimpenan lan Kinerja
Sampeyan bisa nggawe blumbang test saka file jarang mung sawetara detik - nanging aja lali mbusak kabeh blumbang lan komponen sakwise

Contone, sampeyan pengin server wolung disk lan rencana nggunakake disk 10TB (~ 9300 GiB), nanging sampeyan ora yakin topologi endi sing cocog karo kabutuhan sampeyan. Ing conto ing ndhuwur, kita mbangun blumbang test file jarang ing sawetara detik-lan saiki ngerti yen RAIDz2 vdev wolung 10TB drive menehi 50TiB kapasitas iso digunakke.

Piranti kelas khusus liyane yaiku SPARE. Piranti hot-swap, ora kaya piranti biasa, kalebu kabeh blumbang tinimbang piranti virtual siji. Yen sembarang vdev ing blumbang gagal lan piranti nyisakke disambungake menyang blumbang lan kasedhiya, banjur bakal kanthi otomatis nggabungake vdev kena pengaruh.

Sawise disambungake menyang vdev kena pengaruh, piranti panggantos wiwit nampa salinan utawa reconstructions saka data sing kudu ing piranti ilang. Ing RAID tradisional iki disebut "rebuilding", lan ing ZFS iku "resolvering".

Wigati dimangerteni manawa piranti panggantos ora ngganti piranti sing gagal kanthi permanen. Iki mung panggantos sauntara kanggo nyuda wektu iku njupuk vdev kanggo degrade. Sawise administrator ngganti piranti vdev gagal, redundansi dibalèkaké menyang piranti permanen, lan SPARE wis pedhot saka vdev lan bali menyang cadangan kanggo kabeh blumbang.

Set data, blok lan sektor

Setel blok bangunan sabanjure sing kudu dingerteni ing perjalanan ZFS kita ora ana gandhengane karo hardware lan luwih akeh babagan cara data kasebut diatur lan disimpen. Kita ngliwati sawetara lapisan ing kene - kayata metaslab - supaya ora ngganggu rincian nalika njaga pangerten babagan struktur sakabèhé.

kumpulan data

Dasar ZFS: Panyimpenan lan Kinerja
Nalika kita pisanan nggawe dataset, nuduhake kabeh papan blumbang sing kasedhiya. Banjur kita nyetel kuota - lan ngganti titik gunung. Sihir!

Dasar ZFS: Panyimpenan lan Kinerja
Zvol biasane mung kumpulan data sing dicopot saka lapisan sistem file, sing diganti karo sistem file ext4 sing normal.

Set data ZFS kira-kira padha karo sistem file sing dipasang standar. Kaya sistem file biasa, sepisanan katon "mung folder liyane." Nanging kaya sistem file sing dipasang biasa, saben set data ZFS duwe sifat dhasar dhewe.

Kaping pisanan, dataset bisa uga duwe kuota sing ditemtokake. Yen sampeyan nginstal zfs set quota=100G poolname/datasetname, sampeyan ora bakal bisa nulis menyang folder sing dipasang /poolname/datasetname luwih saka 100 GiB.

Elinga yen ana-lan ora ana-slash ing awal saben baris? Saben set data nduweni panggonan dhewe ing hirarki ZFS lan hirarki pemasangan sistem. Ora ana garis miring utama ing hirarki ZFS-sampeyan miwiti nganggo jeneng blumbang banjur path saka siji set data menyang sabanjure. Tuladhane, pool/parent/child kanggo kumpulan data jenenge child miturut dataset induk parent ing blumbang kanthi jeneng kreatif pool.

Kanthi gawan, titik gunung saka set data bakal padha karo jenenge ing hierarki ZFS, kanthi garis miring utama - pool jenenge pool dipasang minangka /pool, kumpulan data parent dipasang ing /pool/parent, lan set data anak child dipasang ing /pool/parent/child. Nanging, titik mount sistem set data bisa diganti.

Yen kita nunjukake zfs set mountpoint=/lol pool/parent/child, banjur kumpulan data pool/parent/child dipasang ing sistem minangka /lol.

Saliyane dataset, kita kudu nyebutake volume (zvols). Volume kira-kira padha karo set data, kajaba sing bener ora duwe sistem file-iku mung piranti pamblokiran. Sampeyan bisa contone nggawe zvol Kanthi jeneng mypool/myzvol, banjur format nganggo sistem file ext4, banjur pasang sistem file kasebut - saiki sampeyan duwe sistem file ext4, nanging kanthi kabeh fitur keamanan ZFS! Iki bisa uga koyone konyol ing siji komputer, nanging luwih raos minangka backend nalika ngekspor piranti iSCSI.

Blokir

Dasar ZFS: Panyimpenan lan Kinerja
Berkas diwakili dening siji utawa luwih blok. Saben blok disimpen ing siji piranti virtual. Ukuran blok biasane padha karo parameter ukuran rekaman, nanging bisa suda kanggo 2^ ngalih, yen ngemot metadata utawa file cilik.

Dasar ZFS: Panyimpenan lan Kinerja
We tenan tenan Kita ora guyon babagan paukuman kinerja sing gedhe yen sampeyan nyetel ashift banget

Ing blumbang ZFS, kabeh data, kalebu metadata, disimpen ing blok. Ukuran blok maksimum kanggo saben set data ditetepake ing properti recordsize (ukuran rekaman). Ukuran rekaman bisa diganti, nanging iki ora bakal ngganti ukuran utawa lokasi blok sing wis ditulis ing set data - mung mengaruhi blok anyar nalika ditulis.

Yen ora ditemtokake, ukuran entri standar saiki yaiku 128 KiB. Iku jenis trade-off angel ngendi kinerja ora sampurna, nanging ora bakal elek ing paling kasus. Recordsize bisa disetel menyang nilai apa wae saka 4K nganti 1M (kanthi setelan tambahan recordsize sampeyan bisa nginstal malah luwih, nanging iki arang apike).

Sembarang blok nuduhake data mung siji file-sampeyan ora bisa ngempit rong file sing beda dadi siji blok. Saben file kasusun saka siji utawa luwih blok, gumantung saka ukurane. Yen ukuran file luwih cilik tinimbang ukuran rekaman, bakal disimpen ing blok sing luwih cilik-contone, blok sing ngemot file 2KiB mung bakal ngenggoni siji sektor 4KiB ing disk.

Yen file cukup gedhe kanggo mbutuhake sawetara blok, kabeh entri menyang file kasebut bakal ukurane recordsize - kalebu entri pungkasan, bagean utama sing bisa uga papan sing ora dienggo.

volume zvol ora duwe properti recordsize - tinimbang padha duwe properti padha volblocksize.

Sektor

Sing terakhir, blok bangunan paling dhasar yaiku sektor. Iku unit fisik paling cilik sing bisa ditulis utawa diwaca saka piranti inang. Kanggo sawetara dekade, akeh disk nggunakake sektor 512-byte. Dina iki, umume drive dikonfigurasi kanggo sektor 4KiB, lan sawetara - utamane SSD - dikonfigurasi kanggo sektor 8KiB utawa luwih gedhe.

ZFS nduweni fitur sing ngidini sampeyan nyetel ukuran sektor kanthi manual. Properti iki ashift. Luwih mbingungake, ashift minangka kekuwatan loro. Tuladhane, ashift=9 tegese ukuran sektor 2^9, utawa 512 bita.

ZFS takon sistem operasi kanggo informasi rinci babagan saben piranti pamblokiran nalika ditambahake menyang vdev anyar, lan miturut teori otomatis nyetel ashift jumbuh adhedhasar informasi kasebut. Sayange, akeh drive ngapusi babagan ukuran sektor kanggo njaga kompatibilitas karo Windows XP (sing ora bisa ngerti drive karo ukuran sektor liyane).

Iki tegese banget dianjurake kanggo administrator ZFS ngerti ukuran sektor nyata saka piranti lan nyetel kanthi manual ashift. Yen ashift disetel cilik banget, jumlah operasi maca / nulis mundhak astronomi. Dadi, nulis "sektor" 512-byte menyang sektor 4KiB nyata tegese kudu nulis "sektor" pisanan, banjur maca sektor 4KiB, ngowahi kanthi "sektor" 512-byte kapindho, tulis maneh menyang sektor 4KiB anyar , lan liya-liyane kanggo saben entri.

Ing jagad nyata, paukuman kasebut mengaruhi Samsung EVO SSD, sing kudu ditrapake ashift=13, nanging SSDs iki ngapusi babagan ukuran sektor, lan mulane standar disetel kanggo ashift=9. Kajaba administrator sistem sing berpengalaman ngganti setelan iki, SSD iki bisa digunakake luwih alon HDD magnetik biasa.

Kanggo mbandhingake, amarga gedhe banget ashift meh ora ana paukuman. Ora ana hit kinerja nyata, lan Tambah ing papan sing ora digunakake iku infinitesimal (utawa nul yen komprèsi diaktifake). Mulane, kita banget nyaranake malah drive sing nggunakake sektor 512-bait nginstal ashift=12 utawa malah ashift=13kanggo ndeleng kanthi yakin ing masa depan.

Properti ashift diinstal kanggo saben vdev piranti virtual, lan ora kanggo blumbang, minangka akeh wong salah mikir, lan ora ngganti sawise instalasi. Yen ora sengaja kenek ashift Nalika sampeyan nambah vdev anyar kanggo blumbang, sampeyan wis irrevocably rereged sing blumbang karo piranti-kinerja kurang lan, minangka aturan, ora ana pilihan liyane saka numpes blumbang lan miwiti maneh. Malah mbusak vdev ora bakal nylametake sampeyan saka setelan sing rusak ashift!

Mekanisme copy-on-write

Dasar ZFS: Panyimpenan lan Kinerja
Yen sistem file reguler kudu nulis ulang data, iku ngowahi saben blok ing ngendi iku dumunung

Dasar ZFS: Panyimpenan lan Kinerja
Sistem file copy-on-write nulis versi anyar saka blok lan banjur mbukak kunci versi lawas

Dasar ZFS: Panyimpenan lan Kinerja
Ing abstrak, yen kita nglirwakake susunan fisik nyata saka pamblokiran, "data komet" kita nyederhanakake menyang "cacing data" sing obah saka kiwa menyang tengen tengen peta papan sing kasedhiya.

Dasar ZFS: Panyimpenan lan Kinerja
Saiki kita bisa entuk ide sing apik babagan cara kerja snapshot copy-on-write - saben blok bisa dadi pirang-pirang jepretan, lan bakal tetep nganti kabeh gambar sing gegandhengan dirusak.

Mekanisme Copy on Write (CoW) minangka dhasar dhasar sing ndadekake ZFS dadi sistem sing apik tenan. Konsep dhasar iku prasaja - yen sampeyan njaluk sistem file tradisional kanggo ngganti file, iku bakal nindakake persis apa sing takon. Yen sampeyan takon sistem file copy-on-write kanggo nindakake perkara sing padha, bakal ujar "oke" - nanging bakal ngapusi sampeyan.

Nanging, sistem file copy-on-write nulis versi anyar saka blok sing wis diowahi, banjur nganyari metadata file kasebut kanggo ngilangi blokir lawas lan digandhengake karo blok anyar sing sampeyan tulis.

Mbusak pamblokiran lawas lan ngubungake sing anyar rampung ing siji operasi, supaya ora bisa diganggu - yen sampeyan ngreset daya sawise kedadeyan kasebut, sampeyan duwe versi file anyar, lan yen sampeyan ngreset daya sadurunge, sampeyan kudu versi lawas. Ing kasus apa wae, ora bakal ana konflik ing sistem file.

Copy-on-write ing ZFS ora mung ana ing tingkat sistem file, nanging uga ing tingkat manajemen disk. Iki tegese ZFS ora rentan kanggo spasi putih ing rekaman (bolongan ing RAID) - kedadean nalika Strip wis mung sebagian wis direkam sadurunge sistem tabrakan, karo karusakan ing Uploaded sawise urip maneh. Kene belang ditulis atom, vdev tansah urutan, lan Bob iku pamanmu..

ZIL: log maksud ZFS

Dasar ZFS: Panyimpenan lan Kinerja
ZFS nangani tulisan sinkron kanthi cara khusus - nyimpen sementara nanging langsung ing ZIL sadurunge nulis kanthi permanen bebarengan karo tulisan sing ora sinkron.

Dasar ZFS: Panyimpenan lan Kinerja
Biasane, data sing ditulis menyang ZIL ora bakal diwaca maneh. Nanging iki bisa ditindakake sawise gagal sistem

Dasar ZFS: Panyimpenan lan Kinerja
A SLOG, utawa piranti LOG sekunder, mung minangka vdev khusus - lan luwih cepet banget - ing ngendi ZIL bisa disimpen kanthi kapisah saka panyimpenan utama.

Dasar ZFS: Panyimpenan lan Kinerja
Sawise kacilakan, kabeh data reged ing ZIL dimainake maneh - ing kasus iki, ZIL ana ing SLOG, mula ing kana dimainake maneh

Ana rong kategori utama nulis - sinkron (sinkronisasi) lan asinkron (async). Kanggo umume beban kerja, mayoritas tulisan ora sinkron-sistem file ngidini supaya bisa dikumpulake lan ditanggepi ing batch, nyuda fragmentasi lan nambah throughput kanthi signifikan.

Rekaman sinkron minangka prakara sing beda. Nalika aplikasi njaluk nulis sinkron, iki ngandhani sistem file: "Sampeyan kudu nindakake iki menyang memori sing ora molah malih. saiki, lan nganti saiki ora ana sing bisa daktindakake maneh.” Mula, panulisan sinkron kudu langsung ditindakake menyang disk-lan yen nambah fragmentasi utawa nyuda throughput, mula uga.

ZFS nangani tulisan sinkron kanthi cara sing beda tinimbang sistem file biasa-tinimbang langsung disiram menyang panyimpenan biasa, ZFS nindakake menyang area panyimpenan khusus sing disebut ZFS Intent Log, utawa ZIL. Trik kasebut yaiku cathetan kasebut uga tetep ing memori, dikumpulake bebarengan karo panjalukan nulis bedo normal, kanggo mengko bakal flushed menyang panyimpenan minangka TXGs rampung normal (Grup Transaksi).

Sajrone operasi normal, ZIL ditulis lan ora diwaca maneh. Nalika, sawise sawetara wektu, cathetan saka ZIL setya kanggo panyimpenan utama ing TXGs biasa saka RAM, padha suwek saka ZIL. Mung wektu sing diwaca saka ZIL yaiku nalika ngimpor blumbang.

Yen kacilakan ZFS ana - sistem operasi kacilakan utawa listrik mati - nalika ana data ing ZIL, data kasebut bakal diwaca nalika ngimpor blumbang sabanjure (contone, nalika sistem kacilakan diwiwiti maneh). Apa wae sing ana ing ZIL bakal diwaca, diklompokake dadi TXG, setya menyang toko utama, lan banjur dicopot saka ZIL sajrone proses ngimpor.

Salah sawijining kelas helper vdev diarani LOG utawa SLOG, piranti LOG sekunder. Wis siji waé - kanggo nyedhiyani blumbang karo kapisah lan luwih akeh luwih cepet, banget nulis-tahan piranti vdev kanggo nyimpen ZIL, tinimbang nyimpen ZIL ing panyimpenan vdev utama. ZIL dhewe tumindak padha preduli saka lokasi panyimpenan, nanging yen vdev karo LOG nduweni kinerja nulis dhuwur banget, banjur sinkron nyerat bakal luwih cepet.

Nambahake vdev karo LOG menyang blumbang ora bisa ora bisa nambah kinerja nulis bedo - malah yen sampeyan meksa kabeh nulis kanggo ZIL karo zfs set sync=always, padha isih bakal disambung menyang panyimpenan utama ing TXG ing cara sing padha lan ing jangkah padha tanpa log. Peningkatan kinerja langsung mung yaiku latensi nulis sinkron (amarga kecepatan log sing luwih dhuwur nggawe operasi luwih cepet sync).

Nanging, ing lingkungan sing wis mbutuhake akeh nulis sinkron, vdev LOG bisa kanthi ora langsung nyepetake asynchronous nulis lan uncached maca. Offloading ZIL cathetan menyang vdev LOG kapisah tegese kurang pratelan kanggo IOPS ing panyimpenan utami, kang mbenakake kinerja kabeh maca lan nulis kanggo sawetara ombone.

Snapshots

Mekanisme copy-on-write uga minangka dhasar sing dibutuhake kanggo jepretan atom ZFS lan replikasi asinkron tambahan. Sistem file aktif duwe wit pointer sing menehi tandha kabeh entri nganggo data saiki-nalika sampeyan njupuk gambar, sampeyan mung nggawe salinan wit penunjuk kasebut.

Nalika rekaman ditimpa ing sistem file aktif, ZFS pisanan nulis versi anyar saka pemblokiran menyang papan sing ora digunakake. Banjur detaches versi lawas saka pamblokiran saka sistem file saiki. Nanging yen sawetara gambar asli referensi pemblokiran lawas, iku isih tetep ora diganti. Blok lawas ora bakal dibalekake minangka ruang kosong nganti kabeh gambar sing nuduhake blok kasebut dirusak!

replikasi

Dasar ZFS: Panyimpenan lan Kinerja
Perpustakaan Steam ing taun 2015 yaiku 158 GiB lan kalebu 126 file. Iki cukup cedhak karo kahanan optimal kanggo rsync - replikasi ZFS liwat jaringan "mung" 927% luwih cepet.

Dasar ZFS: Panyimpenan lan Kinerja
Ing jaringan sing padha, niru file gambar mesin virtual 40GB Windows 7 minangka crita sing beda. Replikasi ZFS 289 kaping luwih cepet tinimbang rsync-utawa "mung" 161 kaping luwih cepet yen sampeyan cukup pinter nelpon rsync karo --inplace switch.

Dasar ZFS: Panyimpenan lan Kinerja
Nalika ukuran gambar VM, rsync ngetokake skala. Ukuran 1,9 TiB ora gedhe banget kanggo gambar VM modern - nanging cukup gedhe yen replikasi ZFS 1148 kaping luwih cepet tinimbang rsync, sanajan karo rsync --inplace argument

Sawise sampeyan ngerti cara kerja snapshot, bakal gampang ngerteni inti saka replikasi. Wiwit snapshot mung minangka wit rekaman, mula yen kita nindakake zfs send gambar asli seko, banjur kita ngirim wit iki lan kabeh cathetan sing digandhengake karo. Nalika kita ngliwati iki zfs send в zfs receive ing obyek target, iku nulis loro isi nyata saka pemblokiran lan wit penunjuk referensi pamblokiran kanggo pesawat data target.

Perkara dadi luwih menarik ing kaloro zfs send. Saiki kita duwe rong sistem, saben ngemot poolname/datasetname@1, lan sampeyan njupuk snapshot anyar poolname/datasetname@2. Mulane, ing blumbang sumber sampeyan duwe datasetname@1 и datasetname@2, lan ing blumbang target mung ana snapshot pisanan datasetname@1.

Amarga ing antarane sumber lan target kita duwe snapshot umum datasetname@1, awake dewe iso nglakoni iki tambahan zfs send ing ndhuwur iku. Nalika kita marang sistem zfs send -i poolname/datasetname@1 poolname/datasetname@2, iku mbandhingaké loro wit penunjuk. Sembarang pitunjuk sing ana mung ing @2, jelas ngrujuk menyang blok anyar - mula kita butuh konten blok kasebut.

Ing sistem remot, proses tambahan send mung minangka prasaja. Pisanan kita nulis kabeh entri anyar sing kalebu ing stream send, banjur tambahake penunjuk menyang blok kasebut. Voila, kita duwe @2 ing sistem anyar!

Replikasi inkremental asinkron ZFS minangka perbaikan gedhe tinimbang metode berbasis non-snapshot sadurunge kayata rsync. Ing kasus kasebut, mung data sing diganti sing ditransfer - nanging rsync kudu luwih dhisik maca saka disk kabeh data ing loro-lorone kanggo mriksa jumlah lan mbandhingaké. Ing kontras, replikasi ZFS ora maca apa-apa liyane saka pointer wit-lan sembarang pamblokiran sing ora dituduhake ing gambar sakabèhé.

Dibangun ing komprèsi

Mekanisme copy-on-write uga nyederhanakake sistem kompresi sing dibangun. Ing sistem file tradisional, kompresi ana masalah - versi lawas lan versi anyar saka data sing diganti manggon ing papan sing padha.

Yen sampeyan nganggep potongan data ing tengah file sing diwiwiti minangka megabyte nol saka 0x00000000 lan liya-liyane, gampang banget kanggo ngompres menyang sektor siji ing disk. Nanging apa sing kedadeyan yen kita ngganti megabyte nol iki kanthi megabyte data sing ora bisa dikompres, kayata JPEG utawa gangguan pseudo-acak? Semalat, megabyte data kasebut ora mbutuhake siji, nanging 256 sektor 4KiB, lan mung siji sektor sing dilindhungi ing papan disk kasebut.

ZFS ora duwe masalah iki amarga nulis sing diowahi tansah ditulis ing papan sing ora digunakake - blok asli mung njupuk siji sektor 4 KiB, nanging nulis anyar bakal njupuk 256, nanging ora dadi masalah - potongan sing bubar diowahi saka " tengah" berkas bakal wis ditulis kanggo papan sing ora digunakake preduli saka apa ukuran wis diganti utawa ora, supaya iki kahanan rampung normal kanggo ZFS.

Kompresi sing dibangun ing ZFS dipateni kanthi gawan, lan sistem kasebut nawakake algoritma pluggable-saiki kalebu LZ4, gzip (1-9), LZJB, lan ZLE.

  • LZ4 minangka algoritma streaming sing nawakake keuntungan komprèsi lan dekompresi lan kinerja sing cepet banget kanggo umume kasus panggunaan-sanajan ing CPU sing cukup alon.
  • GZIP minangka algoritma kinurmatan sing kabeh pangguna Unix ngerti lan tresna. Bisa dileksanakake kanthi tingkat kompresi 1-9, kanthi nambah rasio kompresi lan panggunaan CPU nalika sampeyan nyedhaki level 9. Algoritma kasebut cocog kanggo kabeh kasus panggunaan teks (utawa liyane sing bisa dikompres banget), nanging asring nyebabake masalah CPU, digunakake. kanthi ati-ati, utamane ing tingkat sing luwih dhuwur.
  • LZJB - algoritma asli ing ZFS. Iku lungse lan kudu ora digunakake maneh, LZ4 unggul ing kabeh cara.
  • ZLE - Encoding tingkat nol, Encoding Tingkat Nol. Iku ora ndemek data normal ing kabeh, nanging compresses urutan gedhe saka nul. Migunani kanggo set data sing ora bisa dikompres kanthi lengkap (kayata JPEG, MP4 utawa format liyane sing wis dikompres) amarga ora nggatekake data sing ora bisa dikompres nanging ngompres ruang sing ora digunakake ing rekaman sing diasilake.

Disaranake kompresi LZ4 kanggo meh kabeh kasus panggunaan; paukuman kinerja nalika dealing with data incompressible cilik banget, lan wutah kinerja kanggo data khas pinunjul. Nyalin gambar mesin virtual kanggo instalasi anyar sistem operasi Windows (OS sing anyar diinstal, durung ana data ing njero) karo compression=lz4 liwati 27% luwih cepet saka karo compression=noneing tes iki saka 2015.

ARC - Cache Panggantos adaptif

ZFS mung sistem file modern kita ngerti sing nggunakake mekanisme caching maca dhewe, tinimbang gumantung ing cache kaca sistem operasi kanggo nyimpen salinan pamblokiran bubar diwaca ing RAM.

Sanajan cache asli ora tanpa masalah - ZFS ora bisa nanggapi panjaluk alokasi memori anyar kanthi cepet kaya kernel, mula telpon anyar malloc() alokasi memori bisa gagal yen mbutuhake RAM saiki dikuwasani dening ARC. Nanging ana alasan apik kanggo nggunakake cache dhewe, paling ora kanggo saiki.

Kabeh sistem operasi modern sing dikenal, kalebu MacOS, Windows, Linux lan BSD, nggunakake algoritma LRU (Least Recently Used) kanggo ngleksanakake cache kaca. Iki minangka algoritma primitif sing nyurung blok cache "menyang ndhuwur antrian" sawise saben diwaca lan nyurung pamblokiran "menyang ngisor antrian" yen perlu kanggo nambah cache anyar sing luput (blok sing kudu diwaca saka disk tinimbang saka cache) menyang ndhuwur.

Biasane algoritma bisa dianggo kanthi apik, nanging ing sistem kanthi set data sing gedhe, LRU kanthi gampang ndadékaké thrashing - ngusir pamblokiran sing kerep dibutuhake kanggo nggawe papan kanggo blok sing ora bakal diwaca saka cache maneh.

ARC punika algoritma akeh kurang naif sing bisa dianggep minangka "bobot" cache. Saben blok cache diwaca, dadi rada "luwih abot" lan dadi angel diusir - lan sanajan blok kasebut diusir. dilacak liwat wektu tartamtu. Blok sing wis diusir nanging kudu diwaca maneh menyang cache uga bakal dadi luwih abot.

Asil pungkasan saka kabeh iki yaiku cache kanthi rasio hit sing luwih dhuwur-rasio antarane hit cache (maca saka cache) lan luput (maca saka disk). Iki minangka statistik sing penting banget - ora mung cache bisa dilayani kanthi luwih cepet, nanging cache uga bisa dilayani kanthi luwih cepet, amarga luwih akeh cache sing ana, panyuwunan bebarengan luwih sithik menyang disk lan luwih murah latensi kanggo sing isih luput. sing kudu dilayani nganggo disk.

kesimpulan

Saiki kita wis nutupi semantik dhasar ZFS-carane copy-on-write, uga hubungan antarane blumbang panyimpenan, piranti virtual, blok, sektor, lan file-kita siyap kanggo ngrembug kinerja donya nyata karo nomer nyata.

Ing bagean sabanjure, kita bakal ndeleng kinerja nyata saka mirrored vdev lan RAIDz pools, dibandhingake siji liyane, lan uga dibandhingake karo Linux kernel tradisional RAID topologies kita wis mriksa. sadurunge.

Kaping pisanan, kita mung pengin nutupi dhasar-topologi ZFS dhewe-nanging sawise kaya mengkono Kita bakal siyap ngomong babagan konfigurasi lan tuning ZFS sing luwih maju, kalebu nggunakake jinis vdev tambahan kayata L2ARC, SLOG lan Alokasi Khusus.

Source: www.habr.com

Add a comment