Flash-Friendly File System (F2FS)

From EIK wiki

Autor

Nimi: Veiko Villo

Rühm: A21

Esitamise kuupäev: 05.12.2016

Parandatud: 12.12.2016

Sissejuhatus

Flash-Friendly File System (F2FS) on Samsungi poolt loodud välkmäludele suunatud Linuxi failisüsteem, mis on Linuxi tuumas saadaval alates tuuma versioonist 3.8 [3]. F2FS ehk välkmälusõbralik failisüsteem jõudis avalikkuseni 2012 aasta lõpus [4]. F2FS puhul on loomise algusest saadik eesmärgiks seatud jõudluse ja usaldusväärsuse tõstmine, mitte uute ilustatud funktsioonide lisamine [5]. F2FS on loodud laiatarbekasutuses olevate NAND tehnoloogial põhinevate välkmälude (sealhulgas SSD) omadusi silmas pidades ning on adresseeritud probleemide lahendamisele, mis tekkisid pöörlevatele ketastele mõeldud failisüsteemide kasutamisel välkmälul põhinevatel andmekandjatel.

F2FS omadused

NAND tehnoloogial põhinevate välkmälude eripära avaldub pistelisel kirjutamisel mäluseadmele (võrrelda pistelist kirjutamist järjestikuse kirjutamisega)[6]. Sagedane pisteline kirjutamine SSD mäluseadmele tekitab mäluseadmes sisemist killustatust ja langetab seadme võimekust [7]. Sealjuures on pisteline kirjutamine üpriski tavapärane, olles esile kutsutud näiteks selliste populaarsete rakenduste poolt nagu Facebook ja Twitter [8]. Tähelepanuväärne on asjaolu, et sagedane pisteline kirjutamine võib oluliselt suurendada välkmälu sisend-väljund (I/O) kosteaega (latentsust) ja langetada seadme eluiga [9].

F2FS failisüsteemi eesmärgiks on optimeerida välkmäluseadme võimekust ja eluiga ning sellest tulenevalt omab järgnevaid eripärasid:

  • Välkmälusõbralik andmestruktuuride paigutus.

F2FS failisüsteemi andmestruktuuride paigutus mäluseadmel on viidud vastavusse NAND tehnoloogial põhinevate välkmäluseadmete ülesehituse ja toimimispõhimõtetega.[10]

  • Tulutoov indeksite ülesehitus.

Andmeploki uuendamisel tuleb uuendada ka sellele vastavat otsest indeksite plokki. Otsese indeksi ploki uuendamine tekitab omakorda vajaduse uuendada vastavat kaudsete indeksite plokki. Taoline rekursiivne indeksite uuendamine kutsub esile ahelkirjutamise, mis tekitab „uitamisprobleemi.“[11] F2FS failisüsteemis on antud probleem lahendatud meetodiga, mille kohaselt uuendatakse ainult üks otseste sõlmpunktide plokk ja sellele vastav sõlmpunkti adresseerimistabeli sissekanne [12].

  • Mitmene logimine

F2FS puhul on aluseks võetud struktureeritud logidel põhinev failisüsteem (Log-structured file system), millele on lisatud omapoolsed täiendused. Varasematel struktureeritud logidel põhinevatel failisüsteemidel on üks suur logimisala, F2FS seevastu omab kuute logimisala, koos andmete jaotamisega kolme kategooriasse: kuum, soe ja külm.[13] Üldiselt allub jaotus põhimõttele, et sagedamini kasutatavad andmed jagunevad kuuma kategooriasse ning harvemini kasutatavad andmed külma kategooriasse. Kuum/külm andmete jaotusskeem rakendub logimise ajal, käivitades samaaegselt mitu aktiivset logimislõiku, lisades andmed ja metaandmed eraldiseisvatesse logimislõikudesse vastavalt nende oodatavale uuendamissagedusele [14].

  • Kohanev logimine

F2FS logimissüsteem muudab pistelised kirjutamised järjestikusteks (normaalne logimine), kuid mäluseadme kõrge kasutusastme korral kohandab F2FS failisüsteem logimisstrateegia normaalselt logimiselt lõimitud logimisele, mis aitab vältida mäluseadmele kirjutamise kosteaja pikaks muutumist. F2FS jälgib failisüsteemi staatust, täpsemalt muutujat k, mis iseloomustab teatud protsenti puhastest lahtritest (vaikimisi väärtuseks 5% kõigist puhastest lahtritest). Juhul, kui vabade lahtrite arv on üle 5%, siis rakendatakse normaalset logimist.[15] Vastasel juhul rakendub lõimitud logimine, mis paraku võib esile kutsuda vähesel määral pistelist kirjutamist [16]. Muutuja k väärtust saab süsteemiadministraator vastavalt soovile ise muuta, leides enda jaoks sobiva tasakaalu kiiruse ja mäluseadme eluea pikendamise vahel. Antud muutuja väärtus muutub oluliseks enamasti vaid suure koormusega süsteemides, kus kettaruumi täitumise tõenäosus on kõrge ning sealjuures ei tohi kirjutamiskiirus oluliselt langeda.

  • fsync´i kiirendamine taastumise edasilükkamisega

