Institutionen för Datavetenskap Department of Computer Science BTRfs: Nästa generations filsystem för Linux Rapport utfört i EDT621 Datorarkitekturer med operativsystem vid Lunds Tekniska Högskola vid Lunds universitet av Johan Byrlén Innehållsförteckning 1. 2. 3. 4. Sammanfattning ..................................................................................... 3 Introduktion ........................................................................................... 3 B+ träd .................................................................................................. 4 Funktioner .............................................................................................. 5 4.1 4.2 4.3 4.4 Copy-on-write .................................................................................... 5 Snapshots .......................................................................................... 5 Kryptering ......................................................................................... 5 Komprimering .................................................................................... 6 5. Jämförelse med Ext4 ............................................................................... 6 6. Slutsats ................................................................................................. 8 Referenser ................................................................................................. 9 2 1. Sammanfattning Rapporten behandlar dem fundamentalla funktionerna i filsystemet Btrfs så som Copy-on-write, snapshots, kryptering och komprimering. Datastrukten B+ träd ligger som grund för hela filsystemet och därför fördjupar rapporten sig i det och förklarar varför det passar bra in i ett filsystem som Btrfs. Sist görs en sammanfattning mellan Btrfs och Ext4 där slutsatsen blir att Ext4 är det mest optimala valet för dagligt bruk pågrund av prestandan och stabiliteten, men Btrfs är på uppgång och det kan därför konkluderas att Btrfs kan tänkas bli något stort i den närmsta framtiden. 2. Introduktion Syftet med den här rapporten är att beskriva filsystemet Btrfs och därefter göra en mindre jämförelse med det filsystem som för tillfälligt är mest populär bland Linux distributioner, Ext4. Btrfs är nästa generations filsystem som är baserat på datastrukturen B+ träd och utformat specifikt för Linux. Utvecklingen av Btrfs startades 2007 av Chris Mason där han kombinerade idéer från ReiserFS tillsammans med copy-on-write vänliga datastrukturen B-tree. Idag har projektet många utvecklare, där till ett flertal kommersiella företag som Facebook, Intel, Linux Foundation, Oracle samt Red Hat (Btrfs Contributors 2015) och det är påväg att bli ett standard filsystem för Linux. Filsystemet ska lösa skalbarheten för större och snabbare lagring, samt utöver det lägga till funktioner som befintliga Linux filsystem saknar idag. Rapporten kommer att bearbeta och fördjupa sig i designen, arkitekturen samt de funktioner som gör att filsystemet skiljer sig som mest mot Ext4. Funktionerna som kommer få störst fokus i denna rapport är snapshots, copy-on-write, kryptering och komprimering. Därefter kommer även en prestandajämförelse att göras under varierande arbetsvillkor i samma hårdvaramiljö. Rapporten kommer framförallt att fokusera på s.k. skrivbordsklienter men även gå in lite kort på fördelar och nackdelar med att använda nämnda filsystem i en servermiljö. 3 3. B+ träd Figur 1: Ett exmpel på ett B+ träd där nycklar numrerat 1 till 7 är länkade till datan d1 till d7. Dem röda rutorna visar på den länkade strukturen (lista) som tillåter in-order traversering (vilket är en skillnad i jämförelse med ett vanligt B-träd) (Wikipedia, B+ tree 2015). Datastrukturen B+ träd står som grund i Btrfs och är ett balanserat sökträd där all data är lagrat i trädets “lövnoder”. B+ träd är en väldigt effektiv datastruktur i block-baserad lagring då man får en stor utbredning och ett lågt djup i jämförelse med andra sökträd som B-träd. Större utbredning och lägre djup leder till att du kan läsa in mindre antal datablock från lagringsenheten samt att mindre I/O operationer behövs för att hitta ett element i sökträdet. Modifiering av ett B+ träd i Btrfs sker med hjälp av funktionen copy-on-write, vilket betyder att när ett block ska ändras så skrivs datan över till ett nytt block istället för att modifiera det nuvarande blocket, vilket är mycket användbart vid t.ex en datorkrasch som sker samtidigt som skrivning görs till lagringsenheten och gör det därför lätt att reparera lagringsmediet i efterhand utan att bli av med information (Wikipedia, Btrfs 2015). Fördelen med att använda sig av B+ träd i jämförelse med vanliga B-träd är att B+ träd inte har någon data associerad med dess inre noder, det leder till att flera nycklar kan få plats i minnet och cache missar blir därför mindre vanligt när den hämtar data från lövnoderna. En annan fördel med B+ är att som Figur 1 visar, så är lövnoderna länkade med varandra i en lista, vilket leder till att en sökning av ett objekt eller data sker linjärt bland lövnoderna istället för att behöva traversera igenom varje nivå av sökträden som krävs att göras i ett vanligt B-träd. Således, blir det inte bara en långsammare sökning, utan det kommer även resultera i flera cache missar. 4 4. Funktioner 4.1 Copy-on-write Copy-on-write (“kopiera vid skrivning”) är en optimeringsstrategi som används i moderna filsystem (bl.a i Btrfs) för att förse systemet med metadata och datakonsistens med hjälp av transaktions semantik samt billiga och omedelbara backups med hjälp av snapshots och kloner (Wikipedia, Copy-on-write 2015). En fördel med att använda copy-on-write är att den bara skriver datan till lagringsenheten en gång, om du därefter skapar en identisk kopia av datan eller filen så pekar dem båda identiska filerna till samma källa, det är bara när du gör en modifiering till filen som den skriver över datan till en annan plats (Sakis Kasampalis 2010). Det sparar på lagringsutrymme och leder således till mindre I/O operationer för ditt minne vilket är bra för flash baserat minne som har en livslängd beroende på antal skrivningar. 4.2 Snapshots Ett snapshot är tillståndet för ett system, fil eller allmänt data vid en viss tidpunkt. Det finns olika typer av snapshots som kan vara låsta för endast läsning (skrivskyddad) men det finns även dem som går att modifiera och skriva över och dem kallas för en klon (Rodeh, Bacik, Mason 2013). Snapshots är väldigt användbara vid t.ex data reperation, online data skydd, ångra operationer i filsystemet, testa nya installationer och konfigurationer, backups m.m. Ett sätt att se på det är att snapshots är väldigt billiga backups, det går väldigt snabbt och tar inte mycket minnesutrymme. Dagliga backups kan komma att vara väldigt bra att ha till hands vid vissa situationer då man råkar ta bort eller modifiera viktig data, men det är inte något som görs ofta av vanliga användare eftersom det vanligtvis är väldigt tidskrävande. Därför anses snabba, billiga och automatiska snapshots vara en bra lösning att ha integrerat i sitt filsystem. 4.3 Kryptering Huvudansvarig utvecklare och grundare av Btrfs Chris Mason har sagt att integrerad kryptering i Btrfs är plannerad men ännu inte implementerad. Under tiden som den integrerade krypteringen implementeras så rekommenderas det (Btrfs Encryption 2015) att man använder sig av alternativ som dm-crypt/LUKS på den underliggande enheten och därefter skapar Btrfs ovanpå det lagret, men viktigt att notera är att det endast anses som stabilt för Linux 3.2 eller senare (Btrfs Development 2012). 5 4.4 Komprimering Idag har Btrfs inbyggd support för två komprimeringsalgoritmer, ZLIB och LZO. Komprimeringen sker på filnivå, ej i block. Därför tillåts du att välja vilken typ av komprimeringsalgoritm du vill använda i ditt filsystemet, beroende på vilka filer du har. Eftersom dagens processorer är betydligt snabbare i proportion till datorns minne, så kan det vara användbart att just komprimera datan för att öka den effektiva kapaciteten och minska antal I/O operationer och således prestandan för minnets I/O. I Btrfs tillåts du även använda en blandning av ZLIB, ZLO och okomprimerat. ZLIB: Långsam komprimering men ger högre komprimerings ratio. ZLIB är en av dem vanligaste komprimeringsalgoritmerna bland standard dokument, där flera applikationer använder sig av det både direkt och indirekt. Mjukvara som Apache HTTP Server, FFmpeg, dpkg, rsync, Linux kärnan, Git m.m använder sig av ZLIB (ZLIB 2015). LZO: Snabbare komprimering men lägre komprimerings ratio. Det är en s.k lossless (“felfri komprimering” alt. “Icke-förstörande komprimering”) komprimeringsalgoritm som fokuserar på snabb dekompression (Oberhumer 2015). 5. Jämförelse med Ext4 Citat av EXT4’s huvudansvariga utvecklare Theodore Ts’o “[Btrfs is the better direction], it offers improvements in scalability, reliability, and ease of management.” (Ars Technica 2009). I figur 2 visas resultaten av ett test mellan Btrfs och Ext4 som är gjort av Ohad Rodeh, Josef Bacik och Chris Mason. Hårdvaran som användes är en single-socket 3.2 GHz quad core x86 processor med 8GB av RAM och en SATA hårddisk kopplat med en länk för stöd upp till 6GB/s. Linux kärnan som användes var 3.4. Testet utformades på det sättet att dem gjorde en ‘make’ operation (dvs. kompilation) på Linux kärnan där åtta stycken parallella trådar används för att kompilera C koden och länka det med kompilatorn gcc. 6 Figur 2 Figurerna ovan visar en jämförelse i genomströmning, antal sökningar samt I/O operationer. Btrfs har en mindre men noterbar genomströmning i jämförelse med Ext4. Antal sökningar per sekund är ytterst jämnt, men Btrfs gör lite mindre genomsnittliga sökningar per sekund. Den andra bilden visar att Btrfs gör väldigt många sökningar per sekund i början och det ser ut att bero på att funktionen copy-on-write som bara används i Btrfs studsar mellan olika blockgrupper just i början (Rodeh, Bacik, Mason 2013). 7 6. Slutsats Som det ser ut just nu är Ext4 det smartaste valet pågrund av en större utredning, bekvämlighet, stabilitet och bättre prestanda vid filöverföringar. Ext4 har support för logiska volymer på upp till 1 exabyte och en filstorlek på upp till 16 terabyte (Wikipedia, Ext4 2015) vilket är mer än tillräckligt för en normal användare, även så för de flesta servermiljöer. Därför kan jag inte se en markant skillnad på hur lagringskapacitet spelar en större roll under val av filsystem i praktiken, även om fallet är så att Btrfs har support för 16 exabyte istället för 1 exabyte i ext4. Även om ext4 kan nå högre överföringshastigheter vilket är en viktig jämförelse att se till som betyder mycket i praktiken, så är det inte allt. Det finns andra viktiga aspekter till ett bra filsystem och man kan därför inte bara se till filöverföringar. Btrfs har mer avancerade funktioner som copy-on-write, omfattande felkontroll, deduplikation, snapshots, automatisk reperering av data samt andra förbättringar för att säkerställa en bättre dataintegritet. Det är viktigt att förstå att Btrfs inte är en färdigt produkt utan att det är ett pågående arbete. Funktioner, prestanda förbättringar och diverse buggfixar sker kontinuerligt vid varje uppdatering av Linux kärnan. Btrfs måste ses som ett mycket lovande alternativ men det återstår trots allt en hel del som måste genomföras och åtgärdas till det på allvar kommer bli betraktat som ett våra vanligaste och mest använda filsystem. Därför går valet idag till Ext4, men det är som sagt definitivt värt att hålla ögonen öppna för Btrfs under dem närmsta åren. 8 Referenser 1. RODEH, O, BACIK, J, & MASON, C 2013, 'BTRFS: The Linux B-Tree Filesystem', ACM Transactions On Storage, 9, 3, p. 1, Publisher Provided Full Text Searching File, EBSCOhost, viewed 3 December 2015. 2. Sakis Kasampalis (2010). 'Copy On Write Based File Systems Performance Analysis And Implementation'. Denmark: Kongens Lyngby. p19-21. 3. Wikipedia. (2015). B+ tree. Available: https://en.wikipedia.org/wiki/B%2B_tree. Last accessed 3rd Dec 2015. 4. Wikipedia. (2015). Btrfs. Available: https://en.wikipedia.org/wiki/Btrfs. Last accessed 3rd Dec 2015. 5. Wikipedia. (2015). Copy-on-write. Available: https://en.wikipedia.org/wiki/Copy-on-write. Last accessed 3rd Dec 2015. 6. Wikipedia. (2015). Ext4. Available: https://en.wikipedia.org/wiki/Ext4. Last accessed 3rd Dec 2015. 7. Linux Foundation (2009). B+ tree. Available: http://www.linuxfoundation.org/newsmedia/blogs/browse/2009/06/conversation-chris-mason-btrfs-nextgeneration-file-system-linux. Last accessed 3rd Dec 2015. 8. Btrfs Contributors. (2015). Btrfs. Available: https://btrfs.wiki.kernel.org/index.php/Contributors. Last accessed 3rd Dec 2015. 9. Btrfs Development. (2012). Btrfs. Available: http://permalink.gmane.org/gmane.comp.file-systems.btrfs/15564 Last accessed 3rd Dec 2015. 10. Oberhumer. (2015). LZO. Available: http://www.oberhumer.com/opensource/lzo/ Last accessed 3rd Dec 2015. 11. ZLIB. (2015). ZLIB. Available: http://zlib.net/ Last accessed 3rd Dec 2015. 12. Ars Technica. (2009). Linux Collaboration Summit. Available: http://arstechnica.com/information-technology/2009/04/linuxcollaboration-summit-the-kernel-panel/ Last accessed 3rd Dec 2015. 9 13. Btrfs Encryption. (2015). Btrfs. Available: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_encryptio n.3F Last accessed 3rd Dec 2015. 10