Institutionen för Datavetenskap - Eit.lth.se

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