Bonjour,

J'ai avancé sur l'analyse de mon côté, et j'ai des éléments complémentaires.
Ce qui m'embête beaucoup, c'est l'impression que par défaut ZFS n'a un ratio correct en accès aléatoire qu'avec de blocs de 128k.

$ fio --name=randfile --ioengine=libaio --iodepth=32 --rw=randwrite --bs=128k --direct=1 --size=16G --numjobs=8 --group_reporting
  write: IOPS=6241, BW=780MiB/s (818MB/s)(128GiB/167988msec)

$ zpool iostat -v
                                              capacity     operations     bandwidth
pool                                        alloc   free   read  write   read  write
------------------------------------------  -----  -----  -----  -----  -----  -----
rpool                                        197G  54.4T      7  13.7K  35.6K  1007M
  raidz2                                     197G  54.4T      7  13.7K  35.6K  1007M
    ata-ST6000NM0024-1HT17Z_xxxxxxxx-part3      -      -      0  1.29K  3.80K   101M
[...] (lignes suivantes similaires)

Fichier 818 Mo/s vs Disque 1007 Mo/s

Sur proxmox, 128k c'est semble-t'il le recordsize par défaut de ZFS.

$ zfs get all | grep recordsize
rpool/data                recordsize            128K                   default

Je ne me vois pas créer des systèmes de fichier avec des blocs de 128k dans les VMs juste pour ça.
J'envisage donc de passer à une valeur recordsize plus raisonnable pour un type de virtualisation avec des systèmes de fichiers à bloc de 4k dans les VMs.

Qu'avez-vous choisi comme recordsize de votre côté ? 4k ? 8k ?
Avez-vous opté pour une autre solution ?

Merci.

PS: Petite lecture à ce sujet : https://www.usenix.org/system/files/login/articles/login_winter16_09_jude.pdf
--
Emmanuel DECAEN

Le 30/01/2020 à 13:58, Maxime G. a écrit :
Il y a du mieux mais c'est évidemment trop facile pour les couches.

Dans un premier temps, je ne cherche pas forcément à avoir du mieux.
Je cherche surtout à comprendre le ratio pour l'aléatoire :-)


​​​​Et avec dd en aléatoire ?

Avec le dd de données aléatoires (urandom dans un fichier) en accès séquentiel, on reste dans le même ordre de grandeur du ratio que fio en séquentiel.

$ dd if=/mnt/toto of=toto bs=8k oflag=direct
31495651328 bytes (31 GB, 29 GiB) copied, 47.3935 s, 665 MB/s

$ zpool iostat -v 20
                                              capacity     operations     bandwidth
pool                                        alloc   free   read  write   read  write
------------------------------------------  -----  -----  -----  -----  -----  -----
rpool                                        167G  54.4T      5  5.39K  21.8K   859M
  raidz2                                     167G  54.4T      5  5.39K  21.8K   859M
    ata-ST6000NM0024-1HT17Z_xxxxxxxx-part3      -      -      0    555  2.40K  85.9M
[...] (lignes suivantes similaires)


$ dd if=/mnt/toto of=toto bs=128k oflag=direct
31495651328 bytes (31 GB, 29 GiB) copied, 31.1648 s, 1.0 GB/s

$ zpool iostat -v 20
                                             capacity     operations     bandwidth
pool                                        alloc   free   read  write   read  write
------------------------------------------  -----  -----  -----  -----  -----  -----
rpool                                        160G  54.4T      7  16.4K  28.4K  1.39G
  raidz2                                     160G  54.4T      7  16.4K  28.4K  1.39G
    ata-ST6000NM0024-1HT17Z_xxxxxxxx-part3      -      -      0  1.63K  2.40K   143M
[...] (lignes suivantes similaires)



30 janvier 2020 13:28 "Emmanuel DECAEN" <Emmanuel.Decaen@xsalto.com> a écrit:


Bonjour,
Le 30/01/2020 à 09:42, Maxime G. a écrit :
Bonne question...
Juste au niveau de fio, que donne un test en écriture séquentielle ?


En écriture séquentielle, le ratio est de l'ordre de 1,3.

$ fio --name=seqfile --ioengine=libaio --iodepth=32 --rw=write --bs=16k --direct=1 --size=16G --numjobs=8 --group_reporting
[...]
write: IOPS=50.4k, BW=788MiB/s (827MB/s)(128GiB/166288msec)


