Elastic File Client (EFC) は、計算側でのデータアクセスを高速化するソリューションです。OSS バケットをローカルファイルシステムとしてマウントし、計算ノードのメモリとディスクを使用して、高速な読み取り専用の分散キャッシュを構築します。このプロセスにより、リモートの Object Storage Service (OSS) アクセスが効率的なピアツーピア (P2P) 内部ネットワーク転送に変換され、AI のトレーニングや推論シナリオにおけるアクセスレイテンシーを削減し、データスループットを向上させます。
注:EFC のキャッシュ機能は現在、招待プレビュー段階にあり、この期間中は無料でご利用いただけます。
仕組み
EFC は、計算ノードにデプロイされるユーザーモードのファイルシステムクライアントです。アプリケーションがマウントポイントを介してデータを読み取る際、EFC はこれらのリクエストを傍受し、以下の手順を実行します。
キャッシュクエリ:EFC はまず、ローカルノードおよび P2P ネットワークを介して他のピアノードのキャッシュ (メモリまたはディスク) 内でデータを検索します。
キャッシュヒット:データがキャッシュ内に存在する場合、EFC はキャッシュから直接アプリケーションにデータを返します。これは高速な内部ネットワーク操作です。
キャッシュミス (オリジンフェッチ):どのノードのキャッシュにもデータが存在しない場合、EFC はソース OSS バケットからデータをプルし、ローカルキャッシュに保存してからアプリケーションに返します。このデータに対する後続のリクエストはキャッシュヒットになります。
このようにして、EFC は同一データセットへの頻繁なリモートアクセスを、単一のオリジンフェッチと複数の高速な内部キャッシュアクセスに集約します。総スループット容量は、計算ノード数に応じて線形にスケールできます。
キャッシュパフォーマンスメトリック:シングルノードで最大 15 GB/s のスループットと 200,000 IOPS を達成できます。パフォーマンスはノード数に比例して線形にスケールし、ネットワーク帯域幅の制限を受けます。
主な利点
計算側の高速キャッシュ:計算ノードのメモリとローカルディスクを使用して読み取りキャッシュを構築します。データプリフェッチと最近最も使用されていない (LRU) 削除ポリシーをサポートし、リモートアクセスのレイテンシーを削減します。
P2P 分散アクセラレーション:ノードは P2P ネットワークを介してキャッシュデータを共有します。総スループットはノード数に比例して線形にスケールし、数百から数千ノードのクラスターをサポートします。P2P の仕組みは以下の通りです。
POSIX 互換性:
open、read、readdirなどの一般的な 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 互換性:
open、close、read、readdir、readdirplus、lookup、getattrなどの操作をサポートします。readlink、write、rename、setattr、link、symlinkなどの操作はサポートしていません。ストレージクラス:標準および低頻度アクセスストレージクラスのオブジェクトへのアクセスのみをサポートします。アーカイブ、コールドアーカイブ、またはディープコールドアーカイブストレージクラスへの直接アクセスはサポートされていません。
パスの互換性:
パスの競合:OSS バケットに
a/bという名前のファイルとa/b/という名前のフォルダの両方が含まれている場合、マウント後はフォルダa/b/のみアクセス可能です。特殊なパス:キーが
/で始まる、連続したスラッシュ (//) を含む、または.や..を含むオブジェクトにはアクセスできません。
アクセス権限:OSS のマウントとアクセスには、少なくとも
oss:GetBucketStat、oss:ListObjects、oss:GetObjectの権限が必要です。データの高可用性:EFC は読み取り専用キャッシュであり、データの高可用性を保証するものではありません。ハードウェア障害やノードの交換などの状況でキャッシュデータが失われ、キャッシュが無効になることがあります。対応するデータに再度アクセスすると、オリジンフェッチが発生します。これにより、パフォーマンスの変動が生じる可能性があります。
デプロイとマウント
このセクションでは、EFC のデプロイとマウントについて説明します。このプロセスは段階的に進められるように設計されています。まず、基本マウントを完了してプロセスを検証し、その後、必要に応じてキャッシュアクセラレーションと分散クラスターを有効にします。
ステップ 1:EFC クライアントのインストール
計算ノードに EFC クライアントソフトウェアをインストールできます。
インストールパッケージのダウンロード
# 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パッケージのインストール
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-stsSTS 設定ファイルはリアルタイム更新をサポートしています。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_dataAccessKey を使用したマウント:
# ローカルマウントポイントの作成
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_dataOSS バケット内のファイルが表示できれば、基本マウントは成功です。必要に応じてキャッシュアクセラレーションを有効にできます。
設定 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 から事前にデータをキャッシュに読み込むことで、初回アクセスのレイテンシーをなくします。これは、モデル推論などのシナリオで特に重要です。
パス要件:プリフェッチパスは、マウントポイント配下の相対パスである必要があります。
タスクステータス:
running、completed、canceled、failed。受動的なタスク削除ポリシー:プリフェッチタスクは無期限に保持されません。システムは以下のルールに基づいて、履歴タスクレコードを自動的に削除します。
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/file1Gとmnt/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 がルートサービスを提供) のキャッシュにアクセスする際の考えられるパスを説明しています。
メトリック名 | 説明 | 対応パス |
| キャッシュパスを通過した読み取りリクエストの総数。 | i |
| キャッシュパスを通過した読み取りリクエストの総データ量。 | i |
| 分散ノードからの成功した読み取りリクエストのうち、キャッシュヒットした数。 | ii |
| 分散ノードからの成功した読み取りリクエストのうち、キャッシュヒットした総データ量 (読み取り増幅を含む場合があります)。 | ii |
| 分散ノードからの成功した読み取りリクエストのうち、キャッシュミス (オリジンフェッチ) した数。これにより、分散ノードがバックエンドから読み取るトリガーとなります。 | iii |
| 分散ノードからの成功した読み取りリクエストのうち、キャッシュミスした総データ量。 | iii |
| 分散ノードからの読み取りが失敗し、クライアントが直接バックエンド OSS から正常に読み取ったリクエストの数。 | v |
| 分散ノードからの読み取りが失敗し、クライアントが直接バックエンド OSS から正常に読み取ったリクエストの総データ量。 | v |
| クライアントが分散ノードとして機能し、キャッシュミスが発生した際のバックエンドへのリクエスト数。 | iv |
| クライアントが分散ノードとして機能し、キャッシュミスが発生した際にバックエンドから読み取った総データ量。 | iv |
キャッシュのスケーリング
オンラインでのノードの追加または削除
この操作により、サービスを中断することなく、分散キャッシュクラスター内のノード数を動的に調整できます。
スケールアウト:すべてのノードの
rootlistファイルに、新しいノードの IP アドレスを追加します。スケールイン:すべてのノードの
rootlistファイルから、対象ノードの IP アドレスを削除します。ノードが削除されると、システムは LRU メカニズムを使用してキャッシュデータを削除します。これにより、頻繁にアクセスされるホットスポットデータが優先的に保持され、キャッシュヒット率が維持されます。
有効化の仕組み:EFC プロセスは定期的 (デフォルトで 5 秒ごと) に
rootlistファイルを再読み込みし、変更を自動的に適用します。
シングルノードのキャッシュ容量の調整
重要:EFC はシングルノードのキャッシュ容量の動的な調整をサポートしていません。調整するには、ファイルシステムをアンマウントして再マウントする必要があります。この操作はオフピーク時に実行できます。
再マウントする際に、以下のパラメーターを変更してキャッシュ容量を調整できます。
パラメーター名 | 説明 | 単位 | デフォルト値 |
| シングルノードの総メモリキャッシュ容量。 | MB | 0 |
| シングルノードの総ディスクキャッシュ容量。 | 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 がそれを迅速に検出しない場合、手動でディレクトリキャッシュをクリアできます。
ディレクトリキャッシュパラメーター (マウント時に指定):
パラメーター名 | デフォルト値 | 説明 |
|
| readdir キャッシュを有効にするかどうかを指定します。 |
|
| readdir キャッシュ内のエントリの最大数。 |
| 100 MiB | readdir キャッシュが使用できるメモリ量。単位:バイト。 |
|
| キャッシュの有効期間。単位:秒。デフォルト: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 マウントとして識別するために、このパラメーターを含める必要があります。 |
| - |
| はい | バックエンドストレージプロトコル。OSS をマウントする際は |
| - |
|
|
|
| - |
|
| STS 一時認証情報を含む設定ファイルの絶対パス。リアルタイム更新をサポートしています。その有効性を保証するのはユーザーの責任です。 |
|
|
| いいえ | バインドマウントを試行するかどうかを指定します。ミラーリングベースのオリジンフェッチを使用する場合は |
キャッシュ設定パラメーター
パラメーター名 | デフォルト値 | 値の例 | 必須 | 説明 |
|
|
| いいえ | EFC キャッシュアクセラレーション機能を有効にするかどうかを指定します。 |
|
|
| いいえ | 分散キャッシュを有効にするかどうかを指定します。 |
| - |
| いいえ |
|
|
|
| いいえ | EFC マウントタイプ。 |
| 0 |
| いいえ | メモリキャッシュ容量 (MB)。デフォルト値は |
| 0 |
| いいえ | ディスクキャッシュ容量 (MB)。デフォルト値は |
| - |
| いいえ | ディスクキャッシュフォルダの絶対パス。フォワードスラッシュ ( |
|
|
| いいえ | P2P キャッシュ通信ポート。デフォルト値を維持し、セキュリティグループで許可されていることを確認してください。 |
| 3 GB/s |
| いいえ | OSS からのオリジンフェッチの読み取りトラフィック制限。単位:B/s。 |
|
|
| いいえ | キャッシュページサイズ (KB)。通常、これを変更する必要はありません。 |
メタデータとディレクトリキャッシュのパラメーター
パラメーター名 | デフォルト値 | 値の例 | 必須 | 説明 |
|
|
| いいえ | メタデータキャッシングを有効にするかどうかを指定します。これを有効にすると、OSS への |
|
|
| いいえ | readdir キャッシュを有効にするかどうかを指定します。 |
|
|
| いいえ | readdir キャッシュ内のエントリの最大数。 |
| 100 MiB |
| いいえ | readdir キャッシュが使用できるメモリ量。単位:バイト。 |
|
|
| いいえ | readdir キャッシュの有効期間 (秒)。デフォルト:1 時間。 |
運用保守と高度なパラメーター
パラメーター名 | デフォルト値 | 値の例 | 必須 | 説明 |
| 0 |
| いいえ | キャッシュ管理ポート。HTTP 運用保守インターフェイスを有効にするには、 |
ベストプラクティス
権限とセキュリティ
パスワードファイルの保護:パスワードファイルの権限を
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 のデータ変更をすぐに検出するには、次のように手動でキャッシュをクリアできます。
ディレクトリキャッシュのクリア (新しいファイルが表示されない場合)
curl -s "http://localhost:17871/v1/action/clear_readdir_cache"メタデータキャッシュのクリア (メタデータキャッシングが有効な場合のみ必要):
curl -s "http://localhost:17871/v1/action/clear_metadata_cache"
メタデータキャッシングが有効な場合は、OSS の最新データと完全に同期するために、上記の両方のクリアコマンドを実行することを推奨します。