このページでは、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 のセマンティクスとトラブルシューティングをご覧ください。