本次测试旨在深入评估ossfs 2.0在不同场景下的性能,包括文件的读写速度、并发场景下的表现等,以便提供准确的性能参考,帮助您更好地选择和使用ossfs 2.0进行相关业务操作。
测试环境
硬件环境
实例规格:ecs.g7.32xlarge (128vCPU 512GiB)。
vCPU:128 vCPU。
内存:512 GiB。
软件环境
操作系统:Alibaba Cloud Linux 3.2104 LTS 64位。
内核版本:5.10.134-18.al8.x86_64。
ossfs版本:ossfs 2.0.0beta、ossfs 1.91.4。
挂载配置
以下为ossfs性能测试中所使用的挂载选项示例。
ossfs 2.0.0beta
挂载配置文件(ossfs2.conf)
在挂载Bucket时,指定上传文件分片大小为33554432 Bytes。
# Bucket所处Endpoint(地域节点) --oss_endpoint=https://oss-cn-hangzhou-internal.aliyuncs.com # Bucket名称 --oss_bucket=bucket-test # 访问密钥AccessKey ID和AccessKey Secret --oss_access_key_id=yourAccessKeyID --oss_access_key_secret=yourAccessKeySecret # 上传文件分片大小,单位Bytes --upload_buffer_size=33554432
挂载命令
指定挂载配置文件
ossfs2.conf
,将bucket-test
挂载到本地/mnt/ossfs2/
目录。ossfs2 mount /mnt/ossfs2/ -c /etc/ossfs2.conf
ossfs 1.91.4
将bucket-test
挂载至本地/mnt/ossfs
目录,同时开启直读模式与缓存优化功能。
ossfs bucket-test /mnt/ossfs -ourl=https://oss-cn-hangzhou-internal.aliyuncs.com -odirect_read -oreaddir_optimize
测试场景
使用ossfs 2.0.0beta和ossfs 1.91.4挂载Bucket存储空间后,运用FIO测试工具,分别针对ossfs 2.0与ossfs 1.0的基本读写能力展开测试。具体测试场景及结果如下。
单线程顺序直写100 GB文件
ossfs 1.0的写入性能受磁盘性能制约。
测试命令
使用FIO工具,执行名为file-100G的单次单线程直接写测试任务,块大小为1 MB,写入总量100 GB的数据到/mnt/oss/fio_direct_write目录并输出测试结果。
fio --name=file-100G --ioengine=libaio --rw=write --bs=1M --size=100G --numjobs=1 --direct=1 --directory=/mnt/oss/fio_direct_write --group_reporting
测试结果
ossfs版本
带宽
CPU核心占用率(单个核心满载为100%)
峰值内存
ossfs 2.0
2.2 GB/s
207%
2167 MB
ossfs 1.0
118 MB/s
5%
15 MB
单线程顺序读取100 GB文件
测试命令
清除系统页面缓存,再用FIO工具对/mnt/oss/fio_direct_write目录下的100 GB文件进行单线程、块大小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
测试结果
ossfs版本
带宽
CPU核心占用率(单个核心满载为100%)
峰值内存
ossfs 2.0
3.0 GB/s
378%
1617 MB
ossfs 1.0
355 MB/s
50%
400 MB
多线程顺序读取100 GB文件
生成测试文件
在挂载目录
/mnt/oss/fio
下创建4个100 GB的文件用于多线程并发测试。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
测试命令
清除系统页面缓存,再用FIO工具通过4个并发线程对
/mnt/oss/fio
目录下的4个100 GB文件进行1 MB块大小的30秒读取测试,并输出测试结果。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
测试结果
ossfs版本
带宽
CPU核心占用率(单个核心满载为100%)
峰值内存
ossfs 2.0
7.1 GB/s
1187%
6.2 GB
ossfs 1.0
1.4 GB/s
210%
1.6 GB
128线程并发读10万128 KB文件
OSS默认提供10000的QPS限制。若要达到测试结果中的性能指标,需要确保测试账号的QPS不会被其他业务占用。
测试步骤
创建名为
rw-bench.go
的Go语言程序。此程序具备两项核心功能。其一,它能够并发地在目标文件目录下创建若干个大小相同的文件;其二,它可以并发读取目标文件目录下的所有文件,将这些文件分配给n个线程进行读取操作,并且记录最终的带宽数据。
编译
rw-bench.go
程序文件。go build rw-bench.go
在已挂载到本地的OSSBucket目录中,创建100000个128 KB大小的文件。
mkdir -p <已挂载测试文件夹路径> && ./rw-bench --dir <已挂载测试文件夹路径> --file-size-KB 128 --file-count 100000 --write
清除系统页面缓存并执行该程序,连续开展5次测试。在服务端时延趋于稳定后取稳态测试数据。
echo 1 > /proc/sys/vm/drop_caches ./rw-bench --dir <已挂载测试文件夹路径> --threads 128
测试结果
ossfs版本
带宽
CPU核心占用率(单个核心满载为100%)
峰值内存
ossfs 2.0
1 GB/s
247%
212 MB
ossfs 1.0
3.5 MB/s
3%
200 MB