JM2L
Updateon filesystems forflashstorage
MichaelOpdenacker. FreeElectrons http://freeelectrons.com/
1
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Contents
Introduction Availableflashfilesystems Ourbenchmarks Bestchoices Experimentalfilesystems Adviceforflashbasedblockdevices
2
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Updateonfilesystemsforflashstorage
Introduction
3
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Flashstorage
Wearetalkingaboutflashchips,accessedbytheLinux kernelasMemoryTechnologydevices. CompactFlash,MMC/SD,MemoryStickcards,together withUSBflashdrivesandSolidStateDrives(SSD), areinterfacedasblockstorage,likeregularharddisks. Attheend,wewillsayafewwords aboutdealingwiththesecondcategory.
4
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Existingsolutions
Forthelastyears,only2filesystemchoicesforflashstorage jffs2 Wearleveling,ECC Powerdownresistant Compression Hugemounttimes Ratherbigmemoryusage Mainstreamsupport yaffs2 Wearleveling,ECC Powerdownresistant Nocompression Veryquickmounttime ProgrammedbyWookies (atleast1) AvailableasaLinuxpatch. 2solutions,butfarfrombeingperfect!
5
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Electiontime!
Atlast,newchoiceshavebeendeveloped. LogFS NewfilesystemforMTD storage UBI Newlayermanagingerase blocksandwearleveling UBIFS Newfilesystemtaking advantageofUBI's capabilities AXFS AdvancedXIPFileSystem
6
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Howdotheycompare toexistingsolutions? Mountingtime Accessspeed Memoryusage CPUusage Size?
Testhardware
CalaoSystemsUSBA9263 AT91SAM9263ARMCPU 64MBRAM 256MBflash 2USB2.0host 1USBdevice 100MbitEthernetport PoweredbyUSB! SerialandJTAGthrough thisUSBport. Multipleextensionboards. 162EUR SupportedbyLinux2.6.27!
7
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Flashchips
NANDdevice:ManufacturerID:0xec,ChipID:0xda (SamsungNAND256MiB3,3V8bit)
Samsung'sreference:K4S561632HUC75
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Updateonfilesystemsforflashstorage
Availableflashfilesystems
9
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
TheMTDAPI
ALinuxkernelAPItoaccessMemoryTechnologyDevices AbstractsthespecificsofMTDdevices:eraseblocks,pagesize... Linuxfilesysteminterface MTDUsermodules
jffs2 yaffs2 Chardevice Readonlyblockdevice Blockdevice
MTDChipdrivers
CFIflash NANDflash DiskOnChipflash
RAMchips ROMchips
Memorydeviceshardware
10
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
MTDHowtouse
Creatingthedevicenodes Chardevicefiles mknod/dev/mtd0c900(badidea!!!) mknod/dev/mtd1c902(Caution!) mknod/dev/mtd2c904(Caution) Blockdevicefiles mknod/dev/mtdblock0b310(badidea!!!) mknod/dev/mtdblock0b312 mknod/dev/mtdblock0b312
11
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
jffs2
Today'sstandardfilesystemforMTDflash Nicefeatures:
Ontheflycompression.Savesstoragespace andreducesI/O. Powerdownreliable. Implementswearleveling
Standardfile API JFFS2 filesystem MTDdriver
Drawbacks:doesn'tscalewell
Mounttimedependingonfilesystemsize: thekernelhastoscanthewholefilesystemat mounttime,toreadwhichblockbelongsto eachfile. KeepingthisinformationinRAMismemory hungrytoo.
Flashchip
12
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Newjffs2features
CONFIG_JFFS2_SUMMARY Reducesboottimebystoringsummaryinformation. Newjffs2compressionoptions:
Nowsupportslzocompression,andnotonlyzlib (andalsothertimeandrubincompressors) Cantryallcompressorsandkeep theonegivingthebestresults Canalsogivepreferencetolzo,totheexpenseofsize, becauselzohasthefastestdecompressiontimes.
13
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
jffs2Howtouse
Compilemtdtoolsifneeded: gitclonegit://git.infradead.org/mtdutils.git Eraseandformatapartitionwithjffs2: flash_eraseallj/dev/mtd2 Mountthepartition: mounttjffs2/dev/mtdblock2/mnt/flash Fillthecontentsbywriting Or,useanimage: nandwritep/dev/mtd2rootfs.jffs2
14
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
yaffs2
http://www.yaffs.net/ SupportsbothNANDandNORflash Nocompression Wearleveling,ECC,powerfailureresistant Fastboottime CodeavailableseparatelythroughCVS (DualGPL/Proprietarylicense fornonLinuxoperatingsystems) YAFFS2 filesystem MTDdriver Standardfile API
Flashchip
15
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
yaffs2Howtouse
Eraseapartition: flash_eraseall/dev/mtd2 Formatthepartition: sleep(any command can do!) Mountthepartition: mounttyaffs2/dev/mtdblock2/mnt/flash
16
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
UBI
UnsortedBlockImages http://www.linuxmtd.infradead.org/doc/ubi.html VolumemanagementsystemontopofMTDdevices. Allowstocreatemultiplelogicalvolumes andspreadwritesacrossallphysicalblocks. Takescareofmanagingtheeraseblocksandwearleveling. Makesfilesystemeasiertoimplement.
UBI Logical EraseBlocks MTD Physical EraseBlocks Volume1 Volume2
LEB
LEB
LEB
LEB
LEB
LEB
LEB
PEB PEB PEB PEB PEB PEB PEB PEB PEB
Freeblock Freeblock 17
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
UBIHowtouse(1)
First,eraseyourpartition(NEVERFORGET!) flash_eraseall/dev/mtd1 First,formatyourpartition: ubiformat/dev/mtd1s512 (possibletosetaninitialerasecountervalue) Seehttp://www.linuxmtd.infradead.org/faq/ubi.htmlifyoufaceproblems Needtocreatea/dev/ubi_crtldevice(ifyoudon'thaveudev) Majorandminornumberallocatedinthekernel.Findthesenumbersin /sys/class/misc/ubi_ctrl/dev/(e.g.:10:63) Orrunubinfo: UBIversion:1 CountofUBIdevices:1 UBIcontroldevicemajor/minor:10:63 PresentUBIdevices:ubi0
18
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
UBIHowtouse(2)
AttachUBItoone(ofseveral)oftheMTDpartitions: ubiattach/dev/ubi_ctrlm1 FindthemajorandminornumbersusedbyUBI: cat/sys/class/ubi/ubi0/dev(e.g.253:0) CreatetheUBIdevicefile: mknod/dev/ubi0c2530
19
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
UBIFS
http://www.linuxmtd.infradead.org/doc/ubifs.html Thenextgenerationofthejffs2filesystem, fromthesamelinuxmtddevelopers. AvailableinLinux2.6.27 WorksontopofUBIvolumes UBI MTDdriver Standardfile API UBIFS
Flashchip
20
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
UBIFSHowtouse
Creating ubimkvol/dev/ubi0Ntests116MiB mounttubifsubi0:test/mnt/flash Deleting umount/mnt/flash ubirmvol/dev/ubi0Ntest DetachtheMTDpartition: ubidetach/dev/ubi_ctrlm1
21
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
LogFS
http://logfs.org/logfs/ Alsodevelopedasareplacementforjffs2 Weannouncedwewouldcoverit,butitslatestversiononly supports2.6.25.Ourboardonlysupports2.6.21,2.6.27and beyond,andthe2.6.25LogFSpatchdoesn'tcompilein 2.6.27! Anyway,LogFSisnotreadyyetforproduction. Williteverbe,nowthatjffs2hasavaluablereplacement? Competitionisusefulthough.
22
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
AXFS
AdvancedXIPFileSystemforLinux http://axfs.sourceforge.net/ Allowstoexecutecodedirectlyfromflash, insteadofcopyingittomemory. AsXIPisnotpossiblewithNANDflash,worksbestwhen thereisamixofNORflash(forcode)andNAND(fornon XIPsections). Currentlypostedforreview/inclusioninthemainstream Linuxkernel.Tobeacceptedin2.6.29orlater? Notbenchmarkedhere.WeonlyhaveNANDflashanyway.
23
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
SquashFS
http://squashfs.sourceforge.net/ Filesystemforblockstorage!? Butreadonly!Noproblemwithmanagingeraseblocksand wearleveling.Finetousewiththemtdblockdriver. Youcanuseitforthereadonlysectionsinyourfilesystem. Activelymaintained.Releasesformanykernelversions (recentandold).
24
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
SquashFSHowtouse
Verysimple! Onyourworkstation,createyourfilesystemimage (example:120m/directoryinourbenchmarks) mfsquashfs120m120m.sqfs Eraseyourflashpartition: flash_eraseall/dev/mtd2 Makeyourfilesystemimageavailabletoyourdevice(NFS, copy,etc.)andflashyourpartition: ddif=120m.sqfsof=/dev/mtdblock2 Mountyourfilesystem: mounttsquashfs/dev/mtdblock2/mnt/flash
25
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Updateonfilesystemsforflashstorage
Benchmarks
26
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Benchmarkoverview
Comparedfilesystems: jffs2,defaultoptions jffs2,lzocompressiononly yaffs2 ubifs,defaultoptions ubifs,nocompression squashfs DifferentMTDpartitions 8M 32M 120M Correspondingtomost embeddeddevicescenarios. Partitionsfilledatabout85%
AlltestedwithLinux2.6.27.
27
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Readandmountingexperiments
MountinganarmLinuxrootfilesystem, takenfromtheOpenMokoproject. Advantages:mainlycontainscompressiblefiles (executablesandsharedlibraries). Representsaveryimportantscenario:bootingona filesysteminflash.Mountingandfileaccesstimearemajor componentsofsystemboottime.
28
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Mounttime(seconds)
ubifsnoz/8M:doesn'tfit
18 16
14
12
10 jffs2 jffs2-lzo yaffs2 ubifs ubi-noz squashfs
0 8M 32M 120M
29
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
ZoomMounttime(seconds)8M
ubifsnoz/8M:doesn'tfit
1.4
1.2
0.8 jffs2 jffs2-lzo yaffs2 ubifs ubi-noz squashfs
0.6
0.4
0.2
0 8M
30
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Memoryconsumptionaftermounting(KB)
Freememorymeasuredwith/proc/meminfo: MemFree+Buffers+Cached
1400
Nomistake. Proportional tofssize?
1200
1000
800
600
jffs2 jffs2-lzo yaffs2 ubifs ubi-noz squashfs
400
200
0 8M 32M 120M
31
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Usedspace(MB)
Measuredwithdf AddsomespaceforUBIFS! 1MBfor8MB
120
100
80
60
jffs2 jffs2-lzo yaffs2 ubifs ubifs-noz squashfs
40
20
0 8M 32M 120M
32
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Readtime(seconds)
140
120
100
80 jffs2 jffs2-lzo yaffs2 ubifs ubifs-noz squashfs
60
40
20
0 8M 32M 120M
33
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
ZoomReadtime(seconds)8M
8
jffs2 jffs2-lzo yaffs2 ubifs ubifs-noz squashfs
0 8M
34
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
CPUusageduringread(seconds)
Duringtheexperimentsinthepreviousslide (usingthesysmeasurefromthetimecommand)
120
100
80
60
jffs2 jffs2-lzo yaffs2 ubifs ubifs-noz squashfs
40
20
0 8M 32M 120M
35
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Fileremovaltime(seconds)
Removingallthefilesinthepartition (afterthereadexperiment)
45
40
35
30
25 jffs2 jffs2-lzo yaffs2 ubifs ubifs-noz
20
15
10
0 8M 32M 120M
36
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Writeexperiment
Writing8Mdirectorycontentsmultipletimes (lessinthe8Mcase) Datacopiedfromatmpfsfilesystem, fornooverheadreadingthefiles. Contents:armLinuxrootfilesystem. Smalltomediumsizefiles,mainlyexecutablesandshared libraries. Notmanyfilesthatcan'tbecompressed.
37
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Writetime(seconds)
yaffs2/8M32M120M:doesn'tfit ubifsnoz/8M:doesn'tfit
300
250
200
150
jffs2 jffs2-lzo yaffs2 ubifs ubifs-noz
100
50
0 8M 32M 120M
38
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
ZoomWritetime(seconds)8M
yaffs2/8M:doesn'tfit ubifsnoz/8M:doesn'tfit
18
16
14
12
10 jffs2 jffs2-lzo yaffs2 ubifs ubifs-noz
0 8M
39
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
CPUusageduringwrite(seconds)
Duringtheexperimentsinthepreviousslide (usingthesysmeasurefromthetimecommand)
300
250
200
150
jffs2 jffs2-lzo yaffs2 ubifs ubifs-noz
100
50
0 8M 32M 120M
40
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Randomwriteexperiment
Writing1MBchunksofrandomdata (copiedfrom/dev/urandom). Tryingtomimicthebehaviorofdigitalcamerasand camcorders,recordingalreadycompresseddata.
41
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Randomwritetime(seconds)
Caution:includesCPUtimegeneratingrandomnumbers!
1000
900
800
700
600
500
400
jffs2 jffs2-lzo yaffs2 ubifs ubifs-noz
300
200
100
0 5M 27M 105M
42
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
ZoomRandomwritetime(seconds)8M
Caution:includesCPUtimegeneratingrandomnumbers!
40
35
30
25
20
jffs2 jffs2-lzo yaffs2 ubifs ubifs-noz
15
10
0 5M
43
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Otherexperiments
UBIFSwithonlylzosupport UBIFSsupportsbothlzo(fastertocompressand uncompress)andzlib(slower,butcompressesbetter),and triestofindthebestspeed/sizecompromise. WetriedUBIFSwithonlylzosupport,hopingthathaving onlyonecompressorwouldreduceruntime. Results:tinydifferencesinallbenchmarks,eveninCPU usage.(roughlybetween0.1and1%). Conclusion:don'ttrytobetoosmart. Thefilesystemisalreadyfinetuned toworkgreatinmostcases.
44
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Suitabilityforverysmallpartitions
8MMTDpartition jffs2fits13MBoffiles Butprobablydoesn'tleave enoughfreeblocks UBIconsumes0.9MB ubifsfits6.6MBoffiles 4MMTDpartition jffs2fits5.1MBoffiles UBIconsumes0.8MB ubifsfitsonly1.6MBof files!
Biggersizes:UBIoverheadcanbeneglected: 32MB:consumes1.2MB 128MB:consumes3.6MB
45
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Whatweobserved
jffs2 Dramaticallyoutperformedby ubifsinmostaspects. Hugemount/boottime. yaffs2 Alsooutperformedbyubifs. Maynotfitallyourdata Uglyfileremovaltime (poordirectoryupdate performance?) Memoryusagenotscaling ubifsleavesnoreason tosticktoyaffs2.
46
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
ubifs Greatperformanceinall cornercases. SquashFS Bestornearbest performance inallreadonlyscenarios.
Conclusions
Convertyourjffs2partitionstoubifs! Itmayonlymakesensetokeepjffs2 forMTDpartitionssmallerthan10MB, incasesizeiscritical. Noreasonlefttouseyaffs2insteadofjffs2? YoumayalsouseSquashFStosqueezemore stuffonyourflashstorage.Advisabletouseiton topofUBI,toletallflashsectorsparticipateto wearleveling.
SquashFS MTDblock MTDAPI UBI MTDdriver Flashchip
47
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Experimentalfilesystems(1)
Alookatpossiblefuturesolutions? wikifs ACELFsponsoredproject. AWikistructuredfilesystem (today'sflashfilesystems arelogstructured). AlreadyusedinSonydigital camerasandcamcorders. Pros:direct/easyexportof devicefunctionality descriptiontoelinux.org. linuxtinyfs Targetssmallembedded systems. Negativememory consumption:achievedby compilingoutthekernelfile cache. Pros:veryfastmounttime Cons:amountonly filesystem.Wayto implementreadandwrite notfoundyet.
48
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Experimentalfilesystems(2)
fsckfs Aninnovativefilesystemrebuildingitselfateachreboot. Pros:nouserspacetoolsareneeded. Nofsck.fsckfsutilityneeded. Cons:mounttimestillneedsimproving.
49
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Updateonfilesystemsforflashstorage
Adviceforflashbasedblockstorage
50
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Issueswithflashbasedblockstorage
Flashstoragemadeavailableonlythroughablockinterface. Hence,nowaytoaccessalowlevelflashinterface andusetheLinuxfilesystemsdoingwearleveling. Nodetailsaboutthelayer(FlashTranslationLayer)they use.Detailsarekeptastradesecrets,andmayhidepoor implementations. Hence,itishighlyrecommendedtolimitthenumberof writestothesedevices.
51
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Reducingthenumberofwrites
Mountyourfilesystemsasreadonly,orusereadonly filesystems(SquashFS),wheneverpossible. KeepvolatilefilesinRAM(tmpfs) Usethenoatimemountoption,toavoidupdatingthe filesystemeverytimeyouaccessafile.Oratleast,ifyou needtoknowwhetherfileswerereadaftertheirlastchange, usetherelatimeoption. Don'tusethesyncmountoption (commitswritesimmediately).Nooptimizationspossible. Youmaydecidetodowithoutjournaledfilesystems. Theycausemorewrites,butarealsomuchmorepower downresistant.
52
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Usefulreading
IntroductiontoJFFS2andLogFS: http://lwn.net/Articles/234441/ NiceUBIpresentationfromToshiba: http://freeelectrons.com/redirect/celfubi.html Documentationonthelinuxmtdwebsite: http://www.linuxmtd.infradead.org/
53
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com
Updateonfilesystemsforflashstorage
Documentonhttp://freeelectrons.com/pub/conferences CreativeCommonsBYSAlicense
Thankyou!
Questions? Newfilesystem suggestions?
54
FreeElectrons.Kernel,driversandembeddedLinuxdevelopment,consulting,trainingandsupport.http//freeelectrons.com