Mga sukaranan sa ZFS: Pagtipig ug Pagganap

Mga sukaranan sa ZFS: Pagtipig ug Pagganap

Niining tingpamulak nahisgotan na nato ang pipila ka pasiuna nga mga hilisgutan, pananglitan, unsaon pagsusi sa gikusgon sa imong mga drive ΠΈ unsa ang RAID. Sa ikaduha niini, misaad pa gani kami nga ipadayon ang pagtuon sa performance sa nagkalain-laing multi-disk topologies sa ZFS. Kini ang sunod nga henerasyon nga sistema sa file nga karon gipatuman bisan diin: gikan sa Apple sa Ubuntu.

Aw, karon ang labing kaayo nga adlaw aron masinati ang ZFS, mausisaon nga mga magbabasa. Hibal-i lang nga sa mapainubsanon nga opinyon sa developer sa OpenZFS nga si Matt Ahrens, "lisud gyud kini."

Apan sa dili pa kita makaabot sa mga numero - ug sila, ako mosaad - alang sa tanan nga mga kapilian alang sa usa ka walo ka disk ZFS configuration, kita kinahanglan nga maghisgot mahitungod sa sa unsa nga paagi Sa kinatibuk-an, ang ZFS nagtipig og datos sa disk.

Zpool, vdev ug device

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Kining tibuok nga pool diagram naglakip sa tulo ka auxiliary vdevs, usa sa matag klase, ug upat para sa RAIDz2

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Sa kasagaran walay rason sa paghimo sa usa ka pool sa dili managsama nga mga matang ug gidak-on sa vdev - apan walay makapugong kanimo sa pagbuhat niini kung gusto nimo.

Aron masabtan gyud ang ZFS file system, kinahanglan nimo nga tan-awon pag-ayo ang aktuwal nga istruktura niini. Una, gihiusa sa ZFS ang tradisyonal nga lebel sa pagdumala sa volume ug file system. Ikaduha, kini naggamit ug transactional copy-on-write nga mekanismo. Kini nga mga bahin nagpasabut nga ang sistema lahi kaayo sa istruktura gikan sa naandan nga mga sistema sa file ug mga arrays sa RAID. Ang unang set sa mga batakang building block nga masabtan mao ang storage pool (zpool), virtual device (vdev), ug tinuod nga device (device).

zpool

Ang zpool storage pool mao ang pinakataas nga istruktura sa ZFS. Ang matag pool adunay usa o daghang mga virtual nga aparato. Sa baylo, ang matag usa niini adunay usa o daghang mga tinuud nga aparato (device). Ang mga virtual pool kay adunay kaugalingon nga mga bloke. Ang usa ka pisikal nga kompyuter mahimong adunay duha o labaw pa nga bulag nga pool, apan ang matag usa hingpit nga independente sa uban. Ang mga pool dili makapaambit sa mga virtual device.

Ang redundancy sa ZFS anaa sa lebel sa virtual device, dili sa lebel sa pool. Walay hingpit nga pag-usab sa lebel sa pool - kung ang bisan unsang drive vdev o espesyal nga vdev nawala, nan ang tibuok pool mawala uban niini.

Ang mga moderno nga storage pool mahimong mabuhi sa pagkawala sa cache o virtual device log - bisan pa nga mahimo silang mawad-an og gamay nga kantidad sa hugaw nga datos kung mawala ang vdev log atol sa pagkawala sa kuryente o pagkahagsa sa sistema.

Adunay usa ka kasagaran nga sayop nga pagsabut nga ang ZFS "mga stripes sa datos" gisulat sa tibuuk nga pool. Dili kini tinuod. Ang Zpool dili kataw-anan nga RAID0, kini kataw-anan JBOD nga adunay usa ka komplikado nga mekanismo sa pag-apod-apod sa variable.

Sa kadaghanan nga bahin, ang mga rekord giapod-apod taliwala sa mga magamit nga virtual nga aparato sumala sa magamit nga libre nga wanang, mao nga sa teorya silang tanan mapuno sa parehas nga oras. Sa ulahi nga mga bersyon sa ZFS, ang karon nga paggamit sa vdev (paggamit) gikonsiderar - kung ang usa ka virtual nga aparato labi ka busy kaysa sa lain (pananglitan, tungod sa pag-load sa pagbasa), kini temporaryo nga laktawan alang sa pagsulat, bisan pa adunay labing kataas nga libre. ratio sa luna.

Ang mekanismo sa pag-detect sa paggamit nga gitukod sa modernong mga pamaagi sa pagsulat sa ZFS nga alokasyon makapakunhod sa latency ug makadugang sa throughput sa mga panahon sa talagsaon nga taas nga load - apan dili kini carte blanche sa dili boluntaryo nga pagsagol sa hinay nga mga HDD ug paspas nga mga SSD sa usa ka pool. Ang ingon nga dili patas nga pool molihok gihapon sa katulin sa labing hinay nga aparato, nga mao, ingon nga kini hingpit nga gilangkuban sa ingon nga mga aparato.

vdev

