Première approche de BTRFS

Première approche de BTRFS jpp

Le premier test est juste destiné à apprendre le fonctionnement basique des outils liés à BTRFS il a été executé sur des volumes LVM créés pour l'occasion avant de passer au travail sur des partitions physiques. 
Mais, ATTENTION, la version des outils n'est (sur Debian unstable) encore que "0.19+20120328-1". Cela bouge mais la version "stable" 1.0 est peut-être encore assez loin. 
Pour tester BTRFS il faut un noyau dont le support BTRFS est activé ! Si, comme c'est probable le support BTRFS est compilé en module un simple : 
modprobe btrfs 
devrait vous renseigner : 
FATAL: Module btrfs.ko not found. 
ou bien meilleur aucun message et un code retour 0. 
Ce support devrait être actif pour les noyaux récents de la plupart des distributions, sinon compilez le vous même et installez le. Les tests sont réalisés avec un noyau très récent (3.4.4) afin de bénéficier des dernières corrections. 
Ensuite il faut charger les outils BTRFS pour disposer, entre autres, de mkfs.btrfs. Sur Debian le paquet se nomme "btrfs-tools" sans autre complication et s'installe rapidement. 
Pour ce premier test j'ai créé deux "disques" LVM de 20G nommés : 
VOL_EXT4 et VOL_BTRFS. Le premier sera formaté classiquement en EXT4, le secon en BTRFS. 
La commande "mkfs.btrfs" assure le formatage et la labellisation, ici : 
date ; mkfs -t btrfs -L DISK_BTRFS /dev/mapper/TALE-VOL_BTRFS ; date 
vendredi 4 mai 2012, 19:55:30 (UTC+0200) 

WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL 
WARNING! - see http://btrfs.wiki.kernel.org before using 

fs created label DISK_BTRFS on /dev/mapper/TALE-VOL_BTRFS 
    nodesize 4096 leafsize 4096 sectorsize 4096 size 20.00GB 
Btrfs Btrfs v0.19 
vendredi 4 mai 2012, 19:55:30 (UTC+0200) 

Le résultat est quasi instantané ! 

En EXT4 : 
date; mkfs -t ext4 /dev/mapper/TALE-VOL_EXT4 ; date 
vendredi 4 mai 2012, 19:56:52 (UTC+0200) 
mke2fs 1.42.2 (9-Apr-2012) 
Filesystem label= 
OS type: Linux 
Block size=4096 (log=2) 
Fragment size=4096 (log=2) 
Stride=0 blocks, Stripe width=0 blocks 
1310720 inodes, 5242880 blocks 
262144 blocks (5.00%) reserved for the super user 
First data block=0 
Maximum filesystem blocks=4294967296 
160 block groups 
32768 blocks per group, 32768 fragments per group 
8192 inodes per group 
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000 
Allocating group tables: done                             
Writing inode tables: done                             
Creating journal (32768 blocks): done 
Writing superblocks and filesystem accounting information: done    
vendredi 4 mai 2012, 19:56:54 (UTC+0200) 

Deux secondes pour 20G, donc plus de trois minutes pour un disque de 2To. On monte ensuite les deux partitions et on vérifie : 
df | grep mnt 
/dev/mapper/TALE-VOL_EXT4    20907056    440692  19417788   3% /mnt/VOL_EXT4 
/dev/mapper/TALE-VOL_BTRFS   20971520       120  18845632   1% /mnt/VOL_BTRFS 
Tiens ETX4 consomme 3% ?

Tests "dd" en écriture, fichier de 8Go :  
Pour EXT4 wait 37 .. 75%    BO # 65000 .. 136000 (chiffres de "vmstat")  
256000+0 records in 
256000+0 records out 
8388608000 bytes (8,4 GB) copied, 63,0721 s, 133 MB/s

Pour BTRFS wait 29.. 55%          BO # 68000 .. 180000  
256000+0 records in 
256000+0 records out 
8388608000 bytes (8,4 GB) copied, 60,2699 s, 139 MB/s

Tests "dd" en écriture, fichier de 16Go : 

Pour EXT4 wait 37 .. 75% output # 65000 .. 136000 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 136,869 s, 123 MB/s 

Pour BTRFS wait 29.. 55% output # 68000 .. 190000 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 123,338 s, 136 MB/s 

La vitesse du BTRFS n'est que très peu supérieure mais les "wait_states" sont inférieurs (mesuré avec vmstat) mais reste plus constante pour les fichiers de 8G et 16G. 

Tests "dd" en lecture, fichier de 16Go : 

EXT4 : 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 125,661 s, 134 MB/s 

BTRFS : 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 119,848 s, 140 MB/s 

Léger avantage à BTRFS.

Aucune commande complexe n'a été utilisée ici, la seule différence est la pose du label de FS par "mkfs.btrf" qui simplifie un peu les commandes. 
Les tests précédents ont étés réalisés avec un noyau "xenifié", ci-dessous le même test sur la même version de noyau (3.3.4) en mode "normal" : 
Test "dd" en lecture fichier 16Go :

EXT4 : 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 108,485 s, 155 MB/s 
BTRFS : 
512000+0 records in 
512000+0 records out 
16777216000 bytes (17 GB) copied, 99,3723 s, 169 MB/s 

Les résultats sont meilleurs laissant toujours un léger avantage à BTRFS. 
J'ai prévu de présenter plus loin quelques possibilités attrayantes et les outils qui permettent d'y arriver. C'est tout pour aujourd'hui ... à la prochaine.