Andmebaasirakendused kirjutavad sagedasti faili väikesemahulisi andmeid ja kasutavad andmete säilivuse garanteerimiseks fsync´i. F2FS kasutab fsync´i jõudluse tõstmiseks efektiivset taastumise edasilükkamise mehhanismi. Võtmeideeks on kirjutada andmeplokid ja ainult nende otsesed sõlmpunktide plokid, jättes kirjutamata ülejäänud sõlmpunktid ja F2FS metaandmete plokid. Stabiilse seisu taastamise vajadusel leiab failisüsteem vajalikud andmeplokid kiiresti üles tänu otseste sõlmpunktide plokki jäetud lippudele.[17]

F2FS heaks omaduseks on veel ka äkilise elektrikatkestuse korral tagatav taastumisvõime. Elektrikatkestuse korral pöördub F2FS tagasi viimase tervikliku kontrollpunkti juurde. Selleks, et tagada alati vähemalt ühe tervikliku kontrollpunkti olemasolu, hoiab F2FS alal kahte kontrollpunkti paketti.[18] Kontrollpunkti paketi uuendamise korral kirjutab F2FS ainult ühte kontrollpunkti paketti, tänu millele on elektrikatkestuse korral andmekao ja rikete tekkimise tõenäosus väiksemaks viidud. Kirjeldatud meetod tagab ka failisüsteemi kiirema toimimise.

Lisaks on F2FS-is laialipaisatud ja kehtetuks muutunud plokkide uuesti kasutuselevõtuks ning logimiseks vabade lõikude tagamiseks olemas automaatne puhastussüsteem. F2FS teostab puhastamist kahel viisil: esiplaanil ja tagaplaanil puhastamine. Esiplaanil puhastamine rakendub ainult olukorras, kus enam ei ole piisaval hulgal vabasid lahtreid. Automaatne tagaplaanil puhastamine jõustub süsteemi tegevuseta oleku ajal.[19][20][21]

F2FS võrdluses

Samsung viis F2FS testimiseks läbi mitmeid eksperimente ja võrdlevaid katsetusi. F2FS´i väidetavale välkmälu eluea pikendamise lubadusele lisab kandepinda joonisel 1 esitatud eksperimendi tulemus (võrdlus EXT4 failisüsteemiga), mille arvnäitajad iseloomustavad mäluseadme kulumise kiirenemise indeksit. Kõrgem indeks märgib kiiremat kulumist.

Joonis 1: Kulumise kiirenemise test.
Joonis 1: Kulumise kiirenemise test.[1]

Ekperiment näitas F2FS failisüsteemi korral 2,7 korda madalamat mäluseadme kulumismäära võrreldes EXT4 failisüsteemiga.

F2FS toimetulekut serverisüsteemides testiti võrdluses EXT4, BTRFS ja NILFS2 failisüsteemidega, võttes aluseks SATA SSD välkmäluseadme (test sisaldas ka PCIe SSD-d ja Galaxy S4 nutitelefoni, millest saab soovi korral lähemalt lugeda viidatud materjalidest). Testis (vt. joonis 2) ei näidanud F2FS üleolekut teiste failisüsteemide suhtes vaid videoserveri puhul, sest videoserver tekitab peamiselt järjestikku lugemist ja kirjutamist, mis ei ole failisüsteemidele komistuskiviks.

Joonis 2: Võrdlev jõudlustest.
Joonis 2: Võrdlev jõudlustest.[2]

Seevastu failiserveri sisend/väljund mustrid on erinevad ning siin näitas F2FS 2,4 korda paremat tulemust võrreldes EXT4 failisüsteemiga. E-kirjade (varmail) lõikes oli F2FS sooritusvõime EXT4-st 2,5 korda kõrgem. Võrguülekande töötluse (oltp) töökoormaga tuli samuti F2FS kõige paremini toime, ületades EXT4-ja tulemust 16-ne protsendiga.[22]

F2FS kasutamine

