{"id":83582,"date":"2020-06-01T19:42:21","date_gmt":"2020-06-01T17:42:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost"},"modified":"2020-06-01T19:42:21","modified_gmt":"2020-06-01T17:42:21","slug":"osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","title":{"rendered":"Grunderna i ZFS: lagringssystem och prestanda","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/70d75786f36a92a0407107fb79bee721.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDen h\u00e4r v\u00e5ren har vi redan diskuterat vissa introduktionsteman, som <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/gadgets\/2020\/02\/how-fast-are-your-disks-find-out-the-open-source-way-with-fio\/\">hur du kontrollerar hastigheten p\u00e5 dina diskar<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">vad RAID \u00e4r<\/a><\/noindex>. I den andra lovade vi till och med att forts\u00e4tta studera prestanda f\u00f6r olika fler-disktopologier i ZFS. Detta \u00e4r n\u00e4sta generations filsystem som nu implementeras \u00f6verallt: fr\u00e5n <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/gadgets\/2016\/06\/a-zfs-developers-analysis-of-the-good-and-bad-in-apples-new-apfs-file-system\/\">Apple<\/a><\/noindex> till <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/05\/ubuntu-20-04-welcome-to-the-future-linux-lts-disciples\/\">Ubuntu<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nN\u00e5v\u00e4l, idag \u00e4r den mest passande dagen f\u00f6r att bekanta sig med ZFS, nyfikna l\u00e4sare. Bara kom ih\u00e5g att enligt en blygsam uppskattning fr\u00e5n OpenZFS-utvecklaren Matt Arens, \"det \u00e4r verkligen komplicerat\".<\/p>\n<p>Men innan vi kommer till siffrorna - och de kommer, det lovar jag - f\u00f6r alla alternativ f\u00f6r \u00e5ttadiskkonfigurationer av ZFS, m\u00e5ste vi prata om hur <i>som<\/i> ZFS \u00f6verhuvudtaget lagrar data p\u00e5 disken.<\/p>\n<h1>Zpool, vdev och device<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/d881cb44e935480a6f2c30795d6afaf1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Detta diagram f\u00f6r den fullst\u00e4ndiga poolen inkluderar tre st\u00f6djande vdev&#8217;ar, en av varje klass, och fyra f\u00f6r RAIDz2<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/fa52fcf700cc72105a90e4ddc4724d9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vanligtvis finns det inga sk\u00e4l att skapa en pool av olika typer och storlekar av vdev - men om du vill, finns inget som hindrar dig fr\u00e5n att g\u00f6ra det<\/i><\/p>\n<p>F\u00f6r att verkligen f\u00f6rst\u00e5 filsystemet ZFS m\u00e5ste man ta en noggrann titt p\u00e5 dess faktiska struktur. F\u00f6r det f\u00f6rsta f\u00f6renar ZFS traditionella niv\u00e5er av volymhantering och filsystem. F\u00f6r det andra anv\u00e4nder det en transaktionell mekanism f\u00f6r kopiering vid skrivning. Dessa egenskaper inneb\u00e4r att systemet \u00e4r strukturellt mycket annorlunda \u00e4n vanliga filsystem och RAID-arrayer. Den f\u00f6rsta upps\u00e4ttningen grundl\u00e4ggande byggstenar f\u00f6r f\u00f6rst\u00e5else: det \u00e4r lagringspoolen (zpool), det virtuella enhet (vdev) och den verkliga enheten (device).<\/p>\n<h3>zpool<\/h3>\n<p>\nLagringspoolen zpool \u00e4r den \u00f6versta strukturen i ZFS. Varje pool inneh\u00e5ller en eller flera virtuella enheter. I sin tur inneh\u00e5ller var och en av dem en eller flera verkliga enheter (device). Virtuella pooler \u00e4r frist\u00e5ende block. En fysisk dator kan inneh\u00e5lla tv\u00e5 eller flera separata pooler, men varje \u00e4r helt oberoende av de andra. Pooler kan inte dela virtuella enheter.<\/p>\n<p>Redundansen i ZFS finns p\u00e5 niv\u00e5n av virtuella enheter, snarare \u00e4n p\u00e5 niv\u00e5n av pooler. P\u00e5 poolniv\u00e5 finns det absolut ingen redundans - om n\u00e5gon vdev-lagringsenhet eller special-vdev g\u00e5r f\u00f6rlorad, f\u00f6rloras hela poolen.<\/p>\n<p>Moderna lagringspooler kan \u00f6verleva f\u00f6rlust av cache eller logg fr\u00e5n det virtuella enheten \u2013 \u00e4ven om de kan f\u00f6rlora en liten m\u00e4ngd orena data om de f\u00f6rlorar vdev-loggen under str\u00f6mavbrott eller systemfel.<\/p>\n<p>Det finns en vanlig missuppfattning om att \"data stripes\" (strimmor) av ZFS skrivs \u00f6ver hela poolen. Detta \u00e4r fel. Zpool \u00e4r inte helt enkelt en rolig RAID0, det \u00e4r snarare en rolig <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Non-RAID_drive_architectures#JBOD\">JBOD<\/a><\/noindex> med en komplex och variabel mekanism f\u00f6r f\u00f6rdelning.<\/p>\n<p>F\u00f6r det mesta f\u00f6rdelas poster mellan tillg\u00e4ngliga virtuella enheter baserat p\u00e5 det tillg\u00e4ngliga fria utrymmet s\u00e5 att teoretiskt alla kommer att fyllas samtidigt. I senare versioner av ZFS beaktas den aktuella anv\u00e4ndningen (utnyttjandet) av vdev - om en virtuell enhet \u00e4r betydligt mer belastad \u00e4n en annan (till exempel p\u00e5 grund av l\u00e4sningsbelastning) kommer den tillf\u00e4lligt att hoppa \u00f6ver f\u00f6r skrivning, trots att det finns den h\u00f6gsta andelen ledigt utrymme.<\/p>\n<p>De inbyggda mekanismerna f\u00f6r att best\u00e4mma utnyttjandet i moderna metoder f\u00f6r skrivf\u00f6rdelning i ZFS kan minska latensen och \u00f6ka bandbredden under perioder av ovanligt h\u00f6g belastning - men det \u00e4r inte <i>fritt spelrum<\/i> f\u00f6r oavsiktlig blandning av l\u00e5ngsamma HDD och snabba SSD i en och samma pool. En s\u00e5dan oj\u00e4mlik pool kommer fortfarande att fungera med hastigheten hos den l\u00e5ngsammaste enheten, det vill s\u00e4ga som om den helt best\u00e5r av s\u00e5dana enheter.<\/p>\n<h3>vdev<\/h3>\n<p>\nVarje lagringspool best\u00e5r av en eller flera virtuella enheter (virtual device, vdev). I sin tur inkluderar varje vdev en eller flera verkliga enheter. De flesta virtuella enheter anv\u00e4nds f\u00f6r enkel datalagring, men det finns flera hj\u00e4lpklasser av vdev, inklusive CACHE, LOG och SPECIAL. Varje typ av vdev kan ha en av fem topologier: enhet (single-device), RAIDz1, RAIDz2, RAIDz3 eller spegel (mirror).<\/p>\n<p>RAIDz1, RAIDz2 och RAIDz3 \u00e4r speciella varianter av det som gamla kallar RAID med dubbel (diagonal) paritet. 1, 2 och 3 syftar p\u00e5 hur m\u00e5nga paritetsblock som tilldelas f\u00f6r varje dataruta. Ist\u00e4llet f\u00f6r separata diskar f\u00f6r att s\u00e4kerst\u00e4lla paritet, f\u00f6rdelar RAIDz virtuella enheter denna paritet j\u00e4mnt \u00f6ver diskarna. En RAIDz-array kan f\u00f6rlora lika m\u00e5nga diskar som den har paritetsblock; om den f\u00f6rlorar en till, g\u00e5r den s\u00f6nder och drar med sig lagringspoolen.<\/p>\n<p>I speglade virtuella enheter (mirror vdev) lagras varje block p\u00e5 varje enhet i vdev. \u00c4ven om de vanligaste \u00e4r dubbelspeglar (two-wide) kan det i spegeln finnas ett godtyckligt antal enheter \u2014 i st\u00f6rre installationer anv\u00e4nds ofta tredubbla speglar f\u00f6r att \u00f6ka l\u00e4sprestanda och redundans. En vdev-spegel kan \u00f6verleva vilken fel som helst s\u00e5 l\u00e4nge minst en enhet i vdev forts\u00e4tter att fungera.<\/p>\n<p>Enskilda vdev \u00e4r i grunden farliga. En s\u00e5dan virtuell enhet \u00f6verlever inte ett enda fel \u2014 och om den anv\u00e4nds som lagring eller speciell vdev, kommer dess fel att f\u00f6rst\u00f6ra hela poolen. V\u00e4rna om detta, var mycket, mycket f\u00f6rsiktig.<\/p>\n<p>Virtuella enheter CACHE, LOG och SPECIAL kan skapas enligt n\u00e5gon av de ovanst\u00e5ende topologierna \u2014 men kom ih\u00e5g att f\u00f6rlust av den virtuella enheten SPECIAL inneb\u00e4r f\u00f6rlust av poolen, s\u00e5 det rekommenderas starkt att ha en redundant topologi.<\/p>\n<h3>enhet<\/h3>\n<p>\nDetta \u00e4r troligen den enklaste termen att f\u00f6rst\u00e5 inom ZFS \u2014 det \u00e4r bokstavligen ett blockenhet av godtycklig \u00e5tkomst. Kom ih\u00e5g att virtuella enheter best\u00e5r av separata enheter, och en pool \u00e4r gjord av virtuella enheter.<\/p>\n<p>Diskar \u2014 magnetiska eller solid state \u2014 \u00e4r de mest vanligt f\u00f6rekommande blockenheter som anv\u00e4nds som byggstenar f\u00f6r vdev. Men vilken enhet som helst med en beskrivning i \/dev fungerar \u2014 s\u00e5 hela h\u00e5rdvaru-RAID-arrayer kan anv\u00e4ndas som separata enheter.<\/p>\n<p>En enkel r\u00e5fil \u00e4r en av de viktigaste alternativa blockenheterna som kan anv\u00e4ndas f\u00f6r att bygga en vdev. Testpoolar av <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Sparse_file\">komprimerade filer<\/a><\/noindex>\u00a0\u00e4r ett mycket bekv\u00e4mt s\u00e4tt att kontrollera poolkommandon och se hur mycket utrymme som \u00e4r tillg\u00e4ngligt i poolen eller det virtuella enheten i den aktuella topologin.<\/p>\n<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/d9bea0e4a6842742a7dbac2f9b1ba394.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Du kan skapa en testpool av sparade filer p\u00e5 bara n\u00e5gra sekunder \u2013 men gl\u00f6m inte att ta bort hela poolen och dess komponenter efter\u00e5t.<\/i> <\/p>\n<p>Anta att du vill s\u00e4tta upp en server med \u00e5tta diskar och planerar att anv\u00e4nda diskar p\u00e5 10 TB (~9300 GiB) \u2013 men du \u00e4r inte s\u00e4ker p\u00e5 vilken topologi som b\u00e4st matchar dina behov. I exemplet ovan bygger vi en testpool av sparade filer p\u00e5 bara n\u00e5gra sekunder \u2013 och nu vet vi att en RAIDz2 vdev av \u00e5tta diskar p\u00e5 10 TB ger 50 TiB anv\u00e4ndbar kapacitet.<\/p>\n<p>En annan speciell klass av enheter \u00e4r SPARE (reserv). Hot-swap-enheter, till skillnad fr\u00e5n vanliga enheter, tillh\u00f6r hela poolen och inte en enskild virtuell enhet. Om n\u00e5gon vdev i poolen g\u00e5r s\u00f6nder och reservutrustningen \u00e4r ansluten till poolen och tillg\u00e4nglig, ansluter den automatiskt till den skadade vdev.<\/p>\n<p>N\u00e4r reservutrustningen ansluts till den skadade vdev b\u00f6rjar den ta emot kopior eller rekonstruktioner av de data som borde finnas p\u00e5 den f\u00f6rlorade enheten. I traditionell RAID kallas detta \u00e5teruppbyggnad (rebuilding), och i ZFS kallas det \"\u00e5terst\u00e4llning av redundans\" (resilvering).<\/p>\n<p>Det \u00e4r viktigt att notera att reservutrustningen inte permanent ers\u00e4tter de enheter som har slutat fungera. Det \u00e4r bara en tillf\u00e4llig ers\u00e4ttning f\u00f6r att minska den tid under vilken vdev \u00e4r i ett f\u00f6rs\u00e4mrat tillst\u00e5nd. N\u00e4r administrat\u00f6ren har ersatt den trasiga enheten i vdev, sker det en \u00e5terst\u00e4llning av redundans p\u00e5 den permanenta enheten, och SPARE kopplas fr\u00e5n vdev och \u00e5terg\u00e5r till att vara en reserv f\u00f6r hela poolen.<\/p>\n<h1>Datasatser, block och sektorer<\/h1>\n<p>\nDen n\u00e4sta upps\u00e4ttningen byggstenar som vi beh\u00f6ver f\u00f6rst\u00e5 i v\u00e5r resa genom ZFS handlar mindre om h\u00e5rdvaran och mer om hur sj\u00e4lva data \u00e4r organiserade och lagrade. H\u00e4r hoppar vi \u00f6ver n\u00e5gra niv\u00e5er \u2013 s\u00e5som metaslab \u2013 f\u00f6r att inte \u00f6verbelasta detaljerna, och bibeh\u00e5lla f\u00f6rst\u00e5elsen f\u00f6r den \u00f6vergripande strukturen.<\/p>\n<h3>Datasats (dataset)<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/6a4dc218bd1c57989739d5072f13804c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>N\u00e4r vi f\u00f6rst skapar en datasats visar den hela det tillg\u00e4ngliga utrymmet i poolen. Sedan st\u00e4ller vi in en kvot \u2013 och \u00e4ndrar monteringspunkten. Magi!<\/i> <\/p>\n<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/aeb6763d6e78e3cc7ee8b1d39ee98b46.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Zvol \u00e4r mestadels bara en datasats utan sitt filsystemslager, som vi h\u00e4r ers\u00e4tter med ett helt normalt filsystem som ext4.<\/i> <\/p>\n<p>ZFS-datasettet \u00e4r ungef\u00e4r liknande en standardmonterad filsystem. Precis som ett vanligt filsystem kan det vid f\u00f6rsta anblick verka som \"bara en annan mapp\". Men precis som med vanliga monterade filsystem har varje ZFS-dataset sin egen upps\u00e4ttning grundl\u00e4ggande egenskaper.<\/p>\n<p>F\u00f6r det f\u00f6rsta kan det finnas en tilldelad kvot f\u00f6r datasetet. Om du st\u00e4ller in <code>zfs set quota=100G poolname\/datasetname<\/code>, kan du inte skriva till den monterade mappen <code>\/poolname\/datasetname<\/code> mer \u00e4n 100 GiB.<\/p>\n<p>M\u00e4rkte du n\u00e4rvaron \u2013 och fr\u00e5nvaron \u2013 av snedstreck i b\u00f6rjan av varje rad? Varje dataset har sin egen plats b\u00e5de i ZFS-hierarkin och i systemmonteringshierarkin. I ZFS-hierarkin finns det inget ledande snedstreck \u2013 du b\u00f6rjar med poolens namn och g\u00e5r sedan v\u00e4gen fr\u00e5n ett dataset till n\u00e4sta. Till exempel, <code>pool\/parent\/child<\/code> f\u00f6r ett dataset med namnet <code>child<\/code> under den \u00f6verordnade datasetet <code>parent<\/code> i en pool med ett kreativt namn. <code>pool<\/code>.<\/p>\n<p>Som standard \u00e4r monteringspunkten f\u00f6r datasetet likv\u00e4rdig med dess namn i ZFS-hierarkin, med ett snedstreck i b\u00f6rjan \u2013 poolen med namnet <code>pool<\/code> monteras som <code>\/pool<\/code>, datasetet <code>parent<\/code> monteras i <code>\/pool\/parent<\/code>, och det underordnade datasetet <code>child<\/code> monteras i <code>\/pool\/parent\/child<\/code>. Men den systemmonterade punkten f\u00f6r datasetet kan \u00e4ndras.<\/p>\n<p>Om vi anger <code>zfs set mountpoint=\/lol pool\/parent\/child<\/code>, d\u00e5 kommer datasetet <code>pool\/parent\/child<\/code> att monteras i systemet som <code>\/lol<\/code>.<\/p>\n<p>F\u00f6rutom datasets m\u00e5ste vi n\u00e4mna volymer (zvols). En volym \u00e4r ungef\u00e4r liknande ett dataset, f\u00f6rutom att den faktiskt inte har n\u00e5got filsystem \u2013 det \u00e4r bara en blockenhet. Du kan till exempel skapa <code>zvol<\/code> med namnet <code>mypool\/myzvol<\/code>, formattera det med ett ext4-filsystem och sedan montera detta filsystem \u2013 nu har du ett ext4-filsystem, men med st\u00f6d f\u00f6r alla ZFS-s\u00e4kerhetsfunktioner! Det kan verka dumt p\u00e5 en dator, men ger mycket mer mening som backend n\u00e4r du exporterar en iSCSI-enhet.<\/p>\n<h3>Block<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/ce96416cd2fa08ff615f13ccec72e838.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>En fil presenteras av en eller flera block. Varje block lagras p\u00e5 en virtuell enhet. Blockstorleken \u00e4r vanligtvis lika med parametern <b>recordsize<\/b>, men kan minskas till <b>2^ashift<\/b>, om den inneh\u00e5ller metadata eller en liten fil.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/f31c25e34af12a9a96b60a46c2924053.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vi menar verkligen, <b>verkligen<\/b> att vi inte sk\u00e4mtar om den enorma prestandaf\u00f6rlusten om ashift st\u00e4lls in p\u00e5 f\u00f6r l\u00e5gt.<\/i><\/p>\n<p>I ZFS-pool lagras all data, inklusive metadata, i block. Den maximala blockstorleken f\u00f6r varje datasets definieras i egenskapen <code>recordsize<\/code> (inrecordstorlek). Recordstorleken kan \u00e4ndras, men detta p\u00e5verkar inte storleken eller placeringen av n\u00e5gra block som redan har skrivits till datasetet \u2013 det g\u00e4ller endast f\u00f6r nya block n\u00e4r de skrivs.<\/p>\n<p>Om inget annat anges \u00e4r den aktuella standardrecordstorleken 128 KiB. Detta \u00e4r en slags kompromiss d\u00e4r prestandan inte kommer att vara perfekt, men inte heller d\u00e5lig i de flesta fall. <code>Recordsize<\/code> kan st\u00e4llas in p\u00e5 vilket v\u00e4rde som helst fr\u00e5n 4K till 1M (med ytterligare inst\u00e4llningar <code>recordsize<\/code> kan st\u00e4llas in \u00e4nnu h\u00f6gre, men det \u00e4r s\u00e4llan en bra id\u00e9).<\/p>\n<p>Varje block refererar endast till data fr\u00e5n en fil \u2013 du kan inte trycka in tv\u00e5 olika filer i ett block. Varje fil best\u00e5r av ett eller flera block, beroende p\u00e5 storlek. Om filens storlek \u00e4r mindre \u00e4n recordstorleken, kommer den att sparas i ett mindre block \u2013 till exempel kommer ett block med en 2 KiB fil bara att ta en sektor p\u00e5 4 KiB p\u00e5 disken.<\/p>\n<p>Om filen \u00e4r tillr\u00e4ckligt stor och kr\u00e4ver flera block, d\u00e5 kommer alla poster med denna fil att ha storlek <code>recordsize<\/code>\u00a0\u2013 inklusive den sista posten, vars huvudsakliga del kan visa sig vara <noindex><a rel=\"nofollow\" href=\"https:\/\/whatis.techtarget.com\/definition\/slack-space-file-slack-space\">ouppnyttjat utrymme<\/a><\/noindex>.<\/p>\n<p>Zvol-voly har ingen egenskap <code>recordsize<\/code>\u00a0\u2013 ist\u00e4llet har de en motsvarande egenskap <code>volblocksize<\/code>.<\/p>\n<h3>Sektorer<\/h3>\n<p>\nDen sista, mest grundl\u00e4ggande byggstenen \u00e4r sektorn. Detta \u00e4r den minsta fysiska enheten som kan skrivas eller l\u00e4sas fr\u00e5n den grundl\u00e4ggande enheten. Under flera decennier har de flesta diskar anv\u00e4nt sektorer p\u00e5 512 byte. P\u00e5 senare tid har de flesta diskar st\u00e4llts in p\u00e5 sektorer p\u00e5 4 KiB, och i vissa fall \u2013 speciellt SSD \u2013 sektorer p\u00e5 8 KiB eller till och med mer.<\/p>\n<p>I ZFS-systemet finns det en egenskap som till\u00e5ter manuell inst\u00e4llning av sektorns storlek. Denna egenskap <code>ashift<\/code>. Det \u00e4r ganska f\u00f6rvirrande att ashift \u00e4r en exponent av tv\u00e5. Till exempel, <code>ashift=9<\/code> betyder sektorns storlek 2^9 eller 512 byte.<\/p>\n<p>ZFS beg\u00e4r detaljerad information om varje blockenhet fr\u00e5n operativsystemet n\u00e4r den l\u00e4ggs till i en ny vdev och st\u00e4ller teoretiskt sett in ashift automatiskt baserat p\u00e5 denna information. Tyv\u00e4rr ljuger m\u00e5nga diskar om sin sektorstorlek f\u00f6r att beh\u00e5lla kompatibilitet med Windows XP (som inte kunde f\u00f6rst\u00e5 diskar med andra sektorstorlekar).<\/p>\n<p>Detta inneb\u00e4r att en ZFS-administrat\u00f6r starkt rekommenderas att k\u00e4nna till den faktiska sektorstorleken p\u00e5 sina enheter och st\u00e4lla in den manuellt <code>ashift<\/code>. Om ashift \u00e4r inst\u00e4llt f\u00f6r l\u00e5gt \u00f6kar antalet l\u00e4s-\/skrivoperationer astronomiskt. S\u00e5 om man skriver 512-byte \u00absektorer\u00bb till en verklig 4 KiB-sektor m\u00e5ste man f\u00f6rst skriva den f\u00f6rsta \u00absektorn\u00bb, sedan l\u00e4sa 4 KiB-sektorn, \u00e4ndra den med den andra 512-byte \u00absektorn\u00bb, skriva tillbaka den till den nya 4 KiB-sektorn och s\u00e5 vidare f\u00f6r varje skrivning.<\/p>\n<p>I den verkliga v\u00e4rlden tr\u00e4ffar en s\u00e5dan straff de fasta lagringsenheterna Samsung EVO, f\u00f6r vilka det m\u00e5ste g\u00e4lla <code>ashift=13<\/code>, men dessa SSD:er ljuger om sin sektorstorlek, och d\u00e4rf\u00f6r st\u00e4lls som standard in <code>ashift=9<\/code>. Om inte en erfaren systemadministrat\u00f6r \u00e4ndrar denna parameter kommer denna SSD att fungera <i>l\u00e5ngsammare<\/i> som en vanlig magnetisk HDD.<\/p>\n<p>F\u00f6r j\u00e4mf\u00f6relse, det finns praktiskt taget inget straff f\u00f6r att ha en f\u00f6r stor storlek <code>ashift<\/code> . Det finns ingen verklig prestandaf\u00f6rlust, och \u00f6kningen av oanv\u00e4nt utrymme \u00e4r o\u00e4ndligt liten (eller noll vid aktiverad komprimering). D\u00e4rf\u00f6r rekommenderar vi starkt \u00e4ven f\u00f6r de diskar som verkligen anv\u00e4nder 512-byte sektorer att st\u00e4lla in <code>ashift=12<\/code> eller till och med <code>ashift=13<\/code>, f\u00f6r att framg\u00e5ngsrikt se in i framtiden.<\/p>\n<p>Egenskap <code>ashift<\/code> st\u00e4lls in f\u00f6r varje virtuellt enhet vdev, och <i>inte f\u00f6r poolen<\/i>, som m\u00e5nga felaktigt tror \u2013 och \u00e4ndras inte efter att den har st\u00e4llts in. Om du av misstag rubbar <code>ashift<\/code> n\u00e4r du l\u00e4gger till ett nytt vdev i poolen, har du permanent f\u00f6rorenat denna pool med en enhet med l\u00e5g prestanda, och det finns vanligtvis inget annat s\u00e4tt \u00e4n att f\u00f6rst\u00f6ra poolen och b\u00f6rja om fr\u00e5n b\u00f6rjan. \u00c4ven borttagning av vdev r\u00e4ddar inte fr\u00e5n en felaktig inst\u00e4llning. <code>ashift<\/code>!<\/p>\n<h3>Skrivningskopieringsmekanism<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/eb222dbcc3de428ff2b1c2c72b145db0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Om ett vanligt filsystem beh\u00f6ver skriva om data \u2013 \u00e4ndrar den varje block d\u00e4r det st\u00e5r.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/ba2474808b32667902966e4c9e69081a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Filssystemet med skrivkopiering skriver en ny version av blocket och l\u00e5ser sedan upp den gamla versionen.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/3b00dad44eb588ed793d2d5df7852892.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>I abstrakt bem\u00e4rkelse, om vi ignorerar den faktiska fysiska placeringen av blocken, f\u00f6renklas v\u00e5r \"datakomets\" till ett \"datmask\", som r\u00f6r sig fr\u00e5n v\u00e4nster till h\u00f6ger \u00f6ver kartan av tillg\u00e4ngligt utrymme.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/8c2c38dbc8a5e633c466d5c7f230951f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nu kan vi f\u00e5 en bra uppfattning om hur skrivkopieringssnapshot fungerar \u2013 varje block kan tillh\u00f6ra flera snapshots och kommer att sparas s\u00e5 l\u00e4nge alla relaterade snapshots inte har raderats.<\/i><\/p>\n<p>Skrivkopieringsmekanismen (Copy on Write, CoW) \u00e4r den grundl\u00e4ggande basen f\u00f6r vad som g\u00f6r ZFS till ett s\u00e5 fantastiskt system. Huvudkonceptet \u00e4r enkelt \u2013 om du ber ett traditionellt filsystem att \u00e4ndra en fil, g\u00f6r den precis vad du beg\u00e4rde. Om du ber ett skrivkopierande filsystem att g\u00f6ra samma sak, s\u00e4ger det \"okej\" \u2013 men ljuger f\u00f6r dig.<\/p>\n<p>Ist\u00e4llet skriver det skrivkopierande filsystemet en ny version av det f\u00f6r\u00e4ndrade blocket och uppdaterar sedan filens metadata f\u00f6r att bryta kopplingen med det gamla blocket och koppla det till det nya block som just har skrivits.<\/p>\n<p>Kopplingen av det gamla blocket och bindningen av det nya sker i en operation, s\u00e5 denna kan inte avbrytas \u2013 om du st\u00e4nger av str\u00f6mmen efter att det har skett, har du en ny version av filen, och om du st\u00e4nger av str\u00f6mmen tidigare, har du den gamla versionen. I vilket fall som helst kommer det inte att uppst\u00e5 n\u00e5gra konflikter i filsystemet.<\/p>\n<p>Skrivkopiering i ZFS sker inte bara p\u00e5 filsystemniv\u00e5 utan ocks\u00e5 p\u00e5 diskhanteringsniv\u00e5. Detta inneb\u00e4r att ZFS inte p\u00e5verkas av skrivluckor (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.raid-recovery-guide.com\/raid5-write-hole.aspx\">RAID-h\u00e5l<\/a><\/noindex>) \u2013 ett fenomen d\u00e4r bandet bara har skrivits delvis innan systemet kraschar, med skador p\u00e5 arrayen efter omstart. H\u00e4r skrivs bandet atom\u00e4rt, vdev \u00e4r alltid konsekvent, och <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bob%27s_your_uncle\">Bob \u00e4r din farbror.<\/a><\/noindex>.<\/p>\n<h3>ZIL: ZFS avsiktslogg.<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/8d08b7bce60a1e3698fd0ec02494e6fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>ZFS-systemet hanterar synkrona skrivningar p\u00e5 ett speciellt s\u00e4tt \u2013 det sparar dem tempor\u00e4rt men omedelbart i ZIL, innan de senare skrivs permanent tillsammans med asynkrona skrivningar.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/2119ef409a7d8c9599ee63292452d80d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vanligtvis l\u00e4ses inte data som skrivs till ZIL n\u00e5gonsin igen. Men det \u00e4r m\u00f6jligt efter ett systemfel.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/88a62163b0fb9f14a41102821dfabb5f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>SLOG, eller sekund\u00e4r LOG-enhet, \u00e4r helt enkelt en speciell - och helst v\u00e4ldigt snabb - vdev d\u00e4r ZIL kan lagras separat fr\u00e5n det prim\u00e4ra lagringsutrymmet.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/819f7c21714adafe226028e95990f1df.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Efter ett fel \u00e5terst\u00e4lls alla smutsiga data i ZIL - i det h\u00e4r fallet ligger ZIL p\u00e5 SLOG, s\u00e5 de \u00e5terst\u00e4lls d\u00e4rifr\u00e5n.<\/i><\/p>\n<p>Det finns tv\u00e5 huvudkategorier av skrivoperationer - synkrona (sync) och asynkrona (async). F\u00f6r de flesta arbetsbelastningar \u00e4r den \u00f6verv\u00e4ldigande majoriteten av skrivoperationer asynkrona - filsystemet till\u00e5ter att de aggregeras och skickas i paket, vilket minskar fragmenteringen och avsev\u00e4rt \u00f6kar bandbredden.<\/p>\n<p>Synkrona skrivningar \u00e4r en helt annan sak. N\u00e4r en applikation beg\u00e4r en synkron skrivning, s\u00e4ger den till filsystemet: \"Du beh\u00f6ver spara det h\u00e4r i icke-flyktigt minne, <i>just nu.<\/i>och under tiden kan jag inte g\u00f6ra n\u00e5got mer.\" D\u00e4rf\u00f6r m\u00e5ste synkrona skrivningar omedelbart sparas p\u00e5 disken - och om det \u00f6kar fragmenteringen eller minskar bandbredden, d\u00e5 f\u00e5r det vara s\u00e5.<\/p>\n<p>ZFS hanterar synkrona skrivningar annorlunda \u00e4n vanliga filsystem - ist\u00e4llet f\u00f6r att omedelbart skriva dem till det vanliga lagringsutrymmet, sparar ZFS dem i ett speciellt lagringsomr\u00e5de som kallas ZFS Intent Log, eller ZIL. Kniffen \u00e4r att dessa skrivningar <i>\u00e4ven<\/i> f\u00f6rblir i minnet, samtidigt som de aggregeras med vanliga asynkrona skrivf\u00f6rfr\u00e5gningar, f\u00f6r att senare skrivas till lagringsutrymmet som helt normala TXG (transaktionsgrupper, Transaction Groups).<\/p>\n<p>Under normal drift skrivs ZIL till och l\u00e4ses aldrig mer. N\u00e4r skrivningarna fr\u00e5n ZIL efter n\u00e5gra \u00f6gonblick sparas i det prim\u00e4ra lagringsutrymmet i vanliga TXG fr\u00e5n RAM, kopplas de bort fr\u00e5n ZIL. Det \u00e4r endast d\u00e5 n\u00e5got l\u00e4ses fr\u00e5n ZIL - vid import av poolen.<\/p>\n<p>Om det intr\u00e4ffar ett ZFS-fel - en krasch av operativsystemet eller str\u00f6mavbrott - n\u00e4r det finns data i ZIL, kommer dessa data att l\u00e4sas under n\u00e4sta import av poolen (t.ex. vid omstart av den avbrutna systemet). Allt som finns i ZIL kommer att l\u00e4sas, aggregeras i TXG-grupper, sparas i det prim\u00e4ra lagringsutrymmet och d\u00e4refter kopplas loss fr\u00e5n ZIL under importprocessen.<\/p>\n<p>En av hj\u00e4lpklasserna i vdev kallas LOG eller SLOG, en sekund\u00e4r enhet LOG. Dess enda uppgift \u00e4r att tillhandah\u00e5lla poolen med en separat och, helst, mycket snabbare enhet med h\u00f6g skrivbest\u00e4ndighet f\u00f6r lagring av ZIL, ist\u00e4llet f\u00f6r att lagra ZIL p\u00e5 huvudlagringsvdev. ZIL beter sig likadant oavsett lagringsplats, men om vdev med LOG har mycket h\u00f6g skrivprestanda kommer synkrona skrivningar att ske snabbare.<\/p>\n<p>Att l\u00e4gga till vdev med LOG i poolen p\u00e5verkar inte <b>kan inte<\/b> prestationsf\u00f6rb\u00e4ttringen av asynkrona skrivningar \u2013 \u00e4ven om du tvingar fram alla skrivningar till ZIL med <code>zfs set sync=always<\/code>, kommer de fortfarande att vara bundna till huvudlagringen i TXG p\u00e5 samma s\u00e4tt och i samma takt som utan logg. Den enda direkta prestandaf\u00f6rb\u00e4ttringen \u00e4r latensen av synkrona skrivningar (eftersom en h\u00f6gre hastighet f\u00f6r loggen p\u00e5skyndar utf\u00f6randet av operationer. <code>sync<\/code>).<\/p>\n<p>Men i en milj\u00f6 som redan kr\u00e4ver m\u00e5nga synkrona skrivningar kan vdev LOG indirekt p\u00e5skynda asynkrona skrivningar och okashad l\u00e4sning. Att avlastar ZIL-skrivningar till en separat vdev LOG inneb\u00e4r mindre konkurrens om IOPS i den prim\u00e4ra lagringen, vilket p\u00e5 vissa s\u00e4tt \u00f6kar prestandan f\u00f6r alla l\u00e4s- och skrivoperationer.<\/p>\n<h3>Snapshots<\/h3>\n<p>\nSkriv-kopieringsmekanismen \u00e4r \u00e4ven en n\u00f6dv\u00e4ndig grund f\u00f6r atom\u00e4ra momentana bilder i ZFS och inkrementell asynkron replikering. I ett aktivt filsystem finns det ett tr\u00e4d av pekare som markerar alla skrivningar med aktuella data \u2013 n\u00e4r du g\u00f6r en snapshot skapar du helt enkelt en kopia av detta pekartr\u00e4d.<\/p>\n<p>N\u00e4r en skrivning \u00f6verskrivs i det aktiva filsystemet, skriver ZFS f\u00f6rst den nya versionen av blocket till oanv\u00e4ndbart utrymme. D\u00e4refter kopplar den bort den gamla versionen av blocket fr\u00e5n det aktuella filsystemet. Men om en snapshot h\u00e4nvisar till det gamla blocket f\u00f6rblir det of\u00f6r\u00e4ndrat. Det gamla blocket kommer faktiskt inte att \u00e5terst\u00e4llas som ledigt utrymme f\u00f6rr\u00e4n alla snapshots som h\u00e4nvisar till det blocket har raderats!<\/p>\n<h3>Replikation<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/647fe6cc348861b653b004640244cf88.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Mitt Steam-bibliotek \u00e5r 2015 tog 158 GiB och inkluderade 126 927 filer. Detta \u00e4r ganska n\u00e4ra den optimala situationen f\u00f6r rsync \u2013 ZFS-replikering \u00f6ver n\u00e4tverket var \"bara\" 750% snabbare.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/2849be8d2dc5c9f30f23c3bbc20e9022.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>I samma n\u00e4tverk \u00e4r replikeringen av en 40-gigabyte avbild av en virtuell Windows 7-maskin en helt annan historia. ZFS-replikeringen sker 289 g\u00e5nger snabbare \u00e4n rsync \u2013 eller 'bara' 161 g\u00e5nger snabbare om du \u00e4r tillr\u00e4ckligt kunnig f\u00f6r att anropa rsync med alternativet &#8212;inplace.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grunderna i ZFS: lagringssystem och prestanda\" src=\"\/wp-content\/uploads\/2020\/06\/9a57e4faa0eaf0f687ae24b965a1bf81.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>N\u00e4r avbildningen av den virtuella maskinen skalas, skalas rsync-problemen tillsammans med den. Storleken 1,9 TiB \u00e4r inte s\u00e5 stor f\u00f6r en modern virtuell maskin \u2013 men den \u00e4r tillr\u00e4ckligt stor f\u00f6r att ZFS-replikeringen ska vara 1148 g\u00e5nger snabbare \u00e4n rsync, \u00e4ven med rsync-argumentet &#8212;inplace.<\/i><\/p>\n<p>S\u00e5 snart du f\u00f6rst\u00e5r hur snapshots fungerar, blir det inte sv\u00e5rt att f\u00e5nga essensen av replikering. Eftersom en snapshot helt enkelt \u00e4r ett tr\u00e4d av pekare till poster, inneb\u00e4r det att om vi g\u00f6r <code>zfs send<\/code> en snapshot, s\u00e5 skickar vi b\u00e5de detta tr\u00e4d och alla relaterade poster. N\u00e4r vi \u00f6verf\u00f6r detta <code>zfs send<\/code> p\u00e5 <code>zfs receive<\/code> till det destinationselement, skriver det b\u00e5de det faktiska blockinneh\u00e5llet och tr\u00e4det av pekare som h\u00e4nvisar till blocken, i m\u00e5l datasets.<\/p>\n<p>Det blir \u00e4nnu mer intressant p\u00e5 den andra <code>zfs send<\/code>. Nu har vi tv\u00e5 system d\u00e4r var och en inneh\u00e5ller <code>poolname\/datasetname@1<\/code>, och du tar en ny snapshot <code>poolname\/datasetname@2.<\/code>D\u00e4rf\u00f6r har du i k\u00e4llpoolen <code>datasetname@1<\/code> och <code>datasetname@2<\/code>, men i m\u00e5lpoolen har vi tills vidare bara den f\u00f6rsta snapshoten. <code>datasetname@1<\/code>.<\/p>\n<p>Eftersom vi har en gemensam snapshot mellan k\u00e4llan och m\u00e5let, kan vi g\u00f6ra <code>datasetname@1<\/code>en inkrementell <i>\u00f6van dem. N\u00e4r vi s\u00e4ger till systemet<\/i> <code>zfs send<\/code> zfs send -i poolname\/datasetname@1 poolname\/datasetname@2 <code>, j\u00e4mf\u00f6r det de tv\u00e5 pekartr\u00e4den. Alla pekare som endast existerar i<\/code>, pekar uppenbarligen p\u00e5 nya block \u2013 d\u00e4rf\u00f6r beh\u00f6ver vi inneh\u00e5llet i dessa block. <code>@2<\/code>I det fj\u00e4rrsystemet \u00e4r hanteringen av den inkrementella<\/p>\n<p>lika enkel. F\u00f6rst skriver vi alla nya poster som ing\u00e5r i str\u00f6mmen <code>send<\/code> , och sedan l\u00e4gger vi till pekarna till dessa block. Voil\u00e0, vi har <code>send<\/code>i det nya systemet! <code>@2<\/code> Asynkron inkrementell replikation av ZFS \u00e4r en enorm f\u00f6rb\u00e4ttring j\u00e4mf\u00f6rt med tidigare metoder som inte bygger p\u00e5 snapshots, som rsync. I b\u00e5da fallen \u00f6verf\u00f6rs endast \u00e4ndrade data \u2013 men rsync m\u00e5ste f\u00f6rst<\/p>\n<p>fr\u00e5n disken alla data p\u00e5 b\u00e5da sidor f\u00f6r att kontrollera summan och j\u00e4mf\u00f6ra den. Till skillnad fr\u00e5n detta l\u00e4ser ZFS-replikering ingenting utom pekartavlor \u2013 och alla block som inte finns representerade i den gemensamma snapshoten. <i>l\u00e4sa<\/i> fr\u00e5n disken all data fr\u00e5n b\u00e5da sidor, f\u00f6r att kontrollera summan och j\u00e4mf\u00f6ra den. Till skillnad fr\u00e5n detta l\u00e4ser ZFS-replikering inget annat \u00e4n pekartr\u00e4d \u2013 och alla block som inte finns i den gemensamma \u00f6gonblicksbilden.<\/p>\n<h3>Inbyggd komprimering<\/h3>\n<p>\nSkrivprocessens kopieringsmekanism f\u00f6renklar ocks\u00e5 systemet med inbyggd komprimering. I ett traditionellt filsystem \u00e4r komprimering problematiskt \u2013 b\u00e5de den gamla versionen och den nya versionen av \u00e4ndrade data finns i samma utrymme.<\/p>\n<p>Om vi ser p\u00e5 ett datastycke i mitten av en fil som b\u00f6rjar sitt liv som en megabyte av nollor fr\u00e5n 0x00000000 och s\u00e5 vidare \u2013 kan det enkelt komprimeras till en sektor p\u00e5 disken. Men vad h\u00e4nder om vi ers\u00e4tter denna megabyte av nollor med en megabyte av ocompressibla data, som JPEG eller pseudorandom brus? Pl\u00f6tsligt kommer denna megabyte av data att beh\u00f6va inte en, utan 256 sektorer p\u00e5 4 KiB, medan bara en sektor \u00e4r reserverad p\u00e5 disken.<\/p>\n<p>ZFS har inget s\u00e5dant problem, eftersom de \u00e4ndrade posterna alltid skrivs till oanv\u00e4nt utrymme \u2013 den ursprungliga blocket tar bara en sektor p\u00e5 4 KiB, medan den nya posten kommer att ta 256, men det \u00e4r inget problem \u2013 det nyligen \u00e4ndrade stycket fr\u00e5n \"mitten\" av filen skulle skrivas till oanv\u00e4nt utrymme oavsett om dess storlek f\u00f6r\u00e4ndrades eller inte, s\u00e5 det \u00e4r en helt normal situation f\u00f6r ZFS.<\/p>\n<p>Inbyggd komprimering i ZFS \u00e4r avst\u00e4ngd som standard, och systemet erbjuder anslutbara algoritmer \u2013 f\u00f6r n\u00e4rvarande LZ4, gzip (1-9), LZJB och ZLE.<\/p>\n<ul>\n<li><b>LZ4<\/b> \u2013 \u00e4r en str\u00f6mmande algoritm som erbjuder extremt snabb komprimering och dekomprimering och prestandaf\u00f6rb\u00e4ttring f\u00f6r de flesta anv\u00e4ndningsfall \u2013 \u00e4ven p\u00e5 ganska l\u00e5ngsamma CPU:er.\n<\/li>\n<li><b>GZIP<\/b> \u2013 en respekterad algoritm som alla anv\u00e4ndare av Unix-system k\u00e4nner till och \u00e4lskar. Den kan implementeras med komprimeringsniv\u00e5er 1-9, d\u00e4r komprimeringsgraden och CPU-anv\u00e4ndningen \u00f6kar ju n\u00e4rmare niv\u00e5 9 man kommer. Algoritmen \u00e4r bra f\u00f6r alla textbaserade (eller andra extremt komprimerbara) anv\u00e4ndningsfall, men annars orsakar den ofta problem med CPU:en \u2013 anv\u00e4nd den med f\u00f6rsiktighet, s\u00e4rskilt p\u00e5 h\u00f6gre niv\u00e5er.\n<\/li>\n<li><b>LZJB<\/b> \u2013 den ursprungliga algoritmen i ZFS. Den \u00e4r f\u00f6r\u00e5ldrad och b\u00f6r inte l\u00e4ngre anv\u00e4ndas, LZ4 \u00f6vertr\u00e4ffar den p\u00e5 alla punkter.\n<\/li>\n<li><b>ZLE<\/b> \u2014 nollniv\u00e5kodning, Zero Level Encoding. Den p\u00e5verkar \u00f6verhuvudtaget inte normala data, men komprimerar stora sekvenser av nollor. Anv\u00e4ndbar f\u00f6r helt okomprimerade dataset (som JPEG, MP4 eller andra redan komprimerade format), eftersom den ignorerar okomprimerade data men komprimerar oanv\u00e4nt utrymme i de slutliga posterna.<\/li>\n<\/ul>\n<p>\nVi rekommenderar komprimering med LZ4 f\u00f6r n\u00e4stan alla anv\u00e4ndningsomr\u00e5den; prestandastraffet n\u00e4r man st\u00f6ter p\u00e5 okomprimerade data \u00e4r mycket litet, och <i>\u00f6kning<\/i> prestandan f\u00f6r typiska data \u00e4r betydande. Kopieringen av en virtuell maskin f\u00f6r en ny installation av Windows-operativsystemet (nyinstallerat OS, inga data inuti \u00e4nnu) med <code>compression=lz4<\/code> gick 27% snabbare \u00e4n med <code>compression=none<\/code>, i <noindex><a rel=\"nofollow\" href=\"https:\/\/jrs-s.net\/2015\/02\/24\/zfs-compression-yes-you-want-this\/\">denna testning fr\u00e5n 2015<\/a><\/noindex>.<\/p>\n<h1>ARC \u2013 adaptiv ers\u00e4ttningscache<\/h1>\n<p>\nZFS \u00e4r det enda moderna filsystem som vi k\u00e4nner till som anv\u00e4nder sin egen l\u00e4sning-cachemekanism och inte f\u00f6rlitar sig p\u00e5 operativsystemets sidcache f\u00f6r att lagra kopior av nyligen l\u00e4sta block i RAM.<\/p>\n<p>\u00c4ven om den egna cachen har sina problem \u2013 ZFS kan inte reagera p\u00e5 nya beg\u00e4rningar om minnesallokering lika snabbt som k\u00e4rnan, s\u00e5 en ny beg\u00e4ran <code>malloc()<\/code> om minnesf\u00f6rdelning kan misslyckas om den beh\u00f6ver RAM som f\u00f6r n\u00e4rvarande upptas av ARC. Men det finns starka sk\u00e4l att anv\u00e4nda den egna cachen, \u00e5tminstone just nu.<\/p>\n<p>Alla k\u00e4nda moderna operativsystem, inklusive MacOS, Windows, Linux och BSD, till\u00e4mpar LRU (Least Recently Used) algoritm f\u00f6r att implementera sidcachen. Detta \u00e4r en primitiv algoritm som flyttar det cachade blocket \"upp i k\u00f6n\" efter varje l\u00e4sning och f\u00f6rdriver block \"ner i k\u00f6n\" vid behov f\u00f6r att f\u00e5 plats f\u00f6r nya cachemissar (block som skulle ha l\u00e4sts fr\u00e5n disken ist\u00e4llet f\u00f6r fr\u00e5n cachen).<\/p>\n<p>I allm\u00e4nhet fungerar algoritmen bra, men i system med stora arbetsupps\u00e4ttningar leder LRU l\u00e4tt till thrashing \u2013 utdrivning av ofta beh\u00f6vda block f\u00f6r att frig\u00f6ra utrymme f\u00f6r block som aldrig kommer att l\u00e4sas igen fr\u00e5n cachen.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Adaptive_replacement_cache\">ARC<\/a><\/noindex>\u00a0\u2014 en betydligt mindre naiv algoritm som kan ses som en \"viktad\" cache. Efter varje l\u00e4sning av en cachelagrad block blir den lite \"tyngre\" och sv\u00e5rare att avl\u00e4gsna \u2013 och \u00e4ven efter att den har avl\u00e4gsnats kan blocket <i>sp\u00e5ras<\/i> under en viss tidsperiod. Ett block som har avl\u00e4gsnats men sedan beh\u00f6ver l\u00e4sas tillbaka till cachen kommer ocks\u00e5 att bli \"tyngre\".<\/p>\n<p>Det slutliga resultatet av allt detta \u00e4r en cache med en mycket h\u00f6gre tr\u00e4ffprocent (hit ratio) \u2013 f\u00f6rh\u00e5llandet mellan tr\u00e4ffar i cachen (l\u00e4sningar som g\u00f6rs fr\u00e5n cachen) och missar (l\u00e4sningar fr\u00e5n disken). Detta \u00e4r en extremt viktig statistik \u2013 inte bara att sj\u00e4lva tr\u00e4ffarna i cachen hanteras ordentligt snabbare, utan \u00e4ven missarna kan hanteras snabbare, eftersom ju fler tr\u00e4ffar i cachen \u2013 desto f\u00e4rre parallella f\u00f6rfr\u00e5gningar till disken och mindre f\u00f6rdr\u00f6jning f\u00f6r de kvarvarande missarna som m\u00e5ste hanteras fr\u00e5n disken.<\/p>\n<h1>Slutsats<\/h1>\n<p>\nEfter att ha studerat den grundl\u00e4ggande semantiken av ZFS \u2013 hur skrivningskopiering fungerar, samt relationerna mellan lagringspooler, virtuella enheter, block, sektorer och filer \u2013 \u00e4r vi redo att diskutera den verkliga prestandan med verkliga siffror.<\/p>\n<p>I n\u00e4sta del kommer vi att titta p\u00e5 den faktiska prestandan hos pooler med speglade vdev och RAIDz, i j\u00e4mf\u00f6relse med varandra, samt i j\u00e4mf\u00f6relse med traditionella RAID-topologier i Linux-k\u00e4rnan som vi har utforskat. <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">tidigare<\/a><\/noindex>.<\/p>\n<p>F\u00f6rst ville vi bara titta p\u00e5 grunderna \u2013 ZFS-topologierna sj\u00e4lva \u2013 men efter <i>s\u00e5 mycket<\/i> \u00e4r vi redo att diskutera mer avancerad konfigurering och justering av ZFS, inklusive anv\u00e4ndningen av hj\u00e4lptyper av vdev, s\u00e5som L2ARC, SLOG och Special Allocation.<br \/>\n<br \/>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/504692\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0432\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u0430\u0448\u0438\u0445 \u0434\u0438\u0441\u043a\u043e\u0432 \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 RAID. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043c\u044b \u0434\u0430\u0436\u0435 \u043f\u043e\u043e\u0431\u0435\u0449\u0430\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0439 \u0432 ZFS. \u042d\u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u044e\u0434\u0443: \u043e\u0442 Apple \u0434\u043e Ubuntu. \u041d\u0443 \u0447\u0442\u043e \u0436, \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u0434\u043b\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":83583,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-83582","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b ZFS: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-01T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-01T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Grunderna i ZFS: lagringssystem och prestanda | ProHoster","description":"Denna v\u00e5r har vi redan diskuterat n\u00e5gra.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b ZFS: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c | ProHoster","og:description":"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-01T17:42:21+00:00","article:modified_time":"2020-06-01T17:42:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"83582","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:14:37","updated":"2022-09-28 10:00:57","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/83582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=83582"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/83582\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/83583"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=83582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=83582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=83582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}