An Introduction to the Implementation of ZFS by Kirk McKusick

11

Click here to load reader

Transcript of An Introduction to the Implementation of ZFS by Kirk McKusick

Page 1: An Introduction to the Implementation of ZFS by Kirk McKusick

An Introduction to theImplementation of ZFS

Brought to you by

Dr. Marshall Kirk McKusick

European BSD Conference 201427th September 2014

InterExpo Congress CenterSofia, Bulgaria

Copyright 2014 Marshall Kirk McKusick.All Rights Reserved.

Page 2: An Introduction to the Implementation of ZFS by Kirk McKusick

Zettabyte Filesystem Overview

• Nev er over-write an existing block

• Filesystem is always consistent

• State atomically advances at checkpoints

• Snapshots (read-only) and clones (read-write) are cheap and plentiful

• Metadata redundancy and data checksums

• Selective data compression anddeduplication

• Pooled storage shared among filesystems

• Mirroring and single, double, and tripleparity RAIDZ

• Space management with quotas andreservations

• Fast remote replication and backups

Page 3: An Introduction to the Implementation of ZFS by Kirk McKusick

Structural Organization

Object Set layer

snapshot filesys space map

dir file symlink file

uberblock

object set

object set

user data

dir

• • •

• • •

zvol clone

master

master

Meta-Object Set layer

• Uberblock anchors the pool

• Meta-object-set (MOS) describes array offilesystems, clones, snapshots, and ZVOLs

• Each MOS object references an object-setthat describes its objects

• Filesystem object sets describe an array offiles, directories, etc.

• Each filesystem object describes an arrayof bytes

Page 4: An Introduction to the Implementation of ZFS by Kirk McKusick

ZFS Block Pointer

F

E

D

C

B

A

9

8

7

6

5

4

3

2

1

0

64 56 48 40 32 24 16 8 0

asizevdev1

asizevdev2

offset2

asizevdev3

offset3

logical birth time

fill count

checksum[0]

checksum[1]

checksum[2]

checksum[3]

spare

G

G

grid

grid

grid

G

spare

psize lsizecomp

offset1

cksum

physical birth time

typelvlBDX

• Up to three levels of redundancy

• Checksum separate from data

• Birth time is the transaction-group numberin which it was allocated

• Maintains allocated, physical(compressed), and logical sizes

Page 5: An Introduction to the Implementation of ZFS by Kirk McKusick

ZFS Block Management

• Disk blocks are kept in a pool

• Multiple filesystems and their snapshotsare held in the pool

• Blocks from the pool are given tofilesystems on demand and reclaimed tothe pool when freed

• Space may be reserved to ensure futureavailability

• Quotas may be imposed to limit the spacethat may be used

Page 6: An Introduction to the Implementation of ZFS by Kirk McKusick

ZFS Structure

snapshot

dnode dnode dnode• • • dnode

dnode dnode dnode• • • dnode

ZIL

ZIL

ZIL

ZIL

dnode

objset

filesystem

datafile

datafile

uberblock

master

dnode

masternodenode

node

MOS layer

Object-setlayer

nodemaster

dnode dnode dnode dnode

groupuserquota quota

space map

master

disk data

dnode dnode

objset

dnodednode

dsl_dataset

dnode dnode dnode dnode

dsl_dirdsl_dirdsl_dataset dsl_dataset

dnode• • •

or clonefilesystem

objset objset

ZVOL

• MOS layer manages space and objectsusing that space

• Object-set layer manages filesystems,snapshots, clones, and ZVOLs

Page 7: An Introduction to the Implementation of ZFS by Kirk McKusick

ZFS Checkpoint

• Collect all updates in memory

• Periodically write all changes to an unusedlocation to create a checkpoint

• Last step in checkpoint writes a newuberblock

• Entire pool is always consistent

• Checkpoint affects all filesystems, clones,snapshots, and ZVOL in the pool

• Need to log any changes betweencheckpoints that need to be persistent

• Thefsyncsystem call is implemented byforcing a log write not by doing acheckpoint

• Recovery starts from last checkpoint, rollsforward through log, then creates newcheckpoint

Page 8: An Introduction to the Implementation of ZFS by Kirk McKusick

Flushing Dirty Data

3

snapshot space map

dir symlink file

uberblock

object set

object set

user data

dir

• • •

• • •

zvol clone

master

master

Meta-Object Set layer

Object Set layer

step 2

file

filesys

step 9

step 8

step 5

step 4

step 1

6

step 7

Write modified data in this order:

1) new or modified user data

2) indirect blocks to new user data

3) new dnode block

4) indirect blocks to modified dnodes

5) object-set dnode for filesystem dnodes

6) filesystem dnode to reference objset dnode

7) indirect blocks to modified meta-objects

8) MOS object-set for meta-object dnode

9) new uberblock (plus its copies)

Page 9: An Introduction to the Implementation of ZFS by Kirk McKusick

ZFS Strengths

• High write throughput

• Fast RAIDZ reconstruction on pools withless than 40% utilization

• Avoids RAID "write hole"

• Blocks move between filesystems asneeded

• Integration eases administration (mountpoints, exports, etc)

Page 10: An Introduction to the Implementation of ZFS by Kirk McKusick

ZFS Weaknesses

• Slowly written files scattered on disk

• Slow RAIDZ reconstruction on pools withgreater than 40% utilization

• Block cache must fit in the kernel’saddress space, thus works well only on64-bit systems

• Needs under 75% utilization for goodwrite performance

• RAIDZ has high overhead for small blocksizes such as 4 Kbyte blocks typicallyused by databases and ZVOLs.

• Blocks cached in memory are not part ofthe unified memory cache so inefficient forfiles and executables usingmmap or whenusingsendfile

Page 11: An Introduction to the Implementation of ZFS by Kirk McKusick

Questions

More on ZFS:

• ‘‘The Design and Implementation of theFreeBSD Operating System, 2nd Edition’’,Chapter 10

• Manual pages: zfs(8), zpool(8), zdb(8)

Marshall Kirk McKusick

<[email protected]>

http://www.mckusick.com