tencent cloud

Cloud Object Storage

クライアントサイドのベストプラクティス

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-11-24 11:23:01

ハイスループットを実現するためのプラクティス

クライアントがバケットから読み取るデータサイズは、設定項目fs.ofs.block.memory.trunk.byteによって制御されます。
設定項目
設定項目の詳細
説明
fs.ofs.block.memory.trunk.byte
1048576
オブジェクトのブロックサイズ。単位はバイト、デフォルト値は1048576(1MB)です
説明:
COSN SDKをご利用の場合、上記の設定項目名の前にfs.cosn.trsfを追加する必要があります。例:fs.cosn.trsf.fs.ofs.prev.read.block.count
ハイスループットが求められるシナリオでは、クライアントは先読みロジックを導入しています。ファイルを複数の先読みブロックに分割し、メモリにキャッシュすることで、読み取り遅延を低減し、スループットを向上させます。先読みブロックのパラメータを指定することで、様々なシナリオのスループットニーズに対応できます。

順次読み取りシナリオ

クライアント内部では、カーソルによって現在のシナリオがシーケンシャルリードであるかを検知します。シーケンシャルリードのシナリオである場合、先読みロジックが有効になります。それ以外の場合は使用されません。先読みロジックでは、クライアントは一度にキャッシュする先読みブロック数を固定します。関連する設定項目は以下の通りです。インスタンスタイプの構成に応じて、関連パラメータのチューニングが可能です。
設定項目
設定項目の詳細
説明
fs.ofs.prev.read.block.count
16
先読みブロックの数。デフォルトでは16です
fs.ofs.prev.read.block.release.enable
true
読み取り完了後のブロックをメモリから解放するかどうか。デフォルトではtrueです
fs.ofs.block.max.read.memory.cache.mb
16
1つのファイルが使用可能なメモリ量。デフォルトでは16、単位はMBです
説明:
OOMを避けるため、以下のメモリ使用に関するプラクティスを参考に、グローバルなキャッシュモデルを制御できます。
fs.ofs.data.transfer.thread.count
32
バケットから先読みブロックを取得するIOスレッドプールのコアスレッド数
fs.ofs.data.transfer.max.thread.count
Integer.MAX_VALUE
IOスレッドプールの最大スレッド数

ランダムリードのシナリオ

前述の通り、クライアントは現在のシナリオを検知し、ランダムリードである場合は先読みロジックをトリガーしません。また、このシナリオでは、実際のビジネスシナリオに応じて設定項目fs.ofs.block.memory.trunk.byteを調整し、一度にCOSバケットから読み取るデータサイズを変更することで、ランダムリードにおけるリード増幅を回避することを推奨します。


クライアントのメモリ使用に関するプラクティス

パフォーマンス向上のため、OFS SDKはデータのアップロードおよびダウンロード中にデータのキャッシュが行われます。ここでのキャッシュにはメモリキャッシュとディスクキャッシュがあり、アップロードとダウンロードで適用方法が異なります。
アップロード:メモリキャッシュ + ディスクキャッシュを使用
ダウンロード:メモリキャッシュのみを使用
メモリキャッシュブロックは必要に応じて確保されます。まずメモリキャッシュブロックの確保が試みられ、メモリキャッシュブロックが不足すると、ディスクキャッシュブロックの確保が試みられます。ディスクキャッシュは、データ書き込みプロセス中にオフヒープメモリを使用することで、ヒープメモリとカーネル空間のメモリ間でのコピーを減らし、データ書き込みのパフォーマンスを向上させます。

複数のファイルが互いに影響し合う(例:あるファイルが閉じられずリソースが解放されないため、新しい読み書き操作が行えない)のを避けるため、SDKの全体的なデフォルト原則は、単一ファイルが使用するキャッシュ量を制御することです。同時に、OOM問題を回避するため、クライアントではグローバル(ファイルシステム粒度)のキャッシュ設定項目が提供されています。クライアント環境に応じて設定を調整し、最適なパフォーマンスを実現します。

単一ファイルでのキャッシュ制御モデル

