Container Storage Interface (CSI) コンポーネントが反復更新を受けると、新しい機能を使用するためにossfsを対応するバージョンに更新する必要があります。 クラスターがCSI 1.30.1以降を使用する場合、特定の機能ゲートを有効にしてossfsを1.91以降に更新し、ファイルシステムのパフォーマンスを向上させることができます。 このトピックでは、ossfsバージョン1.91の新機能とベンチマークパフォーマンスの比較について説明します。 新しい機能には、ポータブルオペレーティングシステムインターフェイス (POSIX) 操作の最適化、readdir最適化、および直接読み取りが含まれます。
説明
ファイルシステムに対する要件が高い場合は、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以降のデフォルト値 |
パラメーター | 説明 | 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以降のデフォルト値 |
パラメーター | 説明 | オープンソースossfs 1.91以降のデフォルト値 | ossfs 1.91以降のデフォルト値 |
multipart_size
| マルチパートアップロードを使用する場合のパーツサイズ。 単位:MB。 | 10 | 30 |
parallel_count
| 同時にアップロードできるパーツの数。 | 5 | 20 |
ossfs 1.91以降で前述のパラメーターをロールバックまたは変更する場合は、マウントされている永続ボリューム (PV) のotherOpts
パラメーターを変更します。
新機能: readdir最適化
readdir最適化機能は、ファイルシステムのトラバースの効率を向上させるために導入されます。
OSSボリュームのマウント時の認証やchmodコマンド実行などのPOSIX (Portable Operating System Interface) 操作をサポートするために、システムは多数のHeadObject操作を呼び出して、OSSバケットのマウントパスにあるすべてのオブジェクトのメタデータ (アクセス許可、変更時間、ユーザー識別子 (UID) 、グループ識別子 (GID) など) を照会します。 一部のパスに多数のファイルが存在する場合、ossfsのパフォーマンスに悪影響を与える可能性があります。
readdir最適化機能を有効にすると、システムは前述のメタデータを無視して、readdirのパフォーマンスを最適化します。 以下の点にご注意ください。
次の表に、readdir最適化機能を有効にするために必要なパラメーターを示します。
パラメーター | 説明 | How to enable | ossfs 1.91以降のデフォルト値 |
パラメーター | 説明 | How to enable | ossfs 1.91以降のデフォルト値 |
readdir_optimize
| readdir最適化機能を有効にするかどうかを指定します。 | -o readdir_optimize を指定すると、パラメーターの値を指定せずにreaddir最適化機能を有効にできます。
| disable |
symlink_in_meta
| シンボリックリンクのメタデータ記録を有効にするかどうかを指定します。 この機能を有効にすると、シンボリックリンクのメタデータが記録され、シンボリックリンクが期待どおりに表示されるようになります。 | -o symlink_in_meta を指定すると、パラメーターの値を指定せずにこの機能を有効にできます。
| disable |
新機能: 直接読み取り
直接読み取り機能は、大きなファイルで実行されるシーケンシャル読み取り (読み取り専用シナリオ) のパフォーマンスを向上させるために導入されます。
OSSボリュームのマウント時に書き込みとランダム読み取りをサポートするために、ossfsはOSSサーバーからディスクにファイルをダウンロードし、ディスク上のデータを読み取ります。 この場合、ossfsの読み取りパフォーマンスはディスクI/Oによって制限されます。
直接読み取り機能は、OSSからメモリにデータをプリフェッチし、プリフェッチされたデータはすぐにディスクにフラッシュされません。 このように、ossfsはメモリからデータを直接読み取ることができ、シーケンシャル読み取りのパフォーマンスが向上します。 以下の点にご注意ください。
この機能を使用して、シーケンシャル読み取り (読み取り専用シナリオ) のみを実行することを推奨します。 他の操作を実行する場合は、次の制限が適用されます。
直接読み取り機能を有効にすると、use_cache
パラメーターは有効になりません。
データがOSSからメモリにプリフェッチされると、メモリ使用量が増加する可能性があります。 次の表を参照して、direct_read_prefetch_limitパラメーターを設定し、ossfsのメモリ使用量を制限できます。 ossfsのメモリ使用量が上限に達すると、ossfsはデータのプリフェッチを停止します。 この場合、ossfsの読み取りパフォーマンスはネットワークI/Oによって制限されます。
次の表に、直接読み取り機能を有効にするために必要なパラメーターを示します。
パラメーター | 説明 | ossfs 1.91以降のデフォルト値 |
パラメーター | 説明 | ossfs 1.91以降のデフォルト値 |
direct_read
| 直接読み取り機能を有効にするかどうかを指定します。 -o direct_readを指定すると、パラメーターの値を指定せずに直接読み取り機能を有効にできます。 | disable |
direct_read_prefetch_limit
| 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
パラメーターも設定することを推奨します。
読み書きシナリオでは、OSS読み書き分離のベストプラクティスを参照して、OSSの読み書きを分割することを推奨します。 読み書きを分割しない場合は、マルチパートアップロードを使用するときにEntityTooSmallエラーが時々発生するという問題を修正するために、ossfsを1.91以降に更新することをお勧めします。 データの一貫性を確保するために、ossfsに -o max_stat_cache_size=0
パラメーターも設定することを推奨します。
読み取り専用シナリオ
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最適化機能と直接読み取り機能が無効になっている場合の比較結果を示しています。
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アプリケーションを作成するために使用されます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: sysbench
labels:
app: sysbench
spec:
replicas: 1
selector:
matchLabels:
app: sysbench
template:
metadata:
labels:
app: sysbench
spec:
containers:
- name: sysbench
image: registry.cn-beijing.aliyuncs.com/tool-sys/tf-train-demo:sysbench-sleep
ports:
- containerPort: 80
volumeMounts:
- name: pvc-oss
mountPath: "/data"
livenessProbe:
exec:
command:
- sh
- -c
- cd /data
initialDelaySeconds: 30
periodSeconds: 30
volumes:
- name: pvc-oss
persistentVolumeClaim:
claimName: pvc-oss
次のコマンドを実行して、sysbenchアプリケーションをデプロイします。
kubectl apply -f sysbench.yaml
sysbenchコンテナーにログインし、次の表に示すコマンドをマウントパスで実行して、読み取り /書き込みスループットをベンチマークします。
操作 | コマンド |
テストファイルの準備 |
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
|
次に何をすべきか