Comparativas de rendimiento entre ossfs 2.0, ossfs 1.0 y goofys en operaciones de E/S secuencial y lecturas concurrentes de archivos pequeños, con medición de throughput, uso de CPU y consumo de memoria.
Entorno de pruebas
-
Entorno de hardware
Tipo de instancia: ecs.g9i.48xlarge
vCPU: 192 vCPU
Memoria: 768 GiB
Ancho de banda de red: 64 Gbps
-
Entorno de software
Sistema operativo: Alibaba Cloud Linux 3.2104 LTS 64-bit
Versión del kernel: 5.10.134-18.al8.x86_64
Versiones de herramientas: ossfs 2.0.4, ossfs 1.91.8 y goofys 0.24.0
Configuraciones de montaje
Opciones de montaje utilizadas en esta prueba de rendimiento:
Esta prueba utiliza endpoints HTTPS. En un entorno de confianza, los endpoints HTTP reducen la sobrecarga de CPU manteniendo el mismo throughput.
ossfs 2.0.4
-
Archivo de configuración de montaje (ossfs2.conf)
El tamaño de parte de carga se establece en 33554432 bytes (32 MB).
# 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 -
Comando de montaje
Monte
bucket-testen/mnt/ossfs2/medianteossfs2.conf:ossfs2 mount /mnt/ossfs2/ -c /etc/ossfs2.conf
ossfs 1.91.8
Monte bucket-test en /mnt/ossfs con lectura directa y optimización de caché habilitadas:
ossfs bucket-test /mnt/ossfs -ourl=https://oss-cn-hangzhou-internal.aliyuncs.com -odirect_read -oreaddir_optimize
goofys 0.24.0
Monte bucket-test en /mnt/goofys:
goofys --endpoint https://oss-cn-hangzhou-internal.aliyuncs.com --subdomain bucket-test --stat-cache-ttl 60s --type-cache-ttl 60s /mnt/goofys
Escenarios de prueba
Cada herramienta montó el mismo bucket y después se midió el rendimiento de lectura y escritura con FIO. A continuación se presentan los resultados.
Escritura secuencial de un solo hilo (100 GB)
El rendimiento de escritura de ossfs 1.0 está limitado por la E/S de disco.
-
Comando de prueba
Escritura directa de un solo hilo de 100 GB con tamaño de bloque de 1 MB:
fio --name=file-100G --ioengine=libaio --rw=write --bs=1M --size=100G --numjobs=1 --direct=1 --directory=/mnt/oss/fio_direct_write --group_reporting -
Resultados de la prueba
Herramienta
Ancho de banda
Utilización de núcleos de CPU (100% equivale a un núcleo totalmente cargado)
Memoria máxima
ossfs 2.0
2.2 GB/s
207%
2167 MB
ossfs 1.0
118 MB/s
5%
15 MB
goofys
450 MB/s
250%
7.5 GB
Lectura secuencial de un solo hilo (100 GB)
-
Comando de prueba
Borre la caché de páginas y ejecute una lectura secuencial de un solo hilo con bloques de 1 MB:
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 -
Resultados de la prueba
Herramienta de prueba
Ancho de banda
Utilización de núcleos de CPU (100% equivale a un núcleo totalmente cargado)
Memoria máxima
ossfs 2.0
4.3 GB/s
610%
1629 MB
ossfs 1.0
1.0 GB/s
530%
260 MB
goofys
1.3 GB/s
270%
976 MB
Lectura secuencial multihilo (4 × 100 GB)
-
Generación de archivos de prueba
Cree cuatro archivos de prueba de 100 GB en
/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 -
Comando de prueba
Borre la caché de páginas y lea cuatro archivos de 100 GB con 4 hilos durante 30 segundos (bloques de 1 MB) en
/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 -
Resultados de la prueba
Herramienta
Ancho de banda
Utilización de núcleos de CPU (100% equivale a un núcleo totalmente cargado)
Memoria máxima
ossfs 2.0
7.4 GB/s
890%
6.2 GB
ossfs 1.0
1.8 GB/s
739%
735 MB
goofys
2.8 GB/s
7800%
2.7 GB
Lectura concurrente de archivos pequeños (128 hilos, 100K × 128 KB)
OSS tiene una 10,000 QPS limit predeterminada. Para reproducir estos resultados, asegúrese de que ningún otro servicio consuma la cuota de QPS de la cuenta de prueba.
-
Pasos
-
Cree un programa en Go llamado
rw-bench.go.Este programa crea o lee archivos de forma concurrente en un directorio destino y reporta el throughput.
-
Compile el archivo de programa
rw-bench.go.go build rw-bench.go -
Cree 100,000 archivos (128 KB cada uno) en el directorio montado:
mkdir -p <path_to_mounted_test_directory> && ./rw-bench --dir <path_to_mounted_test_directory> --file-size-KB 128 --file-count 100000 --write -
Borre la caché de páginas y ejecute la prueba cinco veces. Registre los resultados en estado estable una vez que la latencia se estabilice.
echo 1 > /proc/sys/vm/drop_caches ./rw-bench --dir <path_to_mounted_test_directory> --threads 128
-
-
Resultados de la prueba
Herramienta
Ancho de banda
Utilización de núcleos de CPU (100% equivale a un núcleo totalmente cargado)
Memoria máxima
ossfs 2.0
1 GB/s
247%
176 MB
ossfs 1.0
45 MB/s
25%
412 MB
goofys
1 GB/s
750%
1.3 GB