本次測試旨在深入評估不同版本ossfs及開源工具goofys在不同情境下的效能,包括檔案的讀寫速度、並發情境下的表現等,以便提供準確的效能參考,協助您更好地選擇和使用相關工具進行業務操作。
測試環境
硬體環境
執行個體規格:ecs.g9i.48xlarge
vCPU:192 vCPU
記憶體:768 GiB
網路頻寬:64 Gbps
軟體環境
作業系統:Alibaba Cloud Linux 3.2104 LTS 64位
核心版本:5.10.134-18.al8.x86_64
測試載入器版本:ossfs 2.0.4、ossfs 1.91.8、goofys 0.24.0
掛載配置
以下為效能測試中所使用的掛載選項樣本。
本次測試中均使用HTTPS網域名稱進行測試,在可信環境中可使用HTTP網域名稱進行掛載,在相同吞吐效能下將消耗更少的CPU資源。
ossfs 2.0.4
掛載設定檔(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.8
將bucket-test掛載至本地/mnt/ossfs目錄,同時開啟直讀模式與緩衝最佳化功能。
ossfs bucket-test /mnt/ossfs -ourl=https://oss-cn-hangzhou-internal.aliyuncs.com -odirect_read -oreaddir_optimizegoofys 0.24.0
將bucket-test掛載至本地/mnt/goofys目錄。
goofys --endpoint https://oss-cn-hangzhou-internal.aliyuncs.com --subdomain bucket-test --stat-cache-ttl 60s --type-cache-ttl 60s /mnt/goofys測試情境
使用ossfs 2.0.4、ossfs 1.91.8和goofys 0.24.0掛載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測試結果
測試載入器
頻寬
CPU核心佔用率(單個核心滿載為100%)
峰值記憶體
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
單線程順序讀取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測試結果
測試載入器
頻寬
CPU核心佔用率(單個核心滿載為100%)
峰值記憶體
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
多線程順序讀取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測試結果
測試載入器
頻寬
CPU核心佔用率(單個核心滿載為100%)
峰值記憶體
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
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
測試結果
測試載入器
頻寬
CPU核心佔用率(單個核心滿載為100%)
峰值記憶體
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