On m'a demandé de venir fio
résultats du benchmark pour cet ensemble de données de test : 1048576x1MiB . Ainsi, la taille globale est de 1TiB . L'ensemble contient 2^20 1MiB fichiers. Le serveur fonctionne CentOS Linux release 7.8.2003 (Core)
. Il dispose d'une mémoire vive suffisante :
[root@tbn-6 src]# free -g
total used free shared buff/cache available
Mem: 376 8 365 0 2 365
Swap: 3 2 1
En fait, ce n'est pas un serveur physique. Il s'agit plutôt d'un conteneur Docker avec le processeur suivant :
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 48
On-line CPU(s) list: 0-47
Thread(s) per core: 2
Core(s) per socket: 12
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel(R) Xeon(R) Gold 6146 CPU @ 3.20GHz
[...]
Pourquoi Docker ? Nous travaillons sur un projet qui évalue la pertinence d'utiliser des conteneurs au lieu de serveurs physiques. Retour à la fio
question.
Je me souviens que j'avais des problèmes avec fio
de traiter un ensemble de données composé de nombreux petits fichiers auparavant. J'ai donc effectué les vérifications suivantes :
[root@tbn-6 src]# ulimit -Hn
8388608
[root@tbn-6 src]# ulimit -Sn
8388608
[root@tbn-6 src]# cat /proc/sys/kernel/shmmax
18446744073692774399
Tout m'a semblé correct. J'ai aussi compilé, au moment où j'écris ces lignes le dernier fio 3.23 avec GCC 9.
[root@tbn-6 src]# fio --version
fio-3.23
Voici le fichier de travail :
[root@tbn-6 src]# cat testfio.ini
[writetest]
thread=1
blocksize=2m
rw=randwrite
direct=1
buffered=0
ioengine=psync
gtod_reduce=1
numjobs=12
iodepth=1
runtime=180
group_reporting=1
percentage_random=90
opendir=./1048576x1MiB
Note : de ce qui précède, on peut retirer ce qui suit :
[...]
gtod_reduce=1
[...]
runtime=180
group_reporting=1
[...]
Le reste MUST être conservée. En effet, selon nous, le fichier de travail doit être configuré de manière à émuler le plus fidèlement possible les interactions de l'application avec le stockage, même si l'on sait que le fichier de travail n'a pas encore été créé. fio
!= the application
.
J'ai fait la première manche comme ça
[root@tbn-6 src]# fio testfio.ini
smalloc: OOM. Consider using --alloc-size to increase the shared memory available.
smalloc: size = 368, alloc_size = 388, blocks = 13
smalloc: pool 0, free/total blocks 1/524320
smalloc: pool 1, free/total blocks 8/524320
smalloc: pool 2, free/total blocks 10/524320
smalloc: pool 3, free/total blocks 10/524320
smalloc: pool 4, free/total blocks 10/524320
smalloc: pool 5, free/total blocks 10/524320
smalloc: pool 6, free/total blocks 10/524320
smalloc: pool 7, free/total blocks 10/524320
fio: filesetup.c:1613: alloc_new_file: Assertion `0' failed.
Aborted (core dumped)
OK, il est donc temps d'utiliser le --alloc-size
[root@tbn-6 src]# fio --alloc-size=776 testfio.ini
smalloc: OOM. Consider using --alloc-size to increase the shared memory available.
smalloc: size = 368, alloc_size = 388, blocks = 13
smalloc: pool 0, free/total blocks 1/524320
smalloc: pool 1, free/total blocks 8/524320
smalloc: pool 2, free/total blocks 10/524320
smalloc: pool 3, free/total blocks 10/524320
smalloc: pool 4, free/total blocks 10/524320
smalloc: pool 5, free/total blocks 10/524320
smalloc: pool 6, free/total blocks 10/524320
smalloc: pool 7, free/total blocks 10/524320
smalloc: pool 8, free/total blocks 8/524288
smalloc: pool 9, free/total blocks 8/524288
smalloc: pool 10, free/total blocks 8/524288
smalloc: pool 11, free/total blocks 8/524288
smalloc: pool 12, free/total blocks 8/524288
smalloc: pool 13, free/total blocks 8/524288
smalloc: pool 14, free/total blocks 8/524288
smalloc: pool 15, free/total blocks 8/524288
fio: filesetup.c:1613: alloc_new_file: Assertion `0' failed.
Aborted (core dumped)
Retour à la case départ :(
Je dois manquer quelque chose. Toute aide est la bienvenue.