Ang matag storage pool naglangkob sa usa o daghang mga virtual device (virtual device, vdev). Sa baylo, ang matag vdev adunay usa o daghang tinuod nga mga aparato. Kadaghanan sa mga virtual nga aparato gigamit alang sa yano nga pagtipig sa datos, apan adunay daghang mga klase sa katabang sa vdev, lakip ang CACHE, LOG, ug ESPESYAL. Ang matag usa niining mga matang sa vdev mahimong adunay usa sa lima ka topologies: usa ka device (usa ka device), RAIDz1, RAIDz2, RAIDz3, o salamin (salamin).

Ang RAIDz1, RAIDz2 ug RAIDz3 mga espesyal nga lahi sa gitawag sa mga tigulang nga doble (diagonal) parity RAID. Ang 1, 2 ug 3 nagtumong sa pila ka parity blocks ang gigahin alang sa matag data strip. Imbis nga lahi nga mga disk alang sa parity, ang RAIDz virtual nga mga aparato nag-apod-apod niini nga parity nga semi-pantay sa mga disk. Ang RAIDz array mahimong mawad-an ug daghang mga disk kay kini adunay parity blocks; kung mawad-an kini og lain, kini mabangga ug madala ang storage pool uban niini.

Sa mirrored virtual device (mirror vdev), matag block gitipigan sa matag device sa vdev. Bisan kung ang duha ka lapad nga salamin mao ang labing kasagaran, ang bisan unsang arbitraryong gidaghanon sa mga aparato mahimong naa sa usa ka salamin - ang mga triple kanunay nga gigamit sa dagkong mga instalasyon alang sa gipaayo nga pasundayag sa pagbasa ug pagtugot sa sayup. Ang salamin sa vdev mahimong mabuhi sa bisan unsang kapakyasan basta bisan usa ka aparato sa vdev magpadayon nga molihok.

Ang mga single vdev kay delikado kaayo. Ang ingon nga usa ka virtual nga aparato dili mabuhi sa usa ka kapakyasan - ug kung gigamit ingon pagtipig o usa ka espesyal nga vdev, nan ang kapakyasan niini modala sa pagkaguba sa tibuuk nga pool. Pag-amping pag-ayo dinhi.

Ang mga CACHE, LOG, ug ESPESYAL nga mga VA mahimong mabuhat gamit ang bisan unsang mga topologies sa ibabaw - apan hinumdomi nga ang pagkawala sa usa ka ESPESYAL nga VA nagpasabut sa pagkawala sa pool, mao nga girekomenda ang usa ka sobra nga topology.

device

Kini tingali ang labing sayon ​​​​nga termino nga masabtan sa ZFS - kini sa literal usa ka block random access device. Hinumdumi nga ang mga virtual nga aparato gilangkoban sa indibidwal nga mga aparato, samtang ang usa ka pool gilangkoban sa mga virtual nga aparato.

Ang mga disk - bisan magnetic o solid nga estado - mao ang labing komon nga block device nga gigamit isip building blocks sa vdev. Bisan pa, ang bisan unsang aparato nga adunay usa ka deskriptor sa / dev buhaton, mao nga ang tibuuk nga mga arrays sa RAID sa hardware mahimong magamit ingon lahi nga mga aparato.

Ang usa ka yano nga hilaw nga file mao ang usa sa labing hinungdanon nga alternatibo nga mga aparato nga block nga mahimo’g matukod ang usa ka vdev. Test pool gikan sa gamay nga mga file mao ang usa ka magamit kaayo nga paagi sa pagsusi sa mga sugo sa pool ug tan-awa kung unsa kadaghan ang magamit sa usa ka pool o virtual nga aparato sa usa ka gihatag nga topology.

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Makahimo ka og usa ka test pool gikan sa pipila ka mga file sa pipila lang ka segundo - apan ayaw kalimot sa pagtangtang sa tibuok pool ug sa mga sangkap niini pagkahuman

Ingnon ta nga gusto nimong ibutang ang usa ka server sa walo ka mga disk ug nagplano nga mogamit mga 10 TB disks (~ 9300 GiB) - apan dili ka sigurado kung unsang topology ang labing angay sa imong mga panginahanglan. Sa panig-ingnan sa ibabaw, nagtukod kami usa ka pagsulay nga pool gikan sa kadaghan nga mga file sa mga segundo - ug karon nahibal-an namon nga ang usa ka RAIDz2 vdev nga walo ka 10 TB disk naghatag 50 TiB nga magamit nga kapasidad.

Ang laing espesyal nga klase sa mga himan mao ang SPARE (spare). Ang mga hot-swap device, dili sama sa mga regular nga device, iya sa tibuok pool, ug dili sa usa ka virtual device. Kung ang usa ka vdev sa pool mapakyas ug ang usa ka ekstra nga aparato konektado sa pool ug magamit, dayon kini awtomatiko nga moapil sa naapektuhan nga vdev.

Human sa pagkonektar sa naapektuhan nga vdev, ang ekstrang device magsugod sa pagdawat og mga kopya o pagtukod pag-usab sa datos nga kinahanglan anaa sa nawala nga device. Sa tradisyonal nga RAID gitawag kini nga pagtukod pag-usab, samtang sa ZFS gitawag kini nga resilvering.