Allolev on näide, kuidas USB mälupulgale F2FS failisüsteemi paigaldada. F2FS partitsiooni loomiseks tuleb esmalt paigaldada vastavad vahendid. Järgnevaid käske tuleb käivitada juurkasutaja õigustes. Samuti on vajalik kettahaldustarkvara fdisk olemasolu. Ametlikust hoidlast F2FS failisüsteemi loomiseks vajalike vahendite allalaadimine ja paigaldamine:

apt update && apt install f2fs-tools

Käsklusega lsblk saab ülevaate ühendatud mäluseadmetest (v.a suvapöördusmälud) ja nendel olevatest partitsioonidest. Antud näite puhul tähistab mälupulka sdb. Kettahaldustarkvarasse saab siseneda järgneva käsuga:

fdisk /dev/sdb

Uue tühja GPT kettajao tabeli (antud käsklusega kaovad ka mälupulgal olevad andmed) ning seejärel uue primaarse kettajao loomine. Nõustuda vaikimisi väärtustega (jälgi, et vaikimisi kettajao tüüp oleks primaarne) kuni valikute lõpuni, vajutades iga kord enter-klahvi. Muudatuste salvestamiseks mälupulgale ja kettahaldustarkvarast väljumiseks sisestada viimasena w

g
n
w

F2FS failisüsteemi olemasolu kontrollimiseks sisestada käsureale käsklus mkfs ning vajutada kaks korda tab-klahvi, tulemusena kuvatakse olemasolevad failisüsteemid. Nimekirjas peaks olema ka mkfs.f2fs.

Vormindamine ehk failisüsteemi määramine kettajaole. Antud juhul saab kettajagu sdb1 (eelnevalt loodud primaarne kettajagu) failisüsteemiks F2FS.

mkfs.f2fs -l ligipaasf2fspulgale /dev/sdb1

Kontrolliks sisestada käsklus lsblk -f, mis näitab lisaks mäluseadmetele ja nende partitsioonidele ka partitsioonidel olevaid failisüsteemi tüüpe.

Käsitsi failisüsteemiga ühenduspunkti loomiseks tekitada kataloog ja ühendada see failisüsteemiga.

mkdir /mnt/f2fspulk 
mount /dev/sdb1 /mnt/f2fspulk

F2FS failisüsteemiga mälupulgale (ühenduspunkti kataloogi) kirjutamiseks tuleb kataloogile määrata kirjutamisõigus. Antud juhul määratakse näitena kõigile kõik õigused.

chmod 777 /mnt/f2fspulk

Ühenduspunkti lahtihaakimiseks.

umount /dev/sdb1

Mälupulgale paigaldatud F2FS failisüsteem toimis minul tõrgeteta. F2FS failisüsteemi seadistamine Ubuntus juurkettajaona kasutamiseks on keerukam, sest F2FS ei ole Ubuntus täielikult toetatud. Täielik F2FS failisüsteemi tugi on operatsioonisüsteemil OpenMandriva [23] [24].

Kokkuvõte

F2FS on kõrge potentsiaaliga tulevikkuvaatav failisüsteem, mida tõendab eelnevalt välja toodud võrdlus teiste failisüsteemidega, kus F2FS näitas märgatavalt paremaid tulemusi. Samuti võib artiklis kirjeldatud F2FS omadusi lugedes tõdeda, et antud failisüsteem aitab NAND tehnoloogial põhinevate välkmälude parimad küljed esile tuua, sealjuures tegemata järeleandmisi mäluseadme kulumise osas. F2FS tagab võrreldes EXT4 failisüsteemiga märgatavalt kõrgema mäluseadme eluea. Samuti on võimalik failisüsteemi teatud määral seadistada, mis koos eelnevaga teeb antud failisüsteemist hea töövahendi süsteemiadministraatorile.

F2FS puudustena mainin vähest operatsioonisüsteemide tuge, mis muudab failisüsteemi kasutamise keeruliseks või kohati võimatuks. Ühilduvuse probleemid on etteaimatavad, sest näiteks F2FS´il puudub täielikult ühilduvus Microsoft Windowsiga. Tegemist on siiski suhteliselt noore failisüsteemiga, mida üha enam täiustatakse ja loodetavasti tuleb peagi ka täielik ühilduvus Ubuntu ja teiste enimkasutatavate operatsioonisüsteemidega.

Kasutatud materjalide loetelu:

1. https://www.usenix.org/system/files/conference/fast15/fast15-paper-lee.pdf

2. https://events.linuxfoundation.org/images/stories/pdf/klf2012_j_kim.pdf

3. http://elinux.org/images/1/12/Elc2013_Hwang.pdf

4. https://blog.acolyer.org/2015/02/26/f2fs-a-new-file-system-for-flash-storage/

5. https://f2fs.wiki.kernel.org/

6. https://blog.openmandriva.org/2016/04/3244/