OFS SDKは、以下の2つの設定項目を使用して、単一ファイルのキャッシュ使用量をそれぞれ制御します。
設定項目
設定項目の詳細
説明
fs.ofs.block.max.memory.cache.mb
16
メモリキャッシュの使用量。デフォルトでは16、単位はMBです
fs.ofs.block.max.file.cache.mb
256
ディスクキャッシュの使用量。デフォルトでは256、単位はMBです
説明:
COSN SDKをご利用の場合、上記の設定項目名の前にfs.cosn.trsfを追加する必要があります。例:fs.cosn.trsf.fs.ofs.block.max.memory.cache.mb

グローバル(ファイルシステム粒度)でのキャッシュ制御モデル

SDKは、OOM問題を回避するため、読み取りと書き込みの二つのリクエストに対して、グローバル(ファイルシステム粒度)でのキャッシュ制御を提供しています。詳細は以下の通りです。
アップロード
ダウンロード
OFS SDKは、グローバルなアップロード時のメモリを制御するために、合計3つの設定項目を提供しています。
設定項目
設定項目の詳細
説明
fs.ofs.block.total.memory.cache.mb
0
アップロード時の最大メモリ使用量。デフォルトでは0(制御しない)、単位はMBです
fs.ofs.block.total.memory.cache.percent
100
アップロード時の最大メモリ使用比率。デフォルトでは100、単位はパーセントです
fs.ofs.block.total.memory.jvm.heap.percent
0
最大JVMメモリ使用比率。デフォルト値は0(制御しない)、単位はパーセントです
SDKは、2つのグローバル制御ルールを提供します。
ルール1:fs.ofs.block.total.memory.cache.mbfs.ofs.block.total.memory.cache.percentで、アップロード時の最大メモリ使用量を制御します。設定後、最大使用メモリサイズはfs.ofs.block.total.memory.cache.mb * fs.ofs.block.total.memory.cache.percent / 100となります。設定後、SDKは算出されたグローバルメモリキャッシュサイズと、単一ファイルの最大サイズfs.ofs.block.max.memory.cache.mbに基づき、同時に書き込み可能なファイル数を計算し、それに応じてセマフォを割り当てます。新しいファイルを開く際にセマフォを1つ要求し、要求に失敗した場合は強制的にディスクキャッシュが使用されます。ファイルが閉じられると、セマフォは返却されます。
ルール2:fs.ofs.block.total.memory.jvm.heap.percentで、最大JVMメモリを制御します。設定後、SDKは、JVMの最大メモリ(ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax()) * fs.ofs.block.total.memory.jvm.heap.percent / 100で上限を決定します。

デフォルトでは、fs.ofs.block.total.memory.cache.mbfs.ofs.block.total.memory.jvm.heap.percentの値は0であり、メモリに対する制御は行われません。両方の設定項目が0以外の場合、ルール1(最大メモリ使用量)がルール2(最大JVMメモリ使用量)よりも優先されます。
CHDFS SDKは、グローバルなダウンロード時のメモリを制御するために、合計3つの設定項目を提供しています。
設定項目
設定項目の詳細
説明
fs.ofs.block.total.read.memory.cache.mb
0
ダウンロード時の最大メモリ使用量。デフォルトでは0(制御しない)、単位はMBです
fs.ofs.block.total.read.memory.cache.percent
100
ダウンロード時の最大メモリ使用比率。デフォルトでは100、単位はパーセントです
SDKはfs.ofs.block.total.read.memory.cache.mbfs.ofs.block.total.read.memory.cache.percentで、ダウンロード時の最大メモリ使用量を制御します。設定後、最大使用メモリサイズはfs.ofs.block.total.read.memory.cache.mb * fs.ofs.block.total.read.memory.cache.percent / 100。となります。設定後、SDKは算出されたグローバルメモリキャッシュサイズと、単一ファイルの最大サイズfs.ofs.block.max.memory.cache.mbに基づき、同時に書き込み可能なファイル数を計算し、それに応じてセマフォを割り当てます。新しいファイルを開く際にセマフォを1つ要求し、要求に失敗した場合は強制的にディスクキャッシュが使用されます。ファイルが閉じられると、セマフォは返却されます。セマフォの要求はキューを通じてブロッキングメカニズムを実装しており、セマフォが不足している場合は、他のファイルが閉じられてセマフォが解放されるのを待ちます。


ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック