Top Banner

Click here to load reader

DIPLOMARBEIT - TU Wien · PDF fileZusammenfassung Diese Diplomarbeit beschreibt das Design und Implementation von LLFS, einem Linux-Dateisystem. LLFS kombiniert Clustering mit Copy-On-Write

Sep 17, 2018

ReportDownload

Documents

vuongtram

  • DIPLOMARBEIT

    LLFS

    A Copy-On-Write File System For Linux

    ausgefhrt am Institut fr ComputersprachenAbteilung fr Programmiersprachen und bersetzerbau

    der Technischen Universitt Wien

    unter Anleitung vonAo.Univ.Prof. Anton Ertl

    durch

    Rastislav LevrincKaltenbckgasse 3/41140 Wien, Austria

    Wien am May 6, 2008

  • Zusammenfassung

    Diese Diplomarbeit beschreibt das Design und Implementation von LLFS,einem Linux-Dateisystem. LLFS kombiniert Clustering mit Copy-On-Write.Copy-On-Write berschreibt belegte Blcke nicht zwischen Commits; Durchdas Clustering bleibt die LLFS-Geschwindigkeit vergleichbar mit Clustered-Dateisystemen wie Ext2. Copy-On-Write ermglicht neue Features wie zumBeispiel Snapshots, beschreibbare Snapshots (Clones) und schnelle Crash-Recovery zu einem konsistenten Dateisystem-Zustand. Gleichzeitig hilft dasClustering, die Fragmentierung niedrig und Geschwindigkeit hoch zu halten.

    Clustering wird mit Ext2-hnlichen Gruppen und Free-Blocks-Bitmapsfr das Belegen und Freigeben von Blcken erreicht. Journaling Dateisystemewie Ext3 brauchen ein Journal und schreiben Blcke doppelt. Mit Hilfe vonCopy-on-Write vermeidet LLFS diese Kosten. Aufgrund der Free-Blocks-Bitmaps braucht LLFS keinen Cleaner wie Log-Strukturierte Dateisysteme.Trotzdem bietet LLFS die kombinierte Funktionalitt von Journaling undLog-Strukturierten Dateisystemen.

    Ich habe LLFS aufbauend auf Ext2 implementiert, und ich habe die Per-formance getestet. Die Benchmarks zeigen, dass LLFS hnliche und in eini-gen Fllen bessere Resultate als Linux-Journaling-Dateisysteme erreicht.

  • Abstract

    This thesis discusses the design and implementation of LLFS, a Linux lesystem. LLFS combines clustering with copy-on-write. With copy-on-writeno allocated blocks are overwritten between commits, and thanks to the clus-tering the speed of LLFS remains comparable with clustered le systems suchas Ext2. Copy-on-write opens new possibilities for features like snapshots,writable snapshots (clones) and fast crash recovery to the consistent stateof the le system, while the clustering helps to keep fragmentation low andspeed high.

    Clustered reads and writes are achieved with Ext2-like groups and free-blocks bitmaps for allocating and freeing of blocks. Journaling le systemslike Ext3 need to keep a journal and write blocks twice; By using copy-on-write, LLFS avoids these overheads. By using free-blocks bitmaps, it does notneed a cleaner like log-structured le systems. Yet LLFS oers the combinedfunctionality of journaling and log-structured le systems.

    I have implemented LLFS starting from the Ext2 le system and testedthe performance. The benchmarks have shown that LLFS achieves similarperformance and in some cases better than Linux journaling le systems.

  • Contents

    I Design 4

    1 File Systems 51.1 File System Design Issues . . . . . . . . . . . . . . . . . . . . 5

    1.1.1 Fast Crash Recovery . . . . . . . . . . . . . . . . . . . 61.1.2 Data Consistency . . . . . . . . . . . . . . . . . . . . . 61.1.3 Undo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.1.4 Consistent Backups . . . . . . . . . . . . . . . . . . . . 71.1.5 Fragmentation . . . . . . . . . . . . . . . . . . . . . . . 81.1.6 Scalability . . . . . . . . . . . . . . . . . . . . . . . . . 8

    1.2 Clustering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3 Journaling File Systems . . . . . . . . . . . . . . . . . . . . . 91.4 Log-Structured File Systems . . . . . . . . . . . . . . . . . . . 101.5 Linux Virtual File System . . . . . . . . . . . . . . . . . . . . 11

    1.5.1 VFS Data Structures . . . . . . . . . . . . . . . . . . . 11

    2 LLFS Basic Idea 142.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2 LLFS Requirements / Goals . . . . . . . . . . . . . . . . . . . 15

    2.2.1 Fast Crash Recovery / File System Check . . . . . . . 152.2.2 Data consistency . . . . . . . . . . . . . . . . . . . . . 152.2.3 Snapshots . . . . . . . . . . . . . . . . . . . . . . . . . 152.2.4 Clones . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.2.5 Performance . . . . . . . . . . . . . . . . . . . . . . . . 162.2.6 Fragmentation . . . . . . . . . . . . . . . . . . . . . . . 162.2.7 Scalability . . . . . . . . . . . . . . . . . . . . . . . . . 172.2.8 Portability . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.3 Implementation of these Goals . . . . . . . . . . . . . . . . . . 172.3.1 Fast Crash Recovery . . . . . . . . . . . . . . . . . . . 172.3.2 Data Consistency . . . . . . . . . . . . . . . . . . . . . 172.3.3 Snapshots / Clones . . . . . . . . . . . . . . . . . . . . 172.3.4 Performance . . . . . . . . . . . . . . . . . . . . . . . . 18

    1

  • 2.3.5 Scalability . . . . . . . . . . . . . . . . . . . . . . . . . 182.3.6 Portability . . . . . . . . . . . . . . . . . . . . . . . . . 19

    3 LLFS Design 203.1 Inodes and Free Blocks Bitmaps . . . . . . . . . . . . . . . . . 203.2 Allocating Blocks . . . . . . . . . . . . . . . . . . . . . . . . . 213.3 Freeing of Blocks . . . . . . . . . . . . . . . . . . . . . . . . . 223.4 Disk Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    4 Using LLFS 244.1 Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.2 Creating an LLFS File System . . . . . . . . . . . . . . . . . . 244.3 Mounting a Clone . . . . . . . . . . . . . . . . . . . . . . . . . 24

    4.3.1 Creating a Clone . . . . . . . . . . . . . . . . . . . . . 254.3.2 Disposing of a Clone . . . . . . . . . . . . . . . . . . . 25

    II Implementation 26

    5 Implementation Details 275.1 From Ext2 to LLFS . . . . . . . . . . . . . . . . . . . . . . . . 27

    5.1.1 Implementing Meta-Data . . . . . . . . . . . . . . . . . 275.1.2 Implementing Group Descriptors . . . . . . . . . . . . 285.1.3 Implementing mkllfs . . . . . . . . . . . . . . . . . . . 295.1.4 Implementing Copy-On-Write . . . . . . . . . . . . . . 295.1.5 Implementing Indirection . . . . . . . . . . . . . . . . . 315.1.6 Implementing Clones . . . . . . . . . . . . . . . . . . . 325.1.7 Implementing Inode, Dentry and Page Cache . . . . . . 335.1.8 Implementing Block Allocation and Deallocation . . . . 34

    5.2 In-Memory and On-Disk Data Structures . . . . . . . . . . . . 355.2.1 Super Block . . . . . . . . . . . . . . . . . . . . . . . . 355.2.2 Inode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365.2.3 Group Descriptor . . . . . . . . . . . . . . . . . . . . . 37

    5.3 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375.3.1 dir.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395.3.2 namei.c . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    III Testing, Debugging and Benchmarking 42

    6 Testing and Debugging 43

    2

  • 7 LLFS Performance 457.1 Creating and Reading Small Files . . . . . . . . . . . . . . . . 457.2 Creating and Removing of Small Files . . . . . . . . . . . . . . 467.3 Creating and Reading of Large Files . . . . . . . . . . . . . . 487.4 Writing and Reading of Log-File . . . . . . . . . . . . . . . . . 497.5 Unpacking, Compiling, Removing Kernel . . . . . . . . . . . . 497.6 Snapshot / Clone Performance . . . . . . . . . . . . . . . . . . 517.7 Multiple Clones Performance . . . . . . . . . . . . . . . . . . . 537.8 Performance Test with Bonnie . . . . . . . . . . . . . . . . . . 547.9 Performance Conclusions . . . . . . . . . . . . . . . . . . . . . 55

    8 Related Work 578.1 Beating the I/O Bottleneck . . . . . . . . . . . . . . . . . . . 57

    8.1.1 Technology Shift . . . . . . . . . . . . . . . . . . . . . 578.1.2 Solutions to the I/O Bottleneck Problem . . . . . . . . 578.1.3 A Log-Structured File System . . . . . . . . . . . . . . 58

    8.2 Log-Structured File System Projects . . . . . . . . . . . . . . 598.2.1 Sprite-LFS . . . . . . . . . . . . . . . . . . . . . . . . . 598.2.2 BSD-LFS . . . . . . . . . . . . . . . . . . . . . . . . . 618.2.3 Linlog FS . . . . . . . . . . . . . . . . . . . . . . . . . 63

    8.3 Linux File Systems . . . . . . . . . . . . . . . . . . . . . . . . 638.3.1 Ext2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648.3.2 Ext3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648.3.3 ReiserFS . . . . . . . . . . . . . . . . . . . . . . . . . . 648.3.4 XFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    9 Further Work 66

    10 Conclusions 67

    Bibliography 68

    3

  • Part I

    Design

    4

  • Chapter 1

    File Systems

    A le system is a part of an operating system that takes care of storing andreading data on the storage device such as a hard drive or CD-ROM. Froma user perspective, data are organized as a collection of les. Files are notonly text les, but also images, executable programs and so on. Anotherimportant abstraction in a le system is a directory. A directory can holdnot only les but yet another directory called a sub directory that allows toorganize les in a tree structure. Thanks to this it is possible to create ahierarchy of directories containing related les. A le system also providesmeans to create, move and delete les and directories, change permission whocan read or modify these les and provides information about a le such asits length and creation time.

    Another task for a le system is to optimize reading and writing of les.Data are stored on a disk in units of blocks, and it is desirable that blocksbelonging to one le and some other related blocks are not scattered aroundthe disk, because reading of adjacent blocks is much faster than readingblocks on dierent parts of the disk divided by holes. Skipping the holesinvolves seek times, and the seek times are bad for performance with thecurrent hard drive technology. A typical seek time on a normal hard disk