Container Storage Interface(CSI)コンポーネントの反復アップグレードに伴い、新機能をサポートするために ossfs 1.0 を特定のバージョンに変更する必要があります。クラスタで CSI 1.30.1 以降を使用している場合は、特定の機能ゲートを有効にして ossfs を 1.91 以降にアップグレードし、ファイルシステムのパフォーマンスを向上させることができます。このトピックでは、ossfs 1.0 のバージョン 1.91 以降の新機能について説明し、ベンチマークパフォーマンスの比較を提供します。新機能には、移植可能なオペレーティングシステムインタフェース(POSIX)操作の最適化、readdir の最適化、ダイレクトリードが含まれます。
ファイルシステムに高い要件がある場合は、ossfs 1.0 のバージョンを 1.91 以降に変更することをお勧めします。詳細については、「ossfs 1.0 のバージョンを 1.91 以降に変更する」をご参照ください。
バージョン 1.91 以降の新機能
ossfs 1.0 のバージョン 1.88.x と比較して、バージョン 1.91 以降では以下の機能変更が適用されています。このセクションでは、機能変更の基本的な説明のみを提供します。機能変更とバージョン 1.91 以降のリリースノートの詳細については、「ossfs changelog」をご参照ください。
ossfs 機能は、Elastic Compute Service(ECS)ノードでのみ使用できます。
POSIX の操作の最適化と問題の修正
OSS ボリュームは、OSS バケットに存在しないサブパスにマウントできます。
OSS でオブジェクトを作成するときに、ゼロバイトファイルをアップロードできなくなりました。マルチパートアップロードの使用時に EntityTooSmall エラーが断続的に発生する問題が修正されました。追加操作が改善されました。
特定のパラメータのデフォルト値は、オープンソース ossfs のバージョンとパフォーマンスベンチマークの結果に基づいて変更されています。
パラメータ
説明
バージョン 1.88.x のデフォルト値
バージョン 1.91 以降のデフォルト値
stat_cache_expireメタデータの有効期間。単位:秒。
-1(メタデータの有効期限は切れません)
900
multipart_thresholdマルチパートアップロードを使用してアップロードできるファイルのサイズしきい値。単位:MB。
5 x 1024
25
max_dirty_dataダーティデータをディスクに強制的にフラッシュするためのサイズしきい値。単位:MB。
-1(ダーティデータは強制的にフラッシュされません)
5120
バージョン 1.91 以降のパフォーマンスを最大化するために、次のパラメータはバージョン 1.88.x と互換性があり、オープンソース ossfs とは異なるデフォルト値を持ちます。
パラメータ
説明
オープンソースバージョン 1.91 以降のデフォルト値
バージョン 1.91 以降のデフォルト値
multipart_sizeマルチパートアップロードを使用する場合のパートサイズ。単位:MB。
10
30
parallel_count同時にアップロードできるパート数。
5
20
ossfs 1.0 のバージョン 1.91 以降で上記のパラメータをロールバックまたは変更する場合は、マウントされている永続ボリューム(PV)の
otherOptsパラメータを変更します。
readdir の最適化
readdir の最適化機能は、ファイルシステムの走査効率を向上させるために導入されました。
OSS ボリュームのマウント時に認証や chmod コマンドの実行などの移植可能なオペレーティングシステムインタフェース(POSIX)操作をサポートするために、システムは多数の HeadObject 操作を呼び出して、オブジェクトの権限、変更時刻、ユーザー識別子(UID)、グループ識別子(GID)など、OSS バケットのマウントパスにあるすべてのオブジェクトのメタデータをクエリします。一部のパスに多数のファイルが存在する場合、ossfs のパフォーマンスに悪影響を与える可能性があります。
readdir の最適化機能を有効にすると、システムは上記のメタデータを無視して readdir のパフォーマンスを最適化します。次の項目に注意してください。
chmod コマンドまたは chown コマンドは有効になりません。
シンボリックリンクを使用してオブジェクトにアクセスすると、エラーが発生する可能性があります。 ossfs はハードリンクをサポートしていません。
次の表に、readdir の最適化機能を有効にするために必要なパラメータを示します。
パラメータ | 説明 | 有効化方法 | バージョン 1.91 以降のデフォルト値 |
| readdir の最適化機能を有効にするかどうかを指定します。 | パラメータの値を指定せずに | 無効 |
| シンボリックリンクのメタデータ記録を有効にするかどうかを指定します。この機能を有効にすると、シンボリックリンクのメタデータが記録され、シンボリックリンクが予期どおりに表示されるようになります。 | パラメータの値を指定せずに | 無効 |
ダイレクトリード
ダイレクトリード機能は、大きなファイルに対して実行されるシーケンシャルリード(読み取り専用シナリオ)のパフォーマンスを向上させるために導入されました。
OSS ボリュームのマウント時に書き込みとランダムリードをサポートするために、ossfs は OSS サーバーからディスクにファイルをダウンロードし、ディスク上のデータを読み取ります。この場合、ossfs の読み取りパフォーマンスはディスク I/O によって制限されます。
ダイレクトリード機能は、OSS からメモリにデータをプリフェッチし、プリフェッチされたデータはすぐにディスクにフラッシュされません。これにより、ossfs はメモリから直接データを読み取ることができ、シーケンシャルリードのパフォーマンスが向上します。次の項目に注意してください。
この機能は、シーケンシャルリード(読み取り専用シナリオ)のみを実行するために使用することをお勧めします。他の操作を実行する場合、次の制限が適用されます。
ランダムリードを実行すると、ossfs はデータを再度プリフェッチします。多数のランダムリードは、ossfs の読み取りパフォーマンスを低下させる可能性があります。
書き込みを実行すると、データ整合性を確保するために、データがメモリからディスクにフラッシュされます。
ダイレクトリード機能を有効にすると、
use_cacheパラメータは有効になりません。OSS からメモリにデータをプリフェッチすると、メモリ使用量が増加する可能性があります。次の表を参照して direct_read_prefetch_limit パラメータを設定し、ossfs のメモリ使用量を制限できます。 ossfs のメモリ使用量が上限に達すると、ossfs はデータのプリフェッチを停止します。この場合、ossfs の読み取りパフォーマンスはネットワーク I/O によって制限されます。
次の表に、ダイレクトリード機能を有効にするために必要なパラメータを示します。
パラメータ | 説明 | バージョン 1.91 以降のデフォルト値 |
| ダイレクトリード機能を有効にするかどうかを指定します。パラメータの値を指定せずに -o direct_read を指定することで、ダイレクトリード機能を有効にできます。 | 無効 |
| ossfs プロセスによってプリフェッチされたデータを格納するために使用できる最大メモリサイズ。単位:MB。 | 1024(最小:128) |
プリフェッチ以外の方法でシーケンシャルリードのパフォーマンスを向上させる場合は、-o direct_read_prefetch_chunks=0 パラメータを設定できます。これにより、ossfs は OSS サーバーからデータを読み取ることができます。この場合、ossfs の読み取りパフォーマンスはネットワーク I/O によって制限されます。
ossfs 1.0 をバージョン 1.91 以降に変更するためのベストプラクティス
OSS サーバーに多数のオブジェクトが存在し、サービスでオブジェクトメタデータが不要な場合は、ossfs 1.0 をバージョン 1.91 以降に更新し、ossfs に
-o readdir_optimizeパラメータを設定することをお勧めします。 OSS バケットでバージョン管理が有効になっている場合は、ossfs に-o listobjectsv2パラメータも設定することをお勧めします。読み取り/書き込みシナリオでは、「OSS 読み取り/書き込み分離のベストプラクティス」を参照して、OSS の読み取りと書き込みを分離することをお勧めします。読み取りと書き込みを分離しない場合は、マルチパートアップロードの使用時に EntityTooSmall エラーが断続的に発生する問題を修正するために、ossfs をバージョン 1.91 以降に変更することをお勧めします。データ整合性を確保するために、ossfs に
-o max_stat_cache_size=0パラメータも設定することをお勧めします。読み取り専用シナリオ
大きなファイルに対してシーケンシャルリード(読み取り専用シナリオ)を実行する必要がない場合は、
-o direct_readパラメータを設定してダイレクトリード機能を有効にすることをお勧めします。ファイルが頻繁に読み取られる場合は、次のパラメータを設定してローカルキャッシュを使用して読み取りを高速化することをお勧めします。
-o kernel_cacheパラメータを設定してページキャッシュを使用します。-o use_cache=/path/to/cacheパラメータを設定してディスクキャッシュを使用します。
バージョン 1.88.x とバージョン 1.91 以降のパフォーマンス比較
ベンチマーク結果は、使用されるベンチマークツールによって異なる場合があります。このセクションでは、sysbench またはカスタムスクリプトを使用して ossfs をベンチマークします。
スループットの比較
この例では、readdir の最適化機能とダイレクトリード機能は無効になっており、ecs.g7.xlarge タイプのノードが使用されています。ノードのシステムディスクのパフォーマンスレベル(PL)は 0 です。 sysbench を使用して、それぞれ 8 MiB のサイズの 128 個のファイルに対するシーケンシャルリード、シーケンシャル書き込み、ランダムリード、ランダム書き込みのパフォーマンスをテストすることにより、バージョン 1.91 以降とバージョン 1.88.x をベンチマークします。次の図は、ベンチマーク結果を示しています。
この図は、readdir の最適化機能とダイレクトリード機能が無効になっている場合の次の比較結果を示しています。
バージョン 1.88.x は、ファイルの作成とシーケンシャルリードでより高いスループットを提供します。
バージョン 1.91 以降は、シーケンシャルリード、ランダムリード、ランダム書き込みでより高いスループットを提供します。
readdir の最適化が有効になった後の ls コマンドと find コマンドのパフォーマンス比較
readdir の最適化を有効にし、1,000 個のファイルに対して ls コマンドと find コマンドを実行し、各実行のレイテンシを記録します。次の図は、ベンチマーク結果を示しています。
この図は、バージョン 1.88.x、readdir の最適化が無効になっているバージョン 1.91 以降、readdir の最適化が有効になっているバージョン 1.91 以降の比較結果を示しています。
readdir の最適化が有効になっているバージョン 1.91 以降の
lsコマンドのファイル読み取りレイテンシは、バージョン 1.88.x よりも 74.8% 低く、readdir の最適化が無効になっているバージョン 1.91 以降よりも 74.3% 低くなっています。パフォーマンスはそれぞれ元の 4.0 倍と 3.9 倍に向上しています。readdir の最適化が有効になっているバージョン 1.91 以降の
findコマンドのファイル読み取りレイテンシは、バージョン 1.88.x よりも 58.8% 低く、readdir の最適化が無効になっているバージョン 1.91 以降よりも 58.8% 低くなっています。パフォーマンスはそれぞれ元の 2.4 倍と 2.4 倍に向上しています。
ダイレクトリードが有効になった後の大きなファイルのシーケンシャルリードパフォーマンスの比較
ダイレクトリードが無効になっている ossfs とダイレクトリードが有効になっている ossfs を使用して、それぞれ 10 GB のサイズの 10 個のファイルに対して同時にシーケンシャルリードを実行します。次に、異なる ossfs バージョンのレイテンシ、最大ディスク容量使用量、最大メモリ使用量を記録します。次の図は、結果を示しています。
最大メモリ使用量とは、プリフェッチされたデータによって使用されるメモリ量と、ダイレクト機能によって他の目的で使用されるメモリを含む、すべての ossfs プロセスによって使用されるメモリ量を指します。
この図は、バージョン 1.88.x、ダイレクトリードが無効になっているバージョン 1.91 以降、ダイレクトリードが有効になっているバージョン 1.91 以降の比較結果を示しています。
ダイレクト読み取りが有効になっているバージョン 1.91 以降の大きなファイルの読み取りレイテンシは、バージョン 1.88.x より 85.3% 低く、ダイレクト読み取りが無効になっているバージョン 1.91 以降より 79% 低くなっています。
ダイレクト読み取りが有効になっているバージョン 1.91 以降の最大ディスク容量は 0 で、バージョン 1.88.x およびダイレクト読み取りが無効になっているバージョン 1.91 以降よりも小さくなっています。
ダイレクト読み取りが有効になっているバージョン 1.91 以降の最大メモリ使用量は、バージョン 1.88.x およびダイレクト読み取りが無効になっているバージョン 1.91 以降よりもわずかに大きくなります。このメモリ使用量の増加により、ダイレクト読み取りが有効になっているバージョン 1.91 以降では、最大ディスク容量を 0 にすることができます。
ossfs 1.0 のベンチマーク方法
ossfs 1.0 パフォーマンスベンチマークは、コンテナーまたは ECS インスタンスで実行できます。前述の例では、sysbench またはカスタムスクリプトを使用して ossfs をベンチマークしています。ossfs 1.0 をバージョン 1.91 以降に変更し、テスト環境でバージョン 1.91 以降をベンチマークできます。このセクションでは、コンテナー化されたテスト環境で ossfs 1.0 をベンチマークする方法について説明します。
手順
OSS ボリュームと永続ボリューム要求 (PVC) を作成します。新しい OSS バケットとバケット内の新しいサブパスを作成することをお勧めします。詳細については、「静的にプロビジョニングされた OSS ボリュームをマウントする」をご参照ください。
次のコードブロックに基づいて sysbench.yaml ファイルを作成します。このファイルは、前の手順で作成した PVC がマウントされる sysbench アプリケーションを作成するために使用されます。
次のコマンドを実行して、sysbench アプリケーションをデプロイします。
kubectl apply -f sysbench.yamlsysbench コンテナーにログインし、マウントパスで次の表にリストされているコマンドを実行して、読み取り/書き込みスループットをベンチマークします。
説明コマンドのパラメーター値は、実際のノード仕様またはビジネス要件に基づいて変更してください。
連続したテストを実行する場合は、新しいテスト用に新しいテストファイルを準備して、データキャッシュがテスト結果に与える影響を排除することをお勧めします。
操作
コマンド
テストファイルを準備する
sysbench --num-threads=2 --max-requests=0 --max-time=120 --file-num=128 --file-block-size=16384 --test=fileio --file-total-size=1G --file-test-mode=rndrw prepareシーケンシャル書き込み I/O をテストする
sysbench --num-threads=2 --max-requests=0 --max-time=120 --file-num=128 --file-block-size=16384 --test=fileio --file-total-size=1G --file-test-mode=seqwr --file-fsync-freq=0 runシーケンシャル読み取り I/O をテストする
sysbench --num-threads=2 --max-requests=0 --max-time=120 --file-num=128 --file-block-size=16384 --test=fileio --file-total-size=1G --file-test-mode=seqrd --file-fsync-freq=0 runランダム読み取り/書き込み I/O をテストする
sysbench --num-threads=2 --max-requests=0 --max-time=120 --file-num=128 --file-block-size=16384 --test=fileio --file-total-size=1G --file-test-mode=rndrw --file-fsync-freq=0 runテストファイルを削除する
sysbench --test=fileio --file-total-size=1G cleanup
次の手順
sysbench が提供する MySQL ベンチマークツールを使用して、さまざまなバージョンの ossfs をベンチマークできます。
lsコマンドとfindコマンドを実行するか、同時にシーケンシャル読み取りを実行することにより、前述のテスト環境で readdir の最適化と直接読み取り機能をテストすることもできます。