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