このページでは、Cloud Storage FUSE のパフォーマンスを改善する方法について説明します。
読み取りと書き込みのパフォーマンスを改善する
読み取りと書き込みのパフォーマンスを改善するには、次の操作を行うことをおすすめします。
キャッシュ保存を有効にする: Cloud Storage FUSE には、特定の種類のデータとメタデータをローカルに保存してパフォーマンスを改善する、オプションのクライアントサイド キャッシュが 4 つあります。
ファイル キャッシュ保存: 頻繁にアクセスされるファイルのコピーを保存します。
統計キャッシュ保存: ファイルのメタデータを保存します。
型キャッシュ保存: ファイル形式に関する情報を保存します。
リスト キャッシュ保存: ディレクトリ リストを保存します。
Cloud Storage FUSE のキャッシュ保存では、選択したストレージでバックアップされるユーザー指定のディレクトリを使用します。Cloud Storage FUSE キャッシュのパフォーマンスは、キャッシュにより使用される、基盤となるストレージと一致し、オーバーヘッドが最小限に抑えられます。
並列ダウンロードを有効にして読み取りを高速化する: 並列ダウンロードを有効にして、1 GB を超える大きなファイルの読み取りを高速化します。詳細については、並列ダウンロードを使用して読み取りパフォーマンスを改善するをご覧ください。
可能な場合は順次読み取りワークロードを実行する: Cloud Storage FUSE は、ランダム読み取りワークロードよりも、順次読み取りワークロードに対して優れたパフォーマンスを発揮します。Cloud Storage FUSE は、ヒューリスティックを使用して、ファイルがいつ読み取られるかを検知します。これにより、Cloud Storage FUSE は同じ TCP 接続を使用して Cloud Storage に対してサイズの大きい読み取りリクエストを発行し、読み取りリクエストの発行回数を少なくします。
読み取りタイプに基づいてファイルサイズを調整する: 順次読み取りのパフォーマンスを最適化するには、5 MB~200 MB のファイルをアップロードして読み取ることをおすすめします。ランダム読み取りのパフォーマンスを最適化するには、約 2 MB のファイルをアップロードして読み取ることをおすすめします。
階層名前空間が有効になっているバケットをマウントする: 読み取りと書き込みのパフォーマンス速度を向上させ、初期の秒間クエリ数(QPS)がより大きいオペレーションのアトミック性を保証するには、階層名前空間が有効になっているバケットをマウントすることをおすすめします。階層名前空間が有効になっているバケットで Cloud Storage FUSE のパフォーマンスを改善する方法については、階層名前空間が有効になっているバケットをマウントするをご覧ください。
メタデータをプリフェッチして初回読み取りのパフォーマンスを改善する
ワークロードを実行する前に、マウントされたバケット内のファイルを再帰的にリストして、統計キャッシュと型キャッシュに事前にデータを入力し、高速なバッチ処理で初回実行時のパフォーマンスを改善することをおすすめします。
ls -R MOUNT_POINT > /dev/null
ファイル キャッシュ保存を使用してスループットを改善する
Cloud Storage FUSE のレイテンシは、ローカル ファイル システムよりも長くなっています。小さなファイルを 1 つずつ読み書きすると、複数の API 呼び出しが発生するため、スループットが低下します。複数の大きなファイルを一度に読み書きすると、スループットが向上する場合があります。Cloud Storage FUSE のファイル キャッシュ保存機能を使用すると、小規模なランダム I/O のパフォーマンスを改善できます。ファイル キャッシュ保存とその機能を有効にする方法の詳細については、Cloud Storage FUSE ファイル キャッシュを使用するをご覧ください。
階層名前空間が有効になっているバケットをマウントする
チェックポインティング、ディレクトリ名の変更、ディレクトリの変更など、初期の秒間クエリ数(QPS)がより大きいオペレーションのアトミック性を保証するには、階層名前空間が有効になっているバケットをマウントすることをおすすめします。階層名前空間を使用すると、データが階層型ファイル システム構造に整理され、バケット内のオペレーション効率が向上します。オブジェクトの一覧表示呼び出し(BucketHandle.Objects
)がフォルダの取得呼び出しに置き換えられるため、レスポンス時間が短縮され、オペレーションごとの全体的なリスト呼び出しが減少します。
読み取り先読みサイズを増やして、大規模な読み取りスループットを改善する
サービングやチェックポイントの復元など、主に大規模なファイルの順次読み取りが含まれるワークロードでは、読み取り先読みサイズを増やすとパフォーマンスが大幅に向上します。これは、ローカルマシンの read_ahead_kb
Linux カーネル パラメータを使用して行うことができます。ほとんどの Linux ディストリビューションで設定されているデフォルトの 128 KB ではなく、read_ahead_kb
カーネル パラメータを 1 MB に増やすことをおすすめします。カーネル パラメータを正常に増やすには、sudo
権限または root
権限が必要です。
特定の Cloud Storage FUSE マウント ディレクトリの read_ahead_kb
カーネル パラメータを 1 MB に増やすには、次のコマンドを使用します。ここで、/path/to/mount/point
は Cloud Storage FUSE マウント ポイントです。コマンドを実行する前に、バケットを Cloud Storage FUSE にマウントする必要があります。マウントしないと、カーネル パラメータは増加しません。
export MOUNT_POINT=/path/to/mount/point
echo 1024 | sudo tee /sys/class/bdi/0:$(stat -c "%d" $MOUNT_POINT)/read_ahead_kb
最大スループットを達成する
スループットを最大限に引き出すには、十分な CPU リソースを備えたマシンを使用してスループットを向上させ、ネットワーク インターフェース カード(NIC)を飽和状態にします。CPU リソースが不足していると、Cloud Storage FUSE スロットリングが発生する可能性があります。
Google Kubernetes Engine を使用していて、ワークロードでスループットの向上が必要な場合は、Cloud Storage FUSE サイドカー コンテナへの CPU 割り当てを増やします。サイドカー コンテナで使用されるリソースを増やすか、無制限のリソースを割り当てることができます。
秒間クエリ数で IOPS のニーズを評価する
1 秒あたりの入出力オペレーション(IOPS)(Cloud Storage では「秒間クエリ数」とも呼ばれる)が高いワークロードの場合、Filestore は Cloud Storage FUSE よりも優れたオプションとなります。また、Filestore は、単一のファイル システムで非常に高い IOPS を実現し、レイテンシを低く抑えるのに適したオプションです。
また、高い IOPS と低レイテンシを提供する場合は、Cloud Storage FUSE のファイル キャッシュ保存機能を使用して、基盤となるキャッシュ メディアのパフォーマンス特性を基に構築することもできます。
負荷テストを実施する
Cloud Storage FUSE の負荷テストを実行する手順については、GitHub ドキュメントのパフォーマンス ベンチマークをご覧ください。
次のステップ
- Cloud Storage FUSE のキャッシュ保存について確認する。
- GitHub で Cloud Storage FUSE のセマンティクスとトラブルシューティングの詳細を確認する。