Comparaison des performances d'ossfs 2,0, ossfs 1,0 et goofys lors d'opérations d'E/S séquentielles et de lectures concurrentes de petits fichiers, en mesurant le débit, l'utilisation du processeur et la consommation mémoire.
Environnement de test
-
Environnement matériel
Type d'instance : ecs.g9i.48xlarge
vCPU : 192 vCPUs
Mémoire : 768 GiB
Bande passante réseau : 64 Gbps
-
Environnement logiciel
Système d'exploitation : Alibaba Cloud Linux 3.2104 LTS 64 bits
Version du noyau : 5.10.134-18.al8.x86_64
Versions des outils : ossfs 2.0.4, ossfs 1.91.8 et goofys 0.24.0
Configurations de montage
Options de montage utilisées pour ce benchmark :
Ce test utilise des endpoints HTTPS. Dans un environnement de confiance, les endpoints HTTP réduisent la charge processeur tout en offrant le même débit.
ossfs 2.0.4
-
Fichier de configuration de montage (ossfs2.conf)
La taille des parties d'upload est définie à 33 554 432 octets (32 Mo).
# The endpoint of the bucket's region --oss_endpoint=https://oss-cn-hangzhou-internal.aliyuncs.com # The bucket name --oss_bucket=bucket-test # The AccessKey ID and AccessKey secret --oss_access_key_id=yourAccessKeyID --oss_access_key_secret=yourAccessKeySecret # The upload part size, in bytes --upload_buffer_size=33554432 -
Commande de montage
Montez
bucket-testsur/mnt/ossfs2/en utilisantossfs2.conf:ossfs2 mount /mnt/ossfs2/ -c /etc/ossfs2.conf
ossfs 1.91.8
Montez bucket-test sur /mnt/ossfs avec la lecture directe et l'optimisation du cache activées :
ossfs bucket-test /mnt/ossfs -ourl=https://oss-cn-hangzhou-internal.aliyuncs.com -odirect_read -oreaddir_optimize
goofys 0.24.0
Montez bucket-test sur /mnt/goofys :
goofys --endpoint https://oss-cn-hangzhou-internal.aliyuncs.com --subdomain bucket-test --stat-cache-ttl 60s --type-cache-ttl 60s /mnt/goofys
Scénarios de test
Chaque outil monte le même bucket, puis FIO mesure les performances en lecture/écriture. Voici les résultats.
Écriture séquentielle mono-thread (100 Go)
Les performances en écriture d'ossfs 1,0 sont limitées par les E/S disque.
-
Commande de test
Écriture directe mono-thread de 100 Go avec une taille de bloc de 1 Mo :
fio --name=file-100G --ioengine=libaio --rw=write --bs=1M --size=100G --numjobs=1 --direct=1 --directory=/mnt/oss/fio_direct_write --group_reporting -
Résultats du test
Outil
Bande passante
Utilisation des cœurs CPU (100 % pour un cœur entièrement chargé)
Mémoire maximale
ossfs 2,0
2,2 Go/s
207 %
2 167 Mo
ossfs 1,0
118 Mo/s
5 %
15 Mo
goofys
450 Mo/s
250 %
7,5 Go
Lecture séquentielle mono-thread (100 Go)
-
Commande de test
Videz le cache de pages, puis lancez une lecture séquentielle mono-thread avec des blocs de 1 Mo :
echo 1 > /proc/sys/vm/drop_caches fio --name=file-100G --ioengine=libaio --direct=1 --rw=read --bs=1M --directory=/mnt/oss/fio_direct_write --group_reporting --numjobs=1 -
Résultats du test
Outil de test
Bande passante
Utilisation des cœurs CPU (100 % pour un cœur entièrement chargé)
Mémoire maximale
ossfs 2,0
4,3 Go/s
610 %
1 629 Mo
ossfs 1,0
1,0 Go/s
530 %
260 Mo
goofys
1,3 Go/s
270 %
976 Mo
Lecture séquentielle multi-thread (4 × 100 Go)
-
Génération des fichiers de test
Créez quatre fichiers de test de 100 Go dans
/mnt/oss/fio:fio --name=file-100g --ioengine=libaio --direct=1 --iodepth=1 --numjobs=4 --nrfiles=1 --rw=write --bs=1M --size=100G --group_reporting --thread --directory=/mnt/oss/fio -
Commande de test
Videz le cache de pages, puis lisez quatre fichiers de 100 Go avec 4 threads pendant 30 secondes (blocs de 1 Mo) dans
/mnt/oss/fio:echo 1 > /proc/sys/vm/drop_caches fio --name=file-100g --ioengine=libaio --direct=1 --iodepth=1 --numjobs=4 --nrfiles=1 --rw=read --bs=1M --size=100G --group_reporting --thread --directory=/mnt/oss/fio --time_based --runtime=30 -
Résultats du test
Outil
Bande passante
Utilisation des cœurs CPU (100 % pour un cœur entièrement chargé)
Mémoire maximale
ossfs 2,0
7,4 Go/s
890 %
6,2 Go
ossfs 1,0
1,8 Go/s
739 %
735 Mo
goofys
2,8 Go/s
7 800 %
2,7 Go
Lecture concurrente de petits fichiers (128 threads, 100 000 × 128 Ko)
OSS impose par défaut une limite de 10 000 QPS. Pour reproduire ces résultats, assurez-vous qu'aucun autre service ne consomme le quota QPS du compte de test.
-
Étapes
-
Créez un programme Go nommé
rw-bench.go.Le programme crée ou lit des fichiers de manière concurrente dans un répertoire cible et indique le débit.
-
Compilez le fichier de programme
rw-bench.go.go build rw-bench.go -
Créez 100 000 fichiers (128 Ko chacun) dans le répertoire monté :
mkdir -p <path_to_mounted_test_directory> && ./rw-bench --dir <path_to_mounted_test_directory> --file-size-KB 128 --file-count 100000 --write -
Videz le cache de pages et exécutez le test cinq fois. Enregistrez les résultats en régime permanent une fois la latence stabilisée.
echo 1 > /proc/sys/vm/drop_caches ./rw-bench --dir <path_to_mounted_test_directory> --threads 128
-
-
Résultats du test
Outil
Bande passante
Utilisation des cœurs CPU (100 % pour un cœur entièrement chargé)
Mémoire maximale
ossfs 2,0
1 Go/s
247 %
176 Mo
ossfs 1,0
45 Mo/s
25 %
412 Mo
goofys
1 Go/s
750 %
1,3 Go