Tester son système de fichiers (RAID et ZFS) avec Bonnie++
Je n'avais utilisé ZFS que pour de la station de travail et je trouve mon serveur parfois poussif. Certes, cet un agrégat de petits SATA, en RAIDz-1, mais ça me surprend.
Il faut que je regarde de plus près la configuration de ZFS mais je voulais aussi faire un test de vitesse qui me servirait notamment de point de comparaison pour la suite.
J'utilise Bonnie++, (vieil) utilitaire de benchmark de système de fichiers dont voici le man ("manuel") et le site de son auteur.
On l'installe tout simplement via apt par exemple
sudo apt-get install bonnie++
Il y a plusieurs manière de l'utiliser, voici un exemple simple :
bonnie++ -d /rpool/ -s 48G -n 2 -f -b -u root
-d /rpool = où effectuer le test. /rpool étant un de mes pools RAIDz-1
-s 48G : taille du fichier de test, Bonnie++ recommande le double de la RAM
-n 2 : nombre de fichiers utilisés pour le test
-f : fast mod
-b : pas de buffer d'écriture (pour un accès direct et donc plus réaliste)
-u root : utilisateur d'exécution
[root@pve aerya]$ bonnie++ -d /rpool/ -s 48G -n 2 -f -b -u root
Using uid:0, gid:0.
Writing intelligently...
done
start 'em...done...done...done...done...done...
Create files in sequential order...done.
Stat files in sequential order...done.
Delete files in sequential order...done.
Create files in random order...done.
Stat files in random order...done.
Delete files in random order...done.
Version 2.00 ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Name:Size etc /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
pve 48G 311m 17 226m 22 613m 29 170.4 5
Latency 3024ms 542ms 423ms 529ms
Version 2.00 ------Sequential Create------ --------Random Create--------
pve -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
2 2048 0 +++++ +++ 2048 0 2048 0 +++++ +++ 2048 0
Latency 338ms 8us 480ms 348ms 15us 449ms
1.98,2.00,pve,1,1641109158,48G,,8192,5,,,318369,17,231080,22,,,627973,29,170.4,5,2,,,,,29,0,+++++,+++,30,0,41,0,+++++,+++,32,0,,3024ms,542ms,,423ms,529ms,338ms,8us,480ms,348ms,15us,449ms
Le résultat est particulièrement imbuvable et on le transcrit en HTML via le code Perl "bon_csv2html" sous la forme de
echo "Résultats" | bon_csv2html > Résultats.html
Comme je suis sur un serveur, je place le résultat dans un serveur Web format Docker
docker run -d \
--name=bonniehtml \
-p 8053:8080 \
-v /home/aerya/docker/bonniehtml:/var/www/html \
trafex/php-nginx
Donc
echo "1.98,2.00,pve,1,1641109158,48G,,8192,5,,,318369,17,231080,22,,,627973,29,170.4,5,2,,,,,29,0,+++++,+++,30,0,41,0,+++++,+++,32,0,,3024ms,542ms,,423ms,529ms,338ms,8us,480ms,348ms,15us,449ms" | bon_csv2html > /home/aerya/docker/bonniehtml/Résultats.html
Ce qui me les sert bien en version Web (et lisible)
Maintenant faut bien entendu interpréter les résultats. Ce qui m'intéressait dans l'immédiat ce sont les M/sec des I/O.
Soit 613MB/s en écriture (input) et 311MB/s en lecture (Output).
Ce que je peux confirmer avec dd :
TEST en écriture
[root@pve aerya]$ time sh -c "dd if=/dev/zero of=/rpool/test.tmp bs=4k count=2000000 && sync"
2000000+0 records in
2000000+0 records out
8192000000 bytes (8.2 GB, 7.6 GiB) copied, 9.71033 s, 844 MB/s
real 0m12.822s
user 0m1.181s
sys 0m7.522s
TEST en lecture
[root@pve aerya]$ time sh -c "dd if=/rpool/test.tmp of=/dev/null bs=4k"
2000000+0 records in
2000000+0 records out
8192000000 bytes (8.2 GB, 7.6 GiB) copied, 26.5967 s, 308 MB/s
real 0m26.598s
user 0m1.197s
sys 0m25.379s
Hey ! Blaireau ! Pourquoi tu nous parles de bonnie++ alors que tu as la même en plus simple et rapide avec dd ?!
Parce que Bonnie++ est plus complet (latence etc) et que c'est un point de comparaison plus fiable et complet quand on veut tweaker un peu ZFS.