すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ossfs 1.91以降およびossfsパフォーマンスベンチマークの機能

最終更新日:Oct 21, 2024

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_optimize

readdir最適化機能を有効にするかどうかを指定します。

-o readdir_optimizeを指定すると、パラメーターの値を指定せずにreaddir最適化機能を有効にできます。

disable

symlink_in_meta

シンボリックリンクのメタデータ記録を有効にするかどうかを指定します。 この機能を有効にすると、シンボリックリンクのメタデータが記録され、シンボリックリンクが期待どおりに表示されるようになります。

-o symlink_in_metaを指定すると、パラメーターの値を指定せずにこの機能を有効にできます。

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以降のデフォルト値

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パラメーターも設定することを推奨します。

  • 読み書きシナリオでは、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に対してベンチマークするために使用されます。 次の図は、ベンチマークの結果を示しています。

image

図は、readdir最適化機能と直接読み取り機能無効になっている場合の比較結果を示しています。

  • ossfs 1.88.xは、ファイル作成とシーケンシャル読み取りのスループットを向上させます。

  • ossfs 1.91は、シーケンシャルリード、ランダムリード、およびランダムライトのスループットを向上させます。

readdir最適化を有効にした後のls and find command performance comparison

readdir最適化を有効にし、1,000のファイルでlsfindコマンドを実行し、各実行のレイテンシを記録します。 次の図は、ベンチマークの結果を示しています。

image

この図は、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プロセスで使用されるメモリの量を指します。これには、プリフェッチされたデータで使用されるメモリの量や、他の目的で直接機能で使用されるメモリの量が含まれます。

image

この図は、直接読み取りが無効になっている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をベンチマークする方法について説明します。

手順

  1. OSSボリュームと永続ボリューム要求 (PVC) を作成します。 新しいOSSバケットとバケット内の新しいサブパスを作成することを推奨します。 詳細については、「静的にプロビジョニングされたOSSボリュームのマウント」をご参照ください。

  2. 次のコードブロックに基づいてsysbench.yamlファイルを作成します。 このファイルは、前の手順で作成したPVCがマウントされるsysbenchアプリケーションを作成するために使用されます。

    sysbench.yamlのサンプルコードを表示

    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
  3. 次のコマンドを実行して、sysbenchアプリケーションをデプロイします。

    kubectl apply -f sysbench.yaml
  4. 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最適化機能と直接読み取り機能をテストすることもできます。