Importante nga hinumdoman nga ang mga ekstrang himan dili permanente nga mopuli sa napakyas nga mga himan. Kini usa lamang ka temporaryo nga pag-ilis aron makunhuran ang oras nga ang vdev nadaot. Human mapulihan sa tagdumala ang napakyas nga vdev, ibalik ang redundancy sa maong permanenteng device, ug ang SPARE madiskonekta gikan sa vdev ug mibalik sa pagtrabaho isip reserba sa tibuok pool.

Mga set sa datos, bloke ug sektor

Ang sunod nga hugpong sa mga bloke sa pagtukod aron masabtan sa among ZFS nga panaw dili kaayo bahin sa hardware ug labi pa kung giunsa ang datos mismo giorganisar ug gitipigan. Gilaktawan namo ang pipila ka lebel dinhi - sama sa metaslab - aron dili mabutang ang mga detalye samtang nagpadayon ang pagsabut sa kinatibuk-ang istruktura.

Data set (dataset)

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Sa una namong paghimo og dataset, gipakita niini ang tanang available nga pool space. Dayon among gibutang ang quota - ug usbon ang mount point. Salamangka!

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Ang Zvol sa kadaghanan usa lang ka dataset nga gihukasan sa layer sa filesystem niini, nga among gipulihan dinhi sa usa ka normal nga ext4 filesystem.

Ang usa ka ZFS dataset halos parehas sa usa ka standard mounted file system. Sama sa usa ka regular nga sistema sa file, sa una nga pagtan-aw kini morag "usa ra ka folder". Apan sama sa regular nga mountable filesystems, ang matag ZFS dataset adunay kaugalingong set sa basic properties.

Una sa tanan, ang usa ka dataset mahimong adunay gi-assign nga quota. Kung gitakda zfs set quota=100G poolname/datasetname, unya dili ka makasulat sa gi-mount nga folder /poolname/datasetname labaw pa sa 100 GiB.

Matikdi ang presensya - ug pagkawala - sa mga laslas sa sinugdanan sa matag linya? Ang matag dataset adunay kaugalingong dapit sa ZFS hierarchy ug sa system mount hierarchy. Walay nag-unang slash sa ZFS hierarchy - magsugod ka sa ngalan sa pool ug dayon ang agianan gikan sa usa ka dataset ngadto sa sunod. Pananglitan, pool/parent/child alang sa usa ka dataset nga ginganlan child ubos sa parent dataset parent sa usa ka pool nga adunay usa ka mamugnaon nga ngalan pool.

Sa kasagaran, ang mount point sa dataset mahimong katumbas sa ngalan niini sa hierarchy sa ZFS, nga adunay nag-unang slash - ang pool nga ginganlan pool gitaod ingon /pool, set sa datos parent gitaod sa /pool/parent, ug ang dataset sa bata child gitaod sa /pool/parent/child. Bisan pa, ang punto sa pag-mount sa sistema sa dataset mahimong mabag-o.

Kung atong ipiho zfs set mountpoint=/lol pool/parent/child, unya ang set sa datos pool/parent/child gitaod sa sistema ingon nga /lol.

Dugang sa mga dataset, kinahanglan natong hisgutan ang mga volume (zvols). Ang usa ka volume halos parehas sa usa ka dataset, gawas nga wala kini usa ka file system-kini usa lamang ka block device. Mahimo nimo, pananglitan, paghimo zvol Sa ngalan mypool/myzvol, unya i-format kini sa usa ka ext4 file system, ug dayon i-mount kana nga file system - ikaw karon adunay usa ka ext4 file system, apan uban sa tanan nga mga bahin sa seguridad sa ZFS! Mahimong ingon kini kabuang sa usa ka makina, apan labi ka labi ka kahulugan ingon usa ka backend kung nag-eksport sa usa ka aparato nga iSCSI.

Blocks

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Ang file girepresentahan sa usa o daghang mga bloke. Ang matag block gitipigan sa usa ka virtual device. Ang gidak-on sa block kasagarang katumbas sa parameter gidak-on sa rekord, apan mahimong mubu sa 2^pagbalhinkung kini adunay metadata o gamay nga file.

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Kami gyud gyud dili pagbiaybiay bahin sa dako nga silot sa pasundayag kung magbutang ka gamay ra kaayo nga pagbalhin

Sa usa ka pool sa ZFS, ang tanan nga datos, lakip ang metadata, gitipigan sa mga bloke. Ang pinakataas nga gidak-on sa block alang sa matag set sa datos gihubit sa kabtangan recordsize (gidak-on sa rekord). Ang gidak-on sa rekord mahimong mabag-o, apan dili kini magbag-o sa gidak-on o lokasyon sa bisan unsang mga bloke nga nasulat na sa dataset - kini makaapekto lamang sa mga bag-ong bloke samtang kini gisulat.

