f2fs Fedora

Avendo visto che alcuni dispositivi mobile/android, in particolare gli smartphone motorola (moto G e moto X), utilizzano per alcune partizioni, come /data,  il file system f2fs, ho provato a testarlo sulla mia distro linux.

Per creare su una chiavetta usb (o ovunque) un file system f2fs basta aver installato il pacchetto f2fs-tools che fornisce il comando mkfs.f2fs

Ora "formatto"

Fatto questo, per poter montare la partizione col file system f2fs c'è bisogno che il kernel sappia gestire il file system. Purtroppo il kernel di fedora 18 (ma anche del 20) non ha abilitato di default il modulo f2fs.ko (considerato ancora sperimentale).

Ci sono 2 strade percorribili (anzi 3).

1)Mi ricompilo il kernel abilitando il supporto a f2fs
2)Compilo solo il modulo e lo carico nel kernel
3)Utilizzo una distro che di default ha abilitato il supporto a f2fs

Lasciando perdere l'opzione 3 mi concentro sulla più rapida, ovvero la 2.

Qui sto cercando di compilare un modulo che è gia presente nel kernel in modo sperimentale, quindi questa guida
http://docs.fedoraproject.org/en-US/Fedora_Core/6/html/Release_Notes/ar01s07s07.html
che spiega come compilare un modulo esterno per il mio kernel non è quello che sto cercando.

Qui ho trovato alcuni spunti interessanti
https://fedoraproject.org/wiki/Building_a_custom_kernel
e alla fine ho fatto in questo modo:

1)Mi installo yum-utils e ncurses-devel per il make menuconfig.

2)Scarico il sorgente del kernel attualmente in uso (.src)

3)Installo  tutte le dipendenze che servono a effettuare il build del kernel in oggetto

4)Scompatto il sorgente del kernel in /home/merli/rpmbuild

5)Mi sposto in /home/merli/rpmbuild/SPECS

e preparo l'ambiente di compilazione. Nel caso poi tutto questo mi servirà quando e se vorrò creare un rpm del mio kernel modificato.

6)Vado nella root directory del sorgente del kernel pronto alla compilazione

e mi copio la configurazione attuale

7)Guardo se ci sono problemi in relazione alla configurazione attuale rispetto a quella che voglio creare (non ce ne dovrebbero essere)

8)Apro il menù di configurazione del kernel

e abilito il supporto al f2fs.
Si trova in
Files Systems ->Miscellaneous filesystems -> F2FS filesystem support (EXPERIMENTAL)
Lo abilito come modulo e insieme a lui si abilitano anche delle opzioni secondarie (tipo permessi/acl etc)

menuconfig1

Salvo ed esco

A questo punto, se volessi seguire la strada 1, potrei lanciarmi nella ricompilazione completa di kernel, moduli etc...
Volendo invece seguire la strada 2 mi riposiziono nella root della mia build, ovvero

e digito

make modules -> compila i moduli
M=$(pwd)/fs/f2fs -> specifica la directory con il modulo che voglio compilare. Questa directory deve contenere il makefile del modulo stesso.
-C /lib/modules/$(uname -r)/build ->si sposta di directory  in (nota che build è un link simbolico) /usr/src/kernels/$(uname -r)/build che è la directory degli strumenti di sviluppo del kernel installato. Verrà usato questo makefile passando il parametro di quale modulo compilare e dicendogli di compilare i moduli e specificando  che il modulo in questione (M) sta nella directory di lavoro /root/rpmbuild/....

Il modulo compilato .ko me lo ritrovo in

da qui lo carico nel kernel

Ora posso finalmente montare il file system precedentemente creato col comando

 

PRESTAZIONI

Ora qualche nota circa le prestazioni del file system in oggetto. La teoria è che f2fs sia amichevole verso la memoria flash delle schede di memoria/chiavette (MMC). Non ho esperienza di benchmark di dischi e devo dire che è davvero molto complesso effettuare misurazioni sensate e i cui risultati siano ripetibili. Ho provato a utilizzare iozone, bonnie++ e un semplice dd.
I risultati più interessanti sembrano essere questi:

 

Usb drive - Usb2 - Fat32

Bonnie++
Guardo unicamente il valore di RandomSeek che rappresenta quanti singoli blocchi bonnie++ può ricercare al secondo
RandomSeek: 24.2

La scrittura sequenziale invece la testo con un semplice dd scrivendo 100MiB a blocchi di 4KiB

 

Usb drive - Usb2 - Ext4

Bonnie++
RandomSeek: 20.7

 

Usb drive - Usb2 - f2fs

Bonnie++
RandomSeek: 1143

I risultati, insieme agli altri che ho ottenuto cercando di misurare le prestazioni, suggeriscono un tempo di lettura/scrittura sequenziale sostanzialmente invariato e un aumento notevole della velocità di accesso casuale sui singoli blocchi (che spesso è il motivo della latenza che appare in android).
Come paragone questi i medesimi risultati su un hdd e un ssd con file system ext4

HDD - ext4

Bonnie++
RandomSeek: 706

 

SDD (samsung 840pro 128GB) - ext4

Bonnie++
RandomSeek: 6119

 

Print Friendly, PDF & Email