このテストでは、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)
バケットをマウントする際、アップロードパートサイズは 33554432 バイトに設定されます。
# バケットが属するリージョンのエンドポイント --oss_endpoint=https://oss-cn-hangzhou-internal.aliyuncs.com # バケット名 --oss_bucket=bucket-test # AccessKey ID と AccessKey Secret --oss_access_key_id=yourAccessKeyID --oss_access_key_secret=yourAccessKeySecret # アップロードパートサイズ (バイト単位) --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 を使用してバケットをマウントした後、FIO テストツールを使用して各ツールの基本的な読み書き性能を評価しました。テストシナリオと結果については、以下のセクションで説明します。
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 ツールを使用して、
/mnt/oss/fioディレクトリにある 4 つの 100 GB ファイルに対して、4 つの同時実行スレッドで 30 秒間の読み取りテストを実行します。テストではブロックサイズ 1 MB を使用し、結果を出力します。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 スレッドによる 100,000 個の 128 KB ファイルの同時読み取り
デフォルトでは、OSS には 1 秒あたり 10,000 クエリ (QPS) の制限があります。テスト結果に示されているパフォーマンスメトリックを達成するには、他のサービスがテストアカウントの QPS を消費しないようにしてください。
手順
rw-bench.goという名前の Go プログラムを作成します。このプログラムには、ターゲットディレクトリに同じサイズのファイルを複数同時作成する機能と、ターゲットディレクトリ内のすべてのファイルを同時読み取りする機能の 2 つの主要な機能があります。読み取り操作中、プログラムは指定された数のスレッドにファイルを割り当て、最終的な帯域幅を記録します。
rw-bench.goプログラムファイルをコンパイルします。go build rw-bench.go次のコマンドを使用して、OSS バケットがマウントされているローカルディレクトリに、それぞれ 128 KB のファイルを 100,000 個作成します。
mkdir -p <path_to_mounted_test_directory> && ./rw-bench --dir <path_to_mounted_test_directory> --file-size-KB 128 --file-count 100000 --writeシステムページキャッシュをクリアしてプログラムを実行します。テストは 5 回連続で実行されます。サーバー側のレイテンシーが安定した後、定常状態のテストデータを記録します。
echo 1 > /proc/sys/vm/drop_caches ./rw-bench --dir <path_to_mounted_test_directory> --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