Gawas kon gipiho, ang kasamtangan nga default nga gidak-on sa rekord kay 128 KiB. Kini usa ka matang sa usa ka malisud nga trade-off diin ang pasundayag dili perpekto, apan dili usab kini makalilisang sa kadaghanan nga mga kaso. Recordsize mahimong itakda sa bisan unsang kantidad gikan sa 4K hangtod 1M (uban ang mga advanced setting recordsize mahimo nimong i-install ang labi pa, apan panagsa ra kini usa ka maayong ideya).

Ang bisan unsang block nagtumong sa data sa usa lang ka file - dili nimo ma-cram ang duha ka lain-laing mga file sa usa ka block. Ang matag file naglangkob sa usa o daghang mga bloke, depende sa gidak-on. Kung ang gidak-on sa file mas gamay kaysa sa gidak-on sa rekord, kini tipigan sa mas gamay nga gidak-on sa bloke - pananglitan, ang usa ka bloke nga adunay 2 KiB file mag-okupar lamang sa usa ka 4 KiB nga sektor sa disk.

Kung ang file igo ang kadako ug nanginahanglan daghang mga bloke, nan ang tanan nga mga rekord nga adunay kini nga file adunay kadako recordsize - lakip ang katapusan nga entry, ang nag-unang bahin niini mahimong wala magamit nga luna.

zvols walay kabtangan recordsize - sa baylo sila adunay usa ka katumbas nga kabtangan volblocksize.

Mga sektor

Ang katapusan, labing sukaranan nga bloke sa pagtukod mao ang sektor. Kini ang pinakagamay nga pisikal nga yunit nga mahimong isulat o basahon gikan sa nahiilalum nga himan. Sulod sa pipila ka mga dekada, kadaghanan sa mga disk naggamit sa 512-byte nga mga sektor. Karong bag-o, kadaghanan sa mga disk gi-configure alang sa 4 nga mga sektor sa KiB, ug ang uban - labi na ang mga SSD - adunay 8 nga sektor sa KiB o labi pa.

Ang sistema sa ZFS adunay kabtangan nga nagtugot kanimo nga mano-mano nga itakda ang gidak-on sa sektor. Kini nga kabtangan ashift. Medyo makalibog, ang ashift usa ka gahum sa duha. Pananglitan, ashift=9 nagpasabot ug gidak-on sa sektor nga 2^9, o 512 bytes.

Gipangutana sa ZFS ang operating system alang sa detalyado nga kasayuran bahin sa matag block device kung idugang kini sa usa ka bag-ong vdev, ug sa teorya awtomatiko nga i-install ang ashift sa husto nga paagi base sa kana nga kasayuran. Ikasubo, daghang mga drive ang namakak bahin sa gidak-on sa ilang sektor aron mapadayon ang pagkaangay sa Windows XP (nga dili masabtan ang mga drive sa ubang mga gidak-on sa sektor).

Kini nagpasabut nga ang usa ka tagdumala sa ZFS kusganong gitambagan nga mahibal-an ang tinuud nga gidak-on sa sektor sa ilang mga aparato ug mano-mano nga gitakda ashift. Kung ang ashift gitakda nga ubos kaayo, nan ang gidaghanon sa pagbasa / pagsulat nga mga operasyon nagdugang astronomically. Busa, ang pagsulat sa 512-byte nga "mga sektor" ngadto sa tinuod nga 4 KiB nga sektor nagpasabot nga kinahanglang isulat ang unang "sektor", unya basaha ang 4 KiB nga sektor, usba kini gamit ang ikaduhang 512-byte nga "sektor", isulat kini balik sa bag-ong 4 KiB nga sektor, ug uban pa alang sa matag entry.

Sa tinuud nga kalibutan, ang ingon nga silot naigo sa Samsung EVO SSDs, diin ashift=13, apan kini nga mga SSD namakak bahin sa gidak-on sa ilang sektor, ug busa ang default gitakda sa ashift=9. Kung ang usa ka eksperyensiyado nga tagdumala sa sistema wala magbag-o sa kini nga setting, nan kini nga SSD molihok hinay naandan nga magnetic HDD.

Alang sa pagtandi, alang sa dako kaayo nga gidak-on ashift halos walay silot. Walay tinuod nga performance nga silot, ug ang pag-usbaw sa wala magamit nga luna kay gamay ra (o zero nga adunay compression enabled). Busa, kusganon namong girekomendar nga bisan kadtong mga drive nga naggamit ug 512-byte nga mga sektor i-install ashift=12 o bisan pa ashift=13sa pag-atubang sa umaabot uban ang pagsalig.

Panag-iya ashift gitakda alang sa matag vdev virtual device, ug dili para sa pool, ingon sa daghan nga sayop nga naghunahuna - ug dili mausab human sa instalar. Kung aksidente ka nga naigo ashift kung magdugang ka ug bag-ong vdev sa usa ka pool, dili nimo mabawi nga nahugawan kana nga pool nga adunay gamay nga aparato sa performance ug sa kasagaran wala’y lain nga kapilian gawas sa pagguba sa pool ug pagsugod pag-usab. Bisan ang pagtangtang sa vdev dili makaluwas kanimo gikan sa usa ka guba nga configuration ashift!

Copy-on-write nga mekanismo

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Kung ang usa ka regular nga sistema sa file kinahanglan nga mag-overwrite sa datos, kini magbag-o sa matag bloke kung asa kini

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Ang usa ka copy-on-write file system mosulat ug bag-ong block version ug dayon moabli sa daan nga bersyon

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Sa abstract, kung atong ibaliwala ang aktwal nga pisikal nga lokasyon sa mga bloke, nan ang atong "data comet" gipasimple ngadto sa usa ka "data worm" nga naglihok gikan sa wala ngadto sa tuo tabok sa mapa sa anaa nga luna.

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Karon makakuha kami usa ka maayo nga ideya kung giunsa ang pagkopya sa mga snapshot sa pagsulat - ang matag bloke mahimong mapanag-iya sa daghang mga snapshot, ug magpadayon hangtod malaglag ang tanan nga kauban nga mga snapshot.

Ang mekanismo sa Copy on Write (CoW) mao ang sukaranan nga sukaranan kung unsa ang naghimo sa ZFS nga usa ka talagsaon nga sistema. Ang batakang konsepto yano ra - kung mangutana ka sa usa ka tradisyonal nga sistema sa file nga usbon ang usa ka file, buhaton gyud niini ang imong gihangyo. Kung mangutana ka sa usa ka copy-on-write file system nga buhaton ang parehas, kini moingon "ok" apan mamakak kanimo.

Hinoon, ang usa ka copy-on-write file system mosulat ug bag-ong bersyon sa giusab nga block ug dayon i-update ang metadata sa file aron ma-unlink ang daan nga block ug i-associate ang bag-ong block nga bag-o lang nimo gisulat niini.

Ang pagtangtang sa daan nga bloke ug pag-link sa bag-o gihimo sa usa ka operasyon, aron dili kini mabalda - kung gipalong nimo pagkahuman kini mahitabo, naa kay bag-ong bersyon sa file, ug kung sayo nga gipalong, naa nimo ang daan nga bersyon . Sa bisan unsa nga kaso, walay mga panagsumpaki sa file system.

Ang pagkopya-sa-pagsulat sa ZFS mahitabo dili lamang sa lebel sa sistema sa file, kondili usab sa lebel sa pagdumala sa disk. Kini nagpasabot nga ang ZFS dili apektado sa white space (usa ka lungag sa RAID) - usa ka panghitabo kung ang strip adunay panahon sa pagrekord lamang sa partially sa wala pa nahagsa ang sistema, nga adunay kadaot sa array human sa reboot. Dinhi ang stripe gisulat nga atomically, ang vdev kanunay nga sunud-sunod, ug Si Bob imong uyoan.

ZIL: ZFS intent log

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Gitratar sa sistema sa ZFS ang mga synchronous nga pagsulat sa usa ka espesyal nga paagi - kini temporaryo apan gitipigan dayon kini sa ZIL sa wala pa kini isulat nga permanente sa ulahi kauban ang mga asynchronous nga pagsulat.

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Kasagaran, ang datos nga gisulat sa usa ka ZIL dili na basahon pag-usab. Apan posible kini human sa pagkahagsa sa sistema

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Ang SLOG, o secondary LOG device, usa lang ka espesyal - ug mas maayo nga paspas kaayo - vdev, diin ang ZIL mahimong tipigan nga gilain gikan sa main storage.

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Pagkahuman sa usa ka pag-crash, ang tanan nga hugaw nga datos sa ZIL gi-replay - sa kini nga kaso, ang ZIL naa sa SLOG, mao nga kini gi-replay gikan didto

Adunay duha ka nag-unang mga kategorya sa pagsulat nga mga operasyon - dungan (sync) ug asynchronous (async). Alang sa kadaghanan sa mga karga sa trabaho, ang kadaghanan sa mga pagsulat kay asynchronous - ang file system nagtugot kanila nga ma-aggregate ug ma-issue sa mga batch, makapakunhod sa fragmentation ug makadugang pag-ayo sa throughput.

Ang gi-synchronize nga mga pagrekord usa ka lahi nga butang. Kung ang usa ka aplikasyon nangayo usa ka dungan nga pagsulat, gisultihan niini ang sistema sa file: "Kinahanglan nimo nga itugyan kini sa dili mabag-o nga panumduman. karon dayonhangtod niadto, wala na koy laing mahimo.” Busa, ang mga dungan nga pagsulat kinahanglan nga itugyan sa disk diha-diha dayon-ug kung kana makadugang sa pagkabahin o makapakunhod sa throughput, nan mao na.

Ang ZFS nagdumala sa mga synchronous nga pagsulat nga lahi kay sa regular nga mga sistema sa file-imbes nga itugyan dayon kini sa regular nga pagtipig, ang ZFS nagtugyan kanila sa usa ka espesyal nga storage area nga gitawag og ZFS Intent Log, o ZIL. Ang lansis mao nga kini nga mga rekord usab magpabilin sa panumduman, nga giipon uban sa normal nga asynchronous pagsulat hangyo, nga sa ulahi i-flush ngadto sa pagtipig ingon nga hingpit nga normal nga TXGs (Transaction Groups).

