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

Object Storage Service:EFC を使用した OSS アクセスの高速化

最終更新日:Dec 19, 2025

Elastic File Client (EFC) は、計算側でのデータアクセスを高速化するソリューションです。OSS バケットをローカルファイルシステムとしてマウントし、計算ノードのメモリとディスクを使用して、高速な読み取り専用の分散キャッシュを構築します。このプロセスにより、リモートの Object Storage Service (OSS) アクセスが効率的なピアツーピア (P2P) 内部ネットワーク転送に変換され、AI のトレーニングや推論シナリオにおけるアクセスレイテンシーを削減し、データスループットを向上させます。

:EFC のキャッシュ機能は現在、招待プレビュー段階にあり、この期間中は無料でご利用いただけます。

仕組み

EFC は、計算ノードにデプロイされるユーザーモードのファイルシステムクライアントです。アプリケーションがマウントポイントを介してデータを読み取る際、EFC はこれらのリクエストを傍受し、以下の手順を実行します。

  1. キャッシュクエリ:EFC はまず、ローカルノードおよび P2P ネットワークを介して他のピアノードのキャッシュ (メモリまたはディスク) 内でデータを検索します。

  2. キャッシュヒット:データがキャッシュ内に存在する場合、EFC はキャッシュから直接アプリケーションにデータを返します。これは高速な内部ネットワーク操作です。

  3. キャッシュミス (オリジンフェッチ):どのノードのキャッシュにもデータが存在しない場合、EFC はソース OSS バケットからデータをプルし、ローカルキャッシュに保存してからアプリケーションに返します。このデータに対する後続のリクエストはキャッシュヒットになります。

このようにして、EFC は同一データセットへの頻繁なリモートアクセスを、単一のオリジンフェッチと複数の高速な内部キャッシュアクセスに集約します。総スループット容量は、計算ノード数に応じて線形にスケールできます。

キャッシュパフォーマンスメトリック:シングルノードで最大 15 GB/s のスループットと 200,000 IOPS を達成できます。パフォーマンスはノード数に比例して線形にスケールし、ネットワーク帯域幅の制限を受けます。

主な利点

  • 計算側の高速キャッシュ:計算ノードのメモリとローカルディスクを使用して読み取りキャッシュを構築します。データプリフェッチと最近最も使用されていない (LRU) 削除ポリシーをサポートし、リモートアクセスのレイテンシーを削減します。

  • P2P 分散アクセラレーション:ノードは P2P ネットワークを介してキャッシュデータを共有します。総スループットはノード数に比例して線形にスケールし、数百から数千ノードのクラスターをサポートします。P2P の仕組みは以下の通りです。

    image
  • POSIX 互換性openreadreaddir などの一般的な POSIX ファイルインターフェイスと互換性があります。アプリケーションは修正なしで OSS データにアクセスできます。

制限事項

EFC を使用する前に、ご利用のビジネスシナリオと技術環境が以下の要件を満たしていることを確認する必要があります。

ランタイム環境

タイプ

要件

プラットフォーム

Platform for AI (PAI) (Lingjun リソース)、Lingjun ベアメタル

オペレーティングシステム

Alibaba Cloud Linux 3 (カーネル 5.10.134-13+)、Ubuntu 24.04 (カーネル 6.8.0-79+)

ハードウェアリソース要件

EFC クライアントは計算ノードのメモリとディスクリソースを消費します。キャッシュ機能を有効にするかどうかに基づいてリソースを計画できます。

  • キャッシュ機能が無効の場合

    • メモリ:常駐メモリ使用量は通常 1 GiB 未満です。バーストワークロードに対応するために、少なくとも 5 GiB の利用可能なメモリを確保する必要があります。

    • ディスク:特別なディスク領域は必要ありません。ただし、システムディスクに運用ログを保存するための十分な空き容量があることを確認する必要があります。

  • キャッシュ機能が有効の場合

    キャッシュが有効な場合、リソース消費は主にキャッシュ媒体とインデックスのオーバーヘッドで構成されます。

    • メモリリソース

      • 基本消費量:キャッシュ機能が無効の場合と同じです。

      • メモリキャッシュ:メモリをキャッシュとして設定した場合、設定されたサイズと同量のメモリが消費されます。

      • インデックスのオーバーヘッド:メモリキャッシュまたはディスクキャッシュのいずれを使用する場合でも、データインデックスを維持するために追加のメモリが必要です。総キャッシュ容量の約 0.1% に相当するメモリを確保する必要があります。

      • 計算式総メモリ消費量 ≈ 基本ランタイムメモリ + メモリキャッシュサイズ + (メモリキャッシュサイズ + ディスクキャッシュサイズ) × 0.001

    • ディスクリソース

      • ディスクキャッシュ:ディスクをキャッシュ媒体として設定した場合、設定されたサイズと同等のディスク領域を消費します。たとえば、1 TiB のディスクキャッシュ設定は 1 TiB のディスク領域を消費します。