$ iostat -xm 60
avg-cpu: %user %nice %system %iowait %steal %idle
0.55 0.00 22.43 15.65 0.00 61.38
Device r/s w/s rMB/s wMB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 0.20 1488.47 0.00 109.80 0.00 3.97 0.00 0.27 85.33 4.29 3.46 4.00 75.54 0.42 62.32

[...] (8 lignes similaires)
sdj 0.23 1444.97 0.00 109.81 0.00 3.55 0.00 0.25 88.29 4.67 3.91 4.00 77.82 0.43 61.79


$ zpool iostat -v 60
capacity operations bandwidth
pool alloc free read write read write
------------------------------------------ ----- ----- ----- ----- ----- -----
rpool 198G 54.4T 2 12.8K 9.40K 1.07G
raidz2 198G 54.4T 2 12.8K 9.40K 1.07G
ata-ST6000NM0024-1HT17Z_xxxxxxxx-part3 - - 0 1.25K 750 109M
[...] (8 lignes similaires)
ata-ST6000NM0024-1HT17Z_xxxxxxxx-part3 - - 0 1.22K 887 109M
------------------------------------------ ----- ----- ----- ----- ----- -----

Fio : 827 Mo/s
Iostat: 1090 Mo/s

Soit un ratio d'environ 1.3, bien loin du ratio de 6 pour l'écriture aléatoire.




29 janvier 2020 14:44 "Emmanuel DECAEN" <Emmanuel.Decaen@xsalto.com> a écrit:

Bonjour,

Depuis quelques semaines, je teste la solution Proxmox VE 6.1.
Il y a beaucoup de choses intéressantes, mais j'avoue avoir des surprises avec la partie ZFS pour la virtualisation.

J'ai une petite maquette avec un ancien serveur Dell :
- Chassis R730XD 12 slots
- 256 Go de RAM
- 10 disques SATA Entreprise 6 To en ZFS RAID z2 mode HBA
- 2 SSD SAS 1,8 To non utilisés pour le moment (ni ZIL, ni L2ARC).

Quand je fais un test sur l'hôte de virtualisation (Proxmox) avec fio, j'obtiens ceci:

$ fio --name=randfile --ioengine=libaio --iodepth=32 --rw=randwrite --bs=16k --direct=1 --size=4G --numjobs=8 --group_reporting
[...]
write: IOPS=13.8k, BW=216MiB/s (227MB/s)(32.0GiB/151568msec)

==> fio : 227 Mo/s

Côté iostat sur l'intervalle de temps:
$ iostat -xm 60
avg-cpu: %user %nice %system %iowait %steal %idle
0.29 0.00 30.98 9.80 0.00 58.93

Device r/s w/s rMB/s wMB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util

sda 0.05 2185.70 0.00 133.04 0.00 5.00 0.00 0.23 21.00 3.34 2.71 4.00 62.33 0.35 77.37
[...] (8 lignes similaires)
sdj 0.02 2169.40 0.00 133.04 0.00 4.70 0.00 0.22 48.00 3.45 2.90 4.00 62.80 0.36 77.13



==> iostat: 1330 Mo/s

Côté zpool iostat sur l'intervalle de temps:
$ zpool iostat -v 60
capacity operations bandwidth
pool alloc free read write read write
------------------------------------------ ----- ----- ----- ----- ----- -----
rpool 73.2G 54.5T 0 19.4K 2.33K 1.30G
raidz2 73.2G 54.5T 0 19.4K 2.33K 1.30G
ata-ST6000NM0024-1HT17Z_xxxxxxxx-part3 - - 0 1.93K 204 133M
[...] (8 lignes similaires)
ata-ST6000NM0024-1HT17Z_xxxxxxxx-part3 - - 0 1.92K 68 133M

==> zfs iostat: 1300 Mo/s


Le débit est cohérent entre iostat et zfs iostat.
Comment expliquer la différence entre l'écriture faite par fio à 227 Mo/s et celle relevée par les iostat à 1300 Mo/s ?

Le fonctionnement de ZFS en RAID z2 + journal doit aboutir à un facteur 6 côté débit ?

Merci.
--
Emmanuel DECAEN


Merci.
--
Emmanuel DECAEN