Sa normal nga operasyon, ang ZIL gisulat ug dili na basahon pag-usab. Kung, pagkahuman sa pipila ka mga gutlo, ang mga rekord gikan sa ZIL gitugyan sa panguna nga pagtipig sa ordinaryo nga mga TXG gikan sa RAM, sila nahimulag gikan sa ZIL. Ang bugtong higayon nga adunay mabasa gikan sa ZIL kung ang pool gi-import.

Kung mapakyas ang ZFS - usa ka pag-crash sa operating system o pagkawala sa kuryente - samtang adunay datos sa ZIL, kana nga datos mabasa sa sunod nga pag-import sa pool (pananglitan, kung ang sistema sa emerhensya gi-restart). Ang bisan unsa nga naa sa ZIL basahon, igrupo sa mga TXG, gitugyan sa panguna nga pagtipig, ug dayon ibulag gikan sa ZIL sa panahon sa proseso sa pag-import.

Usa sa mga klase sa katabang sa vdev gitawag nga LOG o SLOG, ang ikaduha nga aparato sa LOG. Kini adunay usa ka katuyoan - sa paghatag sa pool sa usa ka bulag, ug mas maayo nga mas paspas, kaayo write-resistant vdev sa pagtipig sa ZIL, sa baylo nga sa pagtipig sa ZIL sa nag-unang vdev tindahan. Ang ZIL mismo naglihok nga parehas bisan asa kini gitipigan, apan kung ang LOG vdev adunay taas kaayo nga pasundayag sa pagsulat, ang mga dungan nga pagsulat mahimong mas paspas.

Ang pagdugang sa usa ka vdev nga adunay LOG sa pool dili molihok dili mahimo pagpalambo sa asynchronous pagsulat performance - bisan kon imong pugson ang tanan nga pagsulat sa ZIL uban sa zfs set sync=always, sila masumpay gihapon sa main storage sa TXG sa samang paagi ug sa samang dagan nga wala ang log. Ang bugtong direkta nga pagpauswag sa pasundayag mao ang latency sa mga dungan nga pagsulat (tungod kay ang mas paspas nga log nagpadali sa mga operasyon). sync).

Bisan pa, sa usa ka palibot nga nanginahanglan na daghang mga dungan nga pagsulat, ang vdev LOG mahimong dili direkta nga mapadali ang mga asynchronous nga pagsulat ug dili gi-cach nga mga pagbasa. Ang pag-offload sa mga entry sa ZIL sa usa ka bulag nga vdev LOG nagpasabut nga gamay nga panagbingkil alang sa IOPS sa panguna nga pagtipig, nga nagpauswag sa paghimo sa tanan nga mga pagbasa ug pagsulat sa usa ka sukod.

Mga snapshot

Ang mekanismo sa copy-on-write usa usab ka kinahanglanon nga pundasyon para sa ZFS atomic snapshots ug incremental asynchronous replication. Ang aktibo nga sistema sa file adunay usa ka punoan nga punoan nga nagtimaan sa tanan nga mga rekord nga adunay karon nga datos - kung magkuha ka usa ka snapshot, maghimo ka usa ka kopya sa kini nga punoan nga punoan.

Kung ang usa ka rekord gi-overwrit sa aktibo nga sistema sa file, una nga gisulat sa ZFS ang bag-ong bersyon sa block sa wala magamit nga wanang. Dayon gitangtang niini ang daan nga bersyon sa block gikan sa kasamtangan nga file system. Apan kung ang pipila ka snapshot nagtumong sa daan nga bloke, kini nagpabilin nga wala mausab. Ang daan nga bloke dili aktuwal nga mapasig-uli ingon nga libre nga wanang hangtod ang tanan nga mga snapshot nga nagtumong niini nga bloke malaglag!

replikasyon

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Ang akong Steam library sa 2015 mao ang 158 GiB ug naglakip sa 126 nga mga file. Kini duol ra sa kamalaumon nga kahimtang alang sa rsync - Ang pagkopya sa ZFS sa network "lamang" 927% nga mas paspas.

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Sa parehas nga network, ang pagkopya sa usa ka 40GB Windows 7 virtual machine image file usa ka lahi nga istorya. Ang replikasyon sa ZFS 289 ka beses nga mas paspas kaysa rsync - o "lamang" 161 ka beses nga mas paspas kung ikaw adunay igong kahibalo sa pagtawag sa rsync sa --inplace.

Mga sukaranan sa ZFS: Pagtipig ug Pagganap
Kung ang usa ka imahe sa VM gi-scale, ang rsync nag-isyu sa scale niini. Ang 1,9 TiB dili ingon ka dako alang sa usa ka moderno nga imahe sa VM - apan kini igo nga kadako nga ang pagkopya sa ZFS 1148 ka beses nga mas paspas kaysa rsync, bisan sa rsync's --inplace nga argumento

