このトピックでは、ファイルの読み取りおよび書き込み速度と同時実行シナリオでのパフォーマンスなど、さまざまなシナリオにおける ossfs 2.0 のパフォーマンスについて説明します。 この情報は、ビジネス運用に最適な ossfs 2.0 を選択して使用するための正確なパフォーマンスリファレンスを提供します。
テスト環境
ハードウェア
インスタンスタイプ: ecs.g7.32xlarge
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
マウント構成
コンテナー内の OSS ボリュームのマウントパスが /mnt/oss であると仮定します。
ossfs 2.0
このテストでは、
otherOptsパラメーターを追加して、マルチパートアップロードサイズを 33554432 バイトとして指定します。upload_buffer_size=33554432ossfs 1.0
このテストでは、
otherOptsパラメーターを追加して、ダイレクトリードモードとキャッシュの最適化を有効にします。-o direct_read -o readdir_optimize
テストシナリオ
ossfs 2.0.0beta と ossfs 1.91.4 を使用してバケットをマウントした後、flexible I/O tester (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%
2,167 MB
ossfs 1.0
118 MB/s
5%
15 MB
単一スレッドを使用して 100 GB のデータを順番に読み取る
テストコマンド
ページキャッシュをクリアした後、FIO を使用して、/mnt/oss/fio_direct_write ディレクトリから 1 MB のパートサイズで 100 GB のデータを単一スレッドを使用して順番に読み取り、テスト結果を出力します。
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%
1,617 MB
ossfs 1.0
355 MB/s
50%
400 MB
複数スレッドを使用して 100 GB のデータを順番に読み取る
テストファイルの生成
/mnt/oss/fioマウントディレクトリに、それぞれ 100 GB の 4 つのファイルを作成します。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 つのファイルを、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テスト結果
ossfs バージョン
帯域幅
CPU コア使用率 (コアの最大容量は 100%)
ピークメモリ
ossfs 2.0
7.1 GB/s
1,187%
6.2 GB
ossfs 1.0
1.4 GB/s
210%
1.6 GB
128 スレッドを使用して、それぞれ 128 KB の 100,000 ファイルを同時に読み取る
Object Storage Service (OSS) は、Alibaba Cloud アカウントごとに最大 10,000 クエリ/秒 (QPS) を提供します。 詳細については、「QPS」をご参照ください。 テストで目的のパフォーマンスを達成するには、Alibaba Cloud アカウントの QPS が他のビジネスで使用されていないことを確認してください。
テスト手順
rw-bench.goという名前の Go プログラムを作成します。このプログラムには、次の主要な機能があります。1. 宛先ファイルディレクトリに同じサイズの複数のファイルを同時に作成できます。 2. 宛先ファイルディレクトリ内のすべてのファイルを同時に読み取り、n 個のスレッドにファイルを読み取り用に割り当て、帯域幅データを記録できます。
rw-bench.goプログラムファイルをコンパイルします。go build rw-bench.goローカルファイルシステムにマウントされた OSS バケットディレクトリに、それぞれ 128 KB の 100,000 ファイルを作成します。
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