機能上の制限

  • アクセスモード:OSS データへの読み取り専用アクセスのみをサポートします。マウント後、ファイルのオーナーは読み取り専用権限を持つ root に固定されます。chmod および chown はサポートされていません。

  • POSIX 互換性openclosereadreaddirreaddirpluslookupgetattr などの操作をサポートします。readlinkwriterenamesetattrlinksymlink などの操作はサポートしていません。

  • ストレージクラス標準および低頻度アクセスストレージクラスのオブジェクトへのアクセスのみをサポートします。アーカイブ、コールドアーカイブ、またはディープコールドアーカイブストレージクラスへの直接アクセスはサポートされていません。

  • パスの互換性

    • パスの競合:OSS バケットに a/b という名前のファイルと a/b/ という名前のフォルダの両方が含まれている場合、マウント後はフォルダ a/b/ のみアクセス可能です。

    • 特殊なパス:キーが / で始まる、連続したスラッシュ (//) を含む、または ... を含むオブジェクトにはアクセスできません。

  • アクセス権限:OSS のマウントとアクセスには、少なくとも oss:GetBucketStatoss:ListObjectsoss:GetObject の権限が必要です。

  • データの高可用性:EFC は読み取り専用キャッシュであり、データの高可用性を保証するものではありません。ハードウェア障害やノードの交換などの状況でキャッシュデータが失われ、キャッシュが無効になることがあります。対応するデータに再度アクセスすると、オリジンフェッチが発生します。これにより、パフォーマンスの変動が生じる可能性があります。

デプロイとマウント

このセクションでは、EFC のデプロイとマウントについて説明します。このプロセスは段階的に進められるように設計されています。まず、基本マウントを完了してプロセスを検証し、その後、必要に応じてキャッシュアクセラレーションと分散クラスターを有効にします。

ステップ 1:EFC クライアントのインストール

計算ノードに EFC クライアントソフトウェアをインストールできます。

  1. インストールパッケージのダウンロード

    # alinas-utils ツールキット
    wget https://aliyun-alinas-eac-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/cache/aliyun-alinas-utils.amd64.rpm
    
    # EFC クライアントのメインプログラム
    wget https://aliyun-alinas-eac-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/cache/alinas-efc-latest.amd64.rpm
  2. パッケージのインストール

    sudo rpm -ivh aliyun-alinas-utils.amd64.rpm
    sudo rpm -ivh alinas-efc-latest.amd64.rpm
    インストール後、EFC クライアントサービスは自動的に登録されますが、すぐには起動しません。使用する前に、以下の設定を完了する必要があります。

ステップ 2:アクセス認証情報の設定

EFC は、AccessKey と STS 一時認証情報の 2 つの認証方式をサポートしています。セキュリティ上の理由から、AccessKey の漏洩リスクを避けるために、STS 一時認証情報を使用することを推奨します

方法 1:STS 一時認証情報の使用 (推奨)

STS 一時認証情報を含む設定ファイルを作成します。

# STS 設定ファイルの作成
cat > /etc/passwd-sts << EOF
{
    "SecurityToken": "YourSecurityToken",
    "AccessKeyId": "YourSTSAccessKeyId",
    "AccessKeySecret": "YourSTSAccessKeySecret",
    "Expiration": "YourExpiration"
}
EOF

# ファイル権限を root のみが読み取れるように設定
chmod 600 /etc/passwd-sts
  • STS 設定ファイルはリアルタイム更新をサポートしています。EFC は自動的に最新の認証情報を読み込みます。

  • 認証情報の有効期間の管理はユーザーの責任となります。有効期限が切れる前に更新する必要があります。

  • Expiration フィールドのフォーマット例:2025-12-11T08:37:51Z (UTC)

方法 2:AccessKey の使用

AccessKey を含むパスワードファイルを作成します。

# パスワードファイルの作成 (実際の認証情報に置き換えてください)
echo "YourAccessKeyId:YourAccessKeySecret" > /etc/passwd-oss

# ファイル権限を root のみが読み取れるように設定
chmod 600 /etc/passwd-oss

ステップ 3:OSS バケットのマウント

シナリオに応じて、以下のいずれかの設定方法を選択します。まず基本マウントを完了してプロセスを検証し、その後、必要に応じてキャッシュアクセラレーションを有効にすることを推奨します。

設定 1:基本マウント (クイック検証)

この設定は、EFC が OSS バケットにアクセスできることを迅速に検証するために使用します。キャッシュアクセラレーションは有効になりません

STS 認証情報を使用したマウント (推奨)

# ローカルマウントポイントの作成
mkdir -p /mnt/oss_data

# マウントの実行 (バケットのドメイン名に置き換えてください)
mount -t alinas \
  -o efc,protocol=oss,g_oss_STSFile=/etc/passwd-sts \
  your-bucket.oss-cn-hangzhou.aliyuncs.com:/ /mnt/oss_data

AccessKey を使用したマウント

# ローカルマウントポイントの作成
mkdir -p /mnt/oss_data

# マウントの実行 (バケットのドメイン名に置き換えてください)
mount -t alinas \
  -o efc,protocol=oss,passwd_file=/etc/passwd-oss \
  your-bucket.oss-cn-hangzhou.aliyuncs.com:/ /mnt/oss_data

コマンドの説明

  • mount -t alinas:EFC クライアント (alinas タイプ) を使用してファイルシステムをマウントします。

  • your-bucket.oss-cn-hangzhou.aliyuncs.com:/ /mnt/oss_data:マウントポイントの設定です。your-bucket.oss-cn-hangzhou.aliyuncs.com は OSS バケットのドメイン名で、/mnt/oss_data はローカルマウントポイントです。

  • g_oss_STSFile=/etc/passwd-sts:STS 認証情報を含む設定ファイルのパスを指定します。

  • passwd_file=/etc/passwd-oss:OSS AccessKey を含むパスワードファイルのパスを指定します。

パラメーターの詳細については、「マウントパラメーターの詳細」をご参照ください。

マウント結果の検証

# マウントが成功したか確認
df -h | grep /mnt/oss_data
# OSS 内のファイルをリスト表示
ls /mnt/oss_data

OSS バケット内のファイルが表示できれば、基本マウントは成功です。必要に応じてキャッシュアクセラレーションを有効にできます。

設定 2:シングルノードキャッシュモード

現在のノードでメモリキャッシュとディスクキャッシュを有効にします。この設定は基本マウントを基にしており、シングルノードのタスクや簡単なテストに適しています

:すでに基本マウントを完了している場合は、まずアンマウントする必要があります:umount /mnt/oss_data
# ディスクキャッシュフォルダの作成
mkdir -p /mnt/cache/

# マウントしてシングルノードキャッシュを有効化 (STS 認証情報を使用)
mount -t alinas \
  -o efc,protocol=oss,g_oss_STSFile=/etc/passwd-sts \
  -o g_tier_DadiIsDistributed=false \
  -o g_tier_DadiMemCacheCapacityMB=1024 \
  -o g_tier_DadiDiskCacheCapacityMB=10240 \
  -o g_tier_DadiDiskCachePath=/mnt/cache/ \
  -o g_server_Port=17871 \
  your-bucket.oss-cn-hangzhou.aliyuncs.com:/ /mnt/oss_data

コマンドの説明

  • mount -t alinas ... your-bucket.oss-cn-hangzhou.aliyuncs.com:/ /mnt/oss_data:EFC クライアントを使用して、OSS バケットをローカルの /mnt/oss_data フォルダにマウントします。

  • g_oss_STSFile=/etc/passwd-sts:STS 認証情報を含む設定ファイルのパスを指定します。

  • g_tier_DadiIsDistributed=false:シングルノードキャッシュモードです。ノードは他のノードと通信しません。

  • g_tier_DadiMemCacheCapacityMB=1024:データキャッシングのために 1 GB のメモリを割り当てます。

  • g_tier_DadiDiskCacheCapacityMB=10240:データキャッシングのために 10 GB のディスク領域を割り当てます。

  • g_tier_DadiDiskCachePath=/mnt/cache/:ディスクキャッシュファイルが保存されるフォルダです。

  • g_server_Port=17871:ポート 17871 を開き、コマンドラインツールを使用してキャッシュヒット率の表示やデータプリフェッチを実行できるようにします。

パラメーターの詳細については、「マウントパラメーターの詳細」をご参照ください。

設定 3:分散キャッシュクラスターモード

このモードは、複数のノードを組み合わせてキャッシュクラスターを形成し、キャッシュデータを共有して P2P ネットワーク経由でデータ分布を高速化します。このモードは、本番環境での大規模なトレーニングや推論に適しています

1. キャッシュノードリストの設定

すべてのノードで /etc/efc/rootlist ファイルを作成し、クラスター内のすべてのノードの情報を追加します。

# フォーマット: <一意のID>:<ノードの内部IP>:<P2Pポート>
1:192.168.1.1:17980
2:192.168.1.2:17980
3:192.168.1.3:17980
警告rootlist ファイルは、クラスター全体で同一でなければなりません。不一致があると、一部のノードがキャッシュネットワークに参加できなくなり、キャッシュヒット率が低下する可能性があります。

2. すべてのノードでマウントコマンドを実行

# ディスクキャッシュフォルダの作成
mkdir -p /mnt/cache/

# マウントして分散キャッシュを有効化 (STS 認証情報を使用)
mount -t alinas \
  -o efc,protocol=oss,g_oss_STSFile=/etc/passwd-sts \
  -o g_tier_EnableClusterCache=true \
  -o g_tier_DadiIsDistributed=true \
  -o g_tier_DadiAddr=/etc/efc/rootlist \
  -o g_tier_DadiMemCacheCapacityMB=1024 \
  -o g_tier_DadiDiskCacheCapacityMB=10240 \
  -o g_tier_DadiDiskCachePath=/mnt/cache/ \
  -o g_server_Port=17871 \
  your-bucket.oss-cn-hangzhou.aliyuncs.com:/ /mnt/oss_data

コマンドの説明

  • mount -t alinas ... your-bucket.oss-cn-hangzhou.aliyuncs.com:/ /mnt/oss_data:EFC クライアントを使用して、OSS バケットをローカルの /mnt/oss_data フォルダにマウントします。

  • g_oss_STSFile=/etc/passwd-sts:STS 認証情報を含む設定ファイルのパスを指定します。

  • g_tier_EnableClusterCache=true, g_tier_DadiIsDistributed=true:EFC のコア機能である分散キャッシュアクセラレーションを有効にします。

  • g_tier_DadiAddr=/etc/efc/rootlist:P2P キャッシュネットワークを構築するために使用される、クラスターノード設定ファイルのパスを指定します。

  • g_tier_DadiMemCacheCapacityMB=1024:データキャッシングのために 1 GB のメモリを割り当てます。

  • g_tier_DadiDiskCacheCapacityMB=10240:データキャッシングのために 10 GB のディスク領域を割り当てます。キャッシュファイルは /mnt/cache/ フォルダに保存されます。

  • g_server_Port=17871:ポート 17871 を開き、コマンドラインツールを使用してキャッシュヒット率の表示やデータプリフェッチを実行できるようにします。

パラメーターの詳細については、「マウントパラメーターの詳細」をご参照ください。

設定 4:エージェントモード (アクセスのみ、データキャッシングなし)

ノードが分散キャッシュへのアクセスのみを行い、それ自体はデータをキャッシュしないようにしたい場合 (計算リソースが限られた軽量ノードに適しています)、エージェントモードを使用してマウントできます。

mount -t alinas \
  -o efc,protocol=oss,passwd_file=/etc/passwd-sts \
  -o g_tier_EnableClusterCache=true \
  -o g_tier_DadiIsDistributed=true \
  -o g_tier_DadiRootClientType=2 \
  -o g_tier_DadiAddr=/etc/efc/rootlist \
  -o g_server_Port=17871 \
  your-bucket.oss-cn-hangzhou.aliyuncs.com:/ /mnt/oss_data

コマンドの説明

  • mount -t alinas ... your-bucket.oss-cn-hangzhou.aliyuncs.com:/ /mnt/oss_data:EFC クライアントを使用して、OSS バケットをローカルの /mnt/oss_data フォルダにマウントします。

  • g_oss_STSFile=/etc/passwd-sts:STS 認証情報を含む設定ファイルのパスを指定します。

  • g_tier_EnableClusterCache=true, g_tier_DadiIsDistributed=true:分散キャッシュアクセラレーションを有効にします。

  • g_tier_DadiRootClientType=2:モードをエージェントに設定します。このノードは他のノードのキャッシュにのみアクセスし、キャッシングサービスは提供しません。

    • デフォルト値 0:ルート/エージェントモード。ノードはキャッシュの提供とアクセスの両方を行います。

    • 1:ルートモード。ノードはキャッシュサービスのみを提供します。

    • 2:エージェントモード。ノードはキャッシュへのアクセスのみを行います。

  • g_tier_DadiAddr=/etc/efc/rootlist:クラスターノード設定ファイルのパスを指定します。

  • g_server_Port=17871:運用保守のためにポート 17871 を開きます。

パラメーターについては、「マウントパラメーターの詳細」をご参照ください。

キャッシュの運用保守

マウントが成功した後、EFC が提供する運用保守インターフェイスを使用してキャッシュを管理できます。運用保守操作を実行する前に、マウント時に -o g_server_Port=<port_number> を使用して管理ポートを有効にしたことを確認する必要があります。このトピックでは、デフォルトのポート 17871 を例として使用します。

データプリフェッチ

この機能は、OSS から事前にデータをキャッシュに読み込むことで、初回アクセスのレイテンシーをなくします。これは、モデル推論などのシナリオで特に重要です。

  • パス要件:プリフェッチパスは、マウントポイント配下の相対パスである必要があります。

  • タスクステータスrunningcompletedcanceledfailed

  • 受動的なタスク削除ポリシー:プリフェッチタスクは無期限に保持されません。システムは以下のルールに基づいて、履歴タスクレコードを自動的に削除します。

    • running 状態のタスク:cancel コマンドを使用して能動的にキャンセルすることのみ可能で、受動的に削除することはできません。

    • 完了、キャンセル、または失敗したタスクは、以下のいずれかの条件が満たされた場合に自動的に削除されます。

      • 履歴プリフェッチタスクの総数が 10,000 を超えた場合。

      • タスクレコードが 7 日以上経過した場合。

HTTP インターフェイスの使用

  • パラメーター

    パラメーター名

    必須

    説明

    target_path

    はい

    プリフェッチする相対パス。複数のパスはカンマ (,) で区切ります。

    pattern

    いいえ

    一致するファイル名をフィルタリングするための正規表現。

    preceding_time

    いいえ

    過去 N 秒以内に作成されたタスクをフィルタリングします (クエリのみ)。デフォルト:86400 (1 日)。

  • プリフェッチタスクの開始

    /mnt/oss_data マウントポイント配下の file100G ファイルをプリフェッチします。

    curl -s "http://localhost:17871/v1/warmup/load?target_path=file100G"

    応答のサンプル:

    $ curl -s "http://localhost:17871/v1/warmup/load?target_path=file100G"
    {
        "ErrorCode": 0,
        "ErrorMessage": "Request processed",
        "Results": [{
                "ErrorCode": 0,
                "ErrorMessage": "The warm up (file100G) is processing in the background. Use the 'stat' command to get status.",
                "Location": "127.0.0.1:17871",
                "Path": "file100G"}]}
  • file100G ファイルのプリフェッチステータスを確認します。

    プリフェッチが成功すると、ファイルステータスは completed に変わります。
    プリフェッチが失敗すると、ファイルステータスは failed に変わり、エラーコードとエラーメッセージが返されます。
    /mnt/oss_data/file1Gmnt/oss_data/file1G はマウントポイントパスを含んでいるため、誤って解析され、プリフェッチが失敗します。
    curl -s "http://localhost:17871/v1/warmup/stat?target_path=file100G"

    応答のサンプル:

    $ curl -s "http://localhost:17871/v1/warmup/stat?target_path=file100G"
    {
        "ErrorCode": 0,
        "ErrorMessage": "Request processed",
        "Results": [{
                "ErrorCode": 0,
                "ErrorMessage": "Successfully stat the warm up",
                "Location": "127.0.0.1:17871",
                "Path": "file100G",
                "TaskInfos": [{
                        "CompletedSize": 13898874880,
                        "ErrorCode": 0,
                        "ErrorMessage": "",
                        "IsDir": false,
                        "Path": "file100G",
                        "Pattern": "",
                        "Status": "running",
                        "SubmitTime": 1765274023424073,
                        "TotalSize": 107374182400}]}]}
  • プリフェッチタスクのキャンセル

    file100G ファイルのプリフェッチタスクをキャンセルします。

    running 状態のタスクのみキャンセルできます。
    curl -s "http://localhost:17871/v1/warmup/cancel?target_path=file100G"

    応答のサンプル:

    $ curl -s "http://localhost:17871/v1/warmup/cancel?target_path=file100G"
    {
        "ErrorCode": 0,
        "ErrorMessage": "Request processed",
        "Results": [{
                "ErrorCode": 0,
                "ErrorMessage": "Successfully canceled the warm up tasks",
                "Location": "127.0.0.1:17871",
                "Path": "file100G"}]}

コマンドラインインターフェイス (CLI) の使用

  • パラメーター

    パラメーター名

    必須

    説明

    -m

    はい

    マウントポイントのパス。

    -r

    はい

    操作タイプ:warmup/load (プリフェッチ)、warmup/stat (クエリ)、warmup/cancel (キャンセル)。

    --path

    はい

    マウントポイント配下の相対パス。ルートディレクトリを指定するには "" を渡します。複数のパスはカンマ (,) で区切ります。

    --pattern

    いいえ

    一致するファイル名をフィルタリングするための正規表現。

    --preceding_time

    いいえ

    過去 N 秒以内に作成されたタスクをフィルタリングします (クエリのみ)。デフォルト:86400 (1 日)。

  • プリフェッチタスクの開始

    /mnt/oss_data マウントポイント配下の testDir フォルダ内のファイルをプリフェッチします。

    /usr/bin/aliyun-alinas-efc-cli -m /mnt/oss_data -r warmup/load --path "testDir" --pattern ".*_2$"

    応答例:

    $ /usr/bin/aliyun-alinas-efc-cli -m /mnt/oss_data -r warmup/load --path "testDir"
    {
        "ErrorCode": 0,
        "ErrorMessage": "Request processed",
        "Results": [{
                "ErrorCode": 0,
                "ErrorMessage": "The warm up (testDir) is processing in the background. Use the 'stat' command to get status.",
                "Location": "",
                "Path": "testDir"}]}
  • プリフェッチステータスの確認

    testDir フォルダのプリフェッチ進捗をクエリします。

    /usr/bin/aliyun-alinas-efc-cli -m /mnt/oss_data -r warmup/stat --path "testDir"

    プリフェッチタスクのステータス:

    • running:プリフェッチタスクが実行中です。

    • completed:プリフェッチタスクが完了しました。

    • cancel:プリフェッチタスクがキャンセルされました。再開はできません。新しいプリフェッチタスクを開始する必要があります。

    • failed:プリフェッチが失敗した場合、タスクステータスは failed に変わり、エラーコードと関連するエラー情報が返されます。

    応答例:

    $ /usr/bin/aliyun-alinas-efc-cli -m /mnt/oss_data -r warmup/stat --path "testDir"
    {
        "ErrorCode": 0,
        "ErrorMessage": "Request processed",
        "Results": [{
                "ErrorCode": 0,
                "ErrorMessage": "Successfully stat the warm up",
                "Location": "",
                "Path": "testDir",
                "TaskInfos": [{
                        "CompletedSize": 11875394560,
                        "ErrorCode": 0,
                        "ErrorMessage": "",
                        "IsDir": true,
                        "Path": "testDir",
                        "Pattern": "",
                        "Status": "running",
                        "SubmitTime": 1765273087321936,
                        "TotalSize": 107872527360}]}]}
  • プリフェッチのキャンセル

    testDir のプリフェッチタスクをキャンセルします (running 状態のタスクのみ)。

    完了したタスクや失敗したタスクはキャンセルできません。完了したタスクをキャンセルしようとすると失敗します。
    /usr/bin/aliyun-alinas-efc-cli -m /mnt/oss_data -r warmup/cancel --path "testDir"

    以下は応答のサンプルです。

    $ /usr/bin/aliyun-alinas-efc-cli -m /mnt/oss_data -r warmup/cancel --path "testDir"
    {
        "ErrorCode": 0,
        "ErrorMessage": "Request processed",
        "Results": [{
                "ErrorCode": 0,
                "ErrorMessage": "Successfully canceled the warm up tasks",
                "Location": "",
                "Path": "testDir"}]}

キャッシュモニタリング

この機能により、ヒット率やスループットなど、キャッシュのリアルタイムな実行状況を表示できます。この情報はパフォーマンスチューニングの鍵となります。

モニタリングデータの表示
  • HTTP メソッド (推奨、JSON 形式で返却)

    curl -s "http://localhost:17871/v1/tier"
  • コマンドラインメソッド (テキスト形式で返却)

    aliyun-alinas-efc-cli -m <mount_target> -r tier
モニタリングデータのクリア

モニタリングカウンターをリセットします (例:tier_read_hit などのメトリックがゼロにリセットされます)。

  • HTTP メソッド

    curl -s "http://localhost:17871/v1/tier/clear"
  • コマンドラインメソッド

    aliyun-alinas-efc-cli -m <mount_target> -r tier -c
主要メトリックの説明

以下のメトリックは、クライアント A がクライアント B (B がルートサービスを提供) のキャッシュにアクセスする際の考えられるパスを説明しています。

メトリック名

説明

対応パス

tier_read

キャッシュパスを通過した読み取りリクエストの総数。

i

tier_read_bytes

キャッシュパスを通過した読み取りリクエストの総データ量。

i

tier_read_hit

分散ノードからの成功した読み取りリクエストのうち、キャッシュヒットした数。

ii

tier_read_hit_bytes

分散ノードからの成功した読み取りリクエストのうち、キャッシュヒットした総データ量 (読み取り増幅を含む場合があります)。

ii

tier_read_miss

分散ノードからの成功した読み取りリクエストのうち、キャッシュミス (オリジンフェッチ) した数。これにより、分散ノードがバックエンドから読み取るトリガーとなります。

iii

tier_read_miss_bytes

分散ノードからの成功した読み取りリクエストのうち、キャッシュミスした総データ量。

iii

tier_direct_read

分散ノードからの読み取りが失敗し、クライアントが直接バックエンド OSS から正常に読み取ったリクエストの数。

v

tier_direct_read_bytes

分散ノードからの読み取りが失敗し、クライアントが直接バックエンド OSS から正常に読み取ったリクエストの総データ量。

v

tier_root_read_source

クライアントが分散ノードとして機能し、キャッシュミスが発生した際のバックエンドへのリクエスト数。

iv

tier_root_read_source_bytes

クライアントが分散ノードとして機能し、キャッシュミスが発生した際にバックエンドから読み取った総データ量。

iv

キャッシュのスケーリング

オンラインでのノードの追加または削除

この操作により、サービスを中断することなく、分散キャッシュクラスター内のノード数を動的に調整できます。

  • スケールアウトすべてのノードの rootlist ファイルに、新しいノードの IP アドレスを追加します。

  • スケールインすべてのノードの rootlist ファイルから、対象ノードの IP アドレスを削除します。

    ノードが削除されると、システムは LRU メカニズムを使用してキャッシュデータを削除します。これにより、頻繁にアクセスされるホットスポットデータが優先的に保持され、キャッシュヒット率が維持されます。
  • 有効化の仕組み:EFC プロセスは定期的 (デフォルトで 5 秒ごと) に rootlist ファイルを再読み込みし、変更を自動的に適用します。

シングルノードのキャッシュ容量の調整
重要:EFC はシングルノードのキャッシュ容量の動的な調整をサポートしていません。調整するには、ファイルシステムをアンマウントして再マウントする必要があります。この操作はオフピーク時に実行できます。

再マウントする際に、以下のパラメーターを変更してキャッシュ容量を調整できます。

パラメーター名

説明

単位

デフォルト値

g_tier_DadiMemCacheCapacityMB

シングルノードの総メモリキャッシュ容量。

MB

0

g_tier_DadiDiskCacheCapacityMB

シングルノードの総ディスクキャッシュ容量。

MB

0

マウントパラメーターの動的調整

EFC は、ファイルシステムを手動でアンマウントすることなくマウントパラメーターを変更できる Python スクリプトツールを提供しています。このツールは、起動コマンドを保存する EFC の state ファイルを変更し、現在の EFC プロセスを終了させることで機能します。プロセスは再起動時に新しいパラメーターを自動的に読み込みます。

  • ツールのダウンロード

    wget https://aliyun-alinas-eac-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/cache/efc_runtime_ops.latest.py
  • マウントパラメーターの変更

    python3 efc_runtime_ops.py update <local_mount_path> [-o <update_parameters,...>]...

    例:

    python3 update_state_file.py update /mnt/oss_data \
              -o g_tier_EnableClusterCache=true,g_tier_tier_DadiP2PPort=23456 \
              -o g_tier_BlockSize=1048576
  • ロールバック

    パラメーターを変更する際、ツールは古い state ファイルを自動的にバックアップします。変更後に EFC が失敗した場合、ロールバックして以前の状態に回復できます。

    python3 efc_runtime_ops.py rollback <local_mount_path> [backup_path]

    例:デフォルトのバックアップファイルパスを使用して state ファイルを復元します。

    python3 efc_runtime_ops.py rollback /mnt/oss_data

ディレクトリキャッシュ管理

EFC は、ls などのディレクトリトラバーサル操作を高速化するために、デフォルトでディレクトリキャッシュを有効にしています。OSS 側のディレクトリ構造が変更され、EFC がそれを迅速に検出しない場合、手動でディレクトリキャッシュをクリアできます。

ディレクトリキャッシュパラメーター (マウント時に指定):

パラメーター名

デフォルト値

説明

g_readdircache_Enable

true

readdir キャッシュを有効にするかどうかを指定します。

g_readdircache_MaxCount

20000

readdir キャッシュ内のエントリの最大数。

g_readdircache_MaxSize

100 MiB

readdir キャッシュが使用できるメモリ量。単位:バイト。

g_readdircache_RemainTime

3600

キャッシュの有効期間。単位:秒。デフォルト:1 時間。

ディレクトリキャッシュのクリア

  • HTTP メソッド

    curl -s "http://localhost:17871/v1/action/clear_readdir_cache"
  • コマンドラインメソッド

    aliyun-alinas-efc-cli -m <mount_target> -r action -k clear_readdir_cache

マウントパラメーターの詳細

基本パラメーター

パラメーター名

デフォルト値

値の例

必須

説明

efc

-

efc

はい

マウントを EFC マウントとして識別するために、このパラメーターを含める必要があります。

protocol

-

oss

はい

バックエンドストレージプロトコル。OSS をマウントする際は oss に設定します。

passwd_file

-

/etc/passwd-oss

g_oss_STSFile が指定されていない場合は必須。

AccessKeyId:AccessKeySecret を含むパスワードファイルの絶対パス。フォーマットは AK:SK です。

g_oss_STSFile

-

/etc/passwd-sts

passwd_file が指定されていない場合は必須。

STS 一時認証情報を含む設定ファイルの絶対パス。リアルタイム更新をサポートしています。その有効性を保証するのはユーザーの責任です。

trybind

yes

no

いいえ

バインドマウントを試行するかどうかを指定します。ミラーリングベースのオリジンフェッチを使用する場合は no に設定します。

キャッシュ設定パラメーター

パラメーター名

デフォルト値

値の例

必須

説明

g_tier_EnableClusterCache

true

true

いいえ

EFC キャッシュアクセラレーション機能を有効にするかどうかを指定します。false に設定すると、EFC は単純なプロトコル変換マウントにダウングレードします。

g_tier_DadiIsDistributed

true

true

いいえ

分散キャッシュを有効にするかどうかを指定します。true は分散モードを示します。false はシングルノードキャッシュモードを示します。

g_tier_DadiAddr

-

/etc/efc/rootlist

いいえ

rootlist ファイルの絶対パス。分散モードでは必須です。

g_tier_DadiRootClientType

0

2

いいえ

EFC マウントタイプ。0:ルート/エージェントモード (デフォルト)。1:ルートモード (キャッシュのみ提供)。2:エージェントモード (キャッシュにアクセスのみ、データは保存しない)。

g_tier_DadiMemCacheCapacityMB

0

1024

いいえ

メモリキャッシュ容量 (MB)。デフォルト値は 0 で、メモリキャッシュが無効であることを意味します。

g_tier_DadiDiskCacheCapacityMB

0

10240

いいえ

ディスクキャッシュ容量 (MB)。デフォルト値は 0 で、ディスクキャッシュが無効であることを意味します。

g_tier_DadiDiskCachePath

-

/mnt/cache/

いいえ

ディスクキャッシュフォルダの絶対パス。フォワードスラッシュ (/) で終わる必要があります。ディスクキャッシュが有効な場合に必須です。

g_tier_DadiP2PPort

17980

17980

いいえ

P2P キャッシュ通信ポート。デフォルト値を維持し、セキュリティグループで許可されていることを確認してください。

g_tier_DadiSdkGetTrafficLimit

3 GB/s

3221225472

いいえ

OSS からのオリジンフェッチの読み取りトラフィック制限。単位:B/s。

g_tier_DadiCachePageSizeKB

16

16

いいえ

キャッシュページサイズ (KB)。通常、これを変更する必要はありません。

メタデータとディレクトリキャッシュのパラメーター

パラメーター名

デフォルト値

値の例

必須

説明

g_metadata_CacheEnable

false

true

いいえ

メタデータキャッシングを有効にするかどうかを指定します。これを有効にすると、OSS への HEAD リクエストの数を減らすことができます。

g_readdircache_Enable

true

true

いいえ

readdir キャッシュを有効にするかどうかを指定します。

g_readdircache_MaxCount

20000

20000

いいえ

readdir キャッシュ内のエントリの最大数。

g_readdircache_MaxSize

100 MiB

104857600

いいえ

readdir キャッシュが使用できるメモリ量。単位:バイト。

g_readdircache_RemainTime

3600

3600

いいえ

readdir キャッシュの有効期間 (秒)。デフォルト:1 時間。

運用保守と高度なパラメーター

パラメーター名

デフォルト値

値の例

必須

説明

g_server_Port

0

17871

いいえ

キャッシュ管理ポート。HTTP 運用保守インターフェイスを有効にするには、17871 などのゼロ以外の値を設定します。

ベストプラクティス

権限とセキュリティ

  • パスワードファイルの保護:パスワードファイルの権限を 600 に設定し、認証情報の漏洩を防ぐために安全な場所に保管します。

  • STS の優先:セキュリティ上の理由から、キー漏洩のリスクを減らすために、長期的な AccessKey の代わりに STS 一時認証情報を使用することを推奨します。

  • セキュリティグループの公開範囲の最小化:P2P 通信ポート 17980 はクラスターノード間でのみ開き、管理ポート 17871 のアクセス元を厳密に制限します。

シナリオ別の設定推奨

AI モデルトレーニング

  • 特徴:通常、多数の小さなファイルを含む可能性のある大規模なデータセットの反復的でシーケンシャルな読み取りを伴います。

  • 推奨事項

    • ホットスポットデータセット全体、またはその大部分を保持できる十分な大きさのディスクキャッシュを設定します。

    • トレーニングタスクが開始する前に、コアデータセットに対してデータプリフェッチを実行し、初回読み取りのオーバーヘッドを事前に処理します。

AI モデル推論

  • 特徴:多くの計算ノードが同時に同じモデルファイルを読み込む必要があります。

  • 推奨事項

    • 分散クラスターモードを有効にして、P2P ネットワークを最大限に活用してモデルファイルを配布します。これにより、OSS への単一の負荷集中点を回避できます。

    • サービスがオンラインになるとき、またはモデルを更新するときに、モデルファイルのデータプリフェッチを実行します。

データ整合性管理

  • 結果整合性の理解:EFC は読み取り専用キャッシュです。OSS バックエンドへの変更はリアルタイムで同期されません。したがって、アプリケーションの設計では、ある程度のデータ遅延を許容する必要があります。

  • プロアクティブリフレッシュ:頻繁な更新と即時の読み取りが必要なシナリオでは、アプリケーションロジックにディレクトリキャッシュのクリアインターフェイスを呼び出すステップを追加できます。

  • メタデータキャッシングの有効化:メタデータが頻繁に変更されないシナリオでは、-o g_metadata_CacheEnable を使用してメタデータキャッシングを有効にできます。これにより、OSS への GetObjectMeta リクエストの数を減らすことができます。

課金

  • EFC クライアント:EFC クライアント自体は、招待プレビュー期間中は無料です。

  • OSS 料金: EFC を介して OSS にアクセスすることで発生するリクエスト数、インターネット経由のアウトバウンドトラフィック、およびその他のリソースは、OSS の標準課金ルールに基づいて課金されます。EFC キャッシュを使用すると、オリジンリクエストとトラフィックを効果的に削減でき、ひいては OSS コストの削減につながります。

よくある質問

Q:OSS のデータが更新された後、EFC キャッシュは変更をすぐに検出しますか?

A:EFC が OSS のデータ更新を検出する能力は、メタデータキャッシュの設定状況に依存します。

  • メタデータキャッシングが無効の場合:ファイルの更新はすぐに検出されます。新しいファイルが追加された場合、readdir キャッシュメカニズムのためにすぐには表示されないことがあります。新しいファイルを表示するには、readdir キャッシュをクリアする必要があります。

  • メタデータキャッシングが有効の場合:ファイルの更新はすぐには検出されません。メタデータキャッシュをクリアする必要があります。新しいファイルが追加された場合、それらを表示するには readdir キャッシュとメタデータキャッシュの両方をクリアする必要があります。

ソリューション

OSS のデータ変更をすぐに検出するには、次のように手動でキャッシュをクリアできます。

  1. ディレクトリキャッシュのクリア (新しいファイルが表示されない場合)

    curl -s "http://localhost:17871/v1/action/clear_readdir_cache"
  2. メタデータキャッシュのクリア (メタデータキャッシングが有効な場合のみ必要):

    curl -s "http://localhost:17871/v1/action/clear_metadata_cache"
メタデータキャッシングが有効な場合は、OSS の最新データと完全に同期するために、上記の両方のクリアコマンドを実行することを推奨します。