Kung nahibal-an nimo kung giunsa ang paglihok sa mga snapshot, kinahanglan nga dali nga masabtan ang diwa sa pagkopya. Tungod kay ang usa ka snapshot usa ra ka punoan sa mga punto sa mga rekord, kini nagsunod nga kung buhaton naton zfs send snapshot, dayon ipadala namo kini nga kahoy ug ang tanang mga rekord nga nalangkit niini. Sa dihang ipadala namo kini zfs send Π² zfs receive sa target, gisulat niini ang aktuwal nga sulod sa block ug ang tree of pointer nga nagtumong sa mga block sa target dataset.

Ang mga butang mahimong mas makapaikag sa ikaduha zfs send. Kami karon adunay duha ka mga sistema, ang matag usa adunay sulod poolname/datasetname@1, ug mokuha ka og bag-ong snapshot poolname/datasetname@2. Busa, sa orihinal nga pool nga imong nabatonan datasetname@1 ΠΈ datasetname@2, ug sa target pool hangtod karon ang una nga snapshot datasetname@1.

Tungod kay kita adunay usa ka komon nga snapshot tali sa tinubdan ug sa target datasetname@1, mahimo nato kini incremental zfs send ibabaw niini. Kung giingon namon sa sistema zfs send -i poolname/datasetname@1 poolname/datasetname@2, kini nagtandi sa duha ka punoan nga punoan. Bisan unsang mga punto nga anaa lamang sa @2, klaro nga nagtumong sa bag-ong mga bloke - busa kinahanglan namon ang sulud niini nga mga bloke.

Sa usa ka hilit nga sistema, pagproseso sa usa ka incremental send kay simple ra. Una among isulat ang tanang bag-ong mga entry nga gilakip sa sapa send, ug dayon idugang ang mga pointer sa mga bloke. Voila, naa mi @2 sa bag-ong sistema!

Ang ZFS asynchronous incremental replication usa ka dako nga pag-uswag sa naunang non-snapshot based nga mga pamaagi sama sa rsync. Sa duha nga mga kaso, ang nabag-o nga datos ra ang gibalhin - apan kinahanglan una ang rsync pagbasa gikan sa disk ang tanan nga mga data sa duha ka kilid sa pagsusi sa sum ug itandi kini. Sa kasukwahi, ang replikasyon sa ZFS wala’y mabasa gawas sa mga punoan sa pointer - ug bisan unsang mga bloke nga wala naa sa gipaambit nga snapshot.

Gitukod-sa compression

Ang mekanismo sa copy-on-write nagpayano usab sa inline compression system. Sa usa ka tradisyonal nga sistema sa file, ang compression adunay problema - ang daan nga bersyon ug ang bag-ong bersyon sa giusab nga datos nagpuyo sa parehas nga wanang.

Kung atong ikonsiderar ang usa ka piraso sa datos sa tunga-tunga sa usa ka file nga nagsugod sa kinabuhi isip usa ka megabyte sa mga zero gikan sa 0x00000000 ug uban pa, sayon ​​​​kaayo nga i-compress kini sa usa ka sektor sa disk. Apan unsa ang mahitabo kung atong ilisan kana nga megabyte sa mga zero sa usa ka megabyte nga dili ma-compress nga datos sama sa JPEG o pseudo-random noise? Sa wala damha, kini nga megabyte sa datos magkinahanglan dili usa, apan 256 4 KiB nga mga sektor, ug niining dapita sa disk usa lamang ka sektor ang gitagana.

Ang ZFS walay kini nga problema, tungod kay ang giusab nga mga rekord kanunay nga gisulat sa wala magamit nga luna - ang orihinal nga block nag-okupar lamang sa usa ka 4 KiB nga sektor, ug ang bag-ong rekord mag-okupar sa 256, apan kini dili usa ka problema - usa ka bag-o nga giusab nga tipik gikan sa " tunga" sa file isulat sa wala magamit nga wanang bisan kung ang gidak-on niini nabag-o o wala, busa alang sa ZFS kini usa ka regular nga kahimtang.

Ang lumad nga ZFS compression gi-disable pinaagi sa default, ug ang sistema nagtanyag ug pluggable algorithmsβ€”karon LZ4, gzip (1-9), LZJB, ug ZLE.

  • LZ4 usa ka streaming algorithm nga nagtanyag labi ka paspas nga pag-compress ug decompression ug mga benepisyo sa pasundayag alang sa kadaghanan nga mga kaso sa paggamit - bisan sa medyo hinay nga mga CPU.
  • GZIP usa ka tinahod nga algorithm nga nahibal-an ug gihigugma sa tanan nga tiggamit sa Unix. Mahimo kini nga ipatuman sa lebel sa compression 1-9, nga adunay ratio sa compression ug pagtaas sa paggamit sa CPU samtang nagkaduol kini sa lebel 9. Ang algorithm maayo nga haum alang sa tanan nga teksto (o uban pang kaayo nga ma-compress) nga mga kaso sa paggamit, apan kung dili kanunay nga hinungdan sa mga isyu sa CPU βˆ’ gamita kini uban ang pag-amping, labi na sa mas taas nga lebel.
  • LZJB mao ang orihinal nga algorithm sa ZFS. Kini wala na gamita ug dili na angay gamiton, ang LZ4 milabaw niini sa tanang paagi.
  • ZLE - zero level encoding, Zero Level Encoding. Wala kini makahikap sa normal nga datos, apan nag-compress sa dagkong mga han-ay sa mga zero. Mapuslanon alang sa hingpit nga dili ma-compress nga mga dataset (sama sa JPEG, MP4, o uban pang na-compress na nga mga format) tungod kay kini wala magtagad sa dili ma-compress nga datos apan nag-compress sa wala magamit nga luna sa mga resulta nga mga rekord.

Among girekomendar ang LZ4 compression alang sa halos tanang kaso sa paggamit; ang silot sa pasundayag kung makasugat sa dili ma-compress nga datos gamay ra kaayo, ug pagtubo ang performance alang sa tipikal nga datos mahinungdanon. Pagkopya sa imahe sa virtual machine para sa bag-ong instalasyon sa operating system sa Windows (bag-o nga na-install nga OS, wala pay datos sa sulod) nga adunay compression=lz4 milabay sa 27% mas paspas kay sa compression=nonesa kini nga pagsulay sa 2015.

ARC - adaptive replacement cache

Ang ZFS mao lamang ang moderno nga sistema sa file nga nahibal-an namon nga naggamit sa kaugalingon nga mekanismo sa pag-cache sa pagbasa, imbes nga magsalig sa cache sa panid sa operating system aron magtipig mga kopya sa bag-ong nabasa nga mga bloke sa RAM.

Bisan kung ang lumad nga cache wala’y mga problema niini - ang ZFS dili makatubag sa bag-ong mga hangyo sa alokasyon sa panumduman sama ka paspas sa kernel, mao nga ang bag-ong hagit malloc() sa alokasyon sa panumduman mahimong mapakyas kung kinahanglan niini ang RAM nga giokupar karon sa ARC. Apan adunay maayo nga mga hinungdan sa paggamit sa imong kaugalingon nga cache, labing menos sa pagkakaron.

Ang tanan nga nailhan nga modernong operating system, lakip ang MacOS, Windows, Linux ug BSD, naggamit sa LRU (Least Recently Used) algorithm aron ipatuman ang page cache. Kini usa ka primitive nga algorithm nga nagduso sa cached block "up the queue" pagkahuman sa matag pagbasa, ug nagduso sa mga bloke "down the queue" kung gikinahanglan aron makadugang bag-ong cache misses (mga bloke nga unta basahon gikan sa disk, dili gikan sa cache) pataas.

Ang algorithm sa kasagaran maayo nga pagtrabaho, apan sa mga sistema nga adunay daghang nagtrabaho nga mga datos, ang LRU dali nga mosangput sa pag-thrashing - pagpalayas sa kanunay nga gikinahanglan nga mga bloke aron mahatagan lugar ang mga bloke nga dili na mabasa gikan sa cache.

ARC mao ang usa ka dili kaayo walay pulos nga algorithm nga maisip nga usa ka "gitimbang" nga cache. Sa matag higayon nga ang usa ka cached block basahon, kini mahimong "mas bug-at" ug mas lisud nga papahawaon - ug bisan human sa pagpalayas sa usa ka block gisubay sulod sa usa ka piho nga yugto sa panahon. Ang usa ka block nga gipapahawa apan kinahanglan nga basahon balik sa cache mahimo usab nga "mas bug-at".

Ang katapusan nga resulta niining tanan mao ang cache nga adunay mas taas nga hit ratio, ang ratio tali sa cache hits (pagbasa nga gihimo gikan sa cache) ug cache misses (pagbasa gikan sa disk). Kini mao ang usa ka hilabihan ka importante nga estadistika - dili lamang nga ang cache hits sa ilang mga kaugalingon nag-alagad sa mga order sa magnitude nga mas paspas, cache misses mahimo usab nga mas paspas nga pag-alagad, tungod kay ang mas cache hits, ang mas diyutay nga dungan nga mga hangyo sa disk ug mas ubos ang latency alang sa mga nahabilin nga mga misses nga kinahanglan i-alagad uban sa disk.

konklusyon

Human mahibal-an ang sukaranan nga mga semantiko sa ZFS - kung giunsa ang pagkopya-sa-pagsulat, ingon man ang mga relasyon tali sa mga pool pool, virtual nga aparato, bloke, sektor, ug mga file - andam kami nga hisgutan ang tinuod nga kalibutan nga pasundayag sa tinuud nga mga numero.

Sa sunod nga bahin, atong tan-awon ang aktuwal nga pasundayag sa mga pool nga adunay mga salamin nga vdev ug RAIDz, batok sa usag usa, ug usab batok sa tradisyonal nga Linux kernel RAID topologies nga among gisuhid. sa sayo pa.

Sa sinugdan, gusto namong tabonan lamang ang mga sukaranan - ang mga topolohiya sa ZFS mismo - apan pagkahuman ingon niana mangandam ta sa paghisgot bahin sa mas abante nga setup ug tuning sa ZFS, apil ang paggamit sa auxiliary vdev type sama sa L2ARC, SLOG ug Special Allocation.

Source: www.habr.com

Idugang sa usa ka comment