P2P 通信向けのパケットバッファのメモリ管理クラスです。 [詳解]
#include <OnlineCore/src/Platform/Core/PacketBufferManager.h>
nn::nex::PseudoSingletonを継承しています。
クラス | |
struct | UnitHeapDebugInfo |
パケットバッファマネージャー内部で使用するユニットヒープのメモリ確保情報です。 [詳解] | |
struct | UnitHeapParam |
パケットバッファマネージャー内部で使用するユニットヒープの構成情報です。 [詳解] | |
静的公開メンバ関数 | |
static qBool | EnablePacketBufferPool (qBool bEnable) |
パケットバッファプールを使用するか設定します。デフォルトはtrueで、使用します。 falseに設定した場合、デフォルトのメモリマネージャーによってパケットバッファは確保されます。 パケットバッファマネージャーが動作している時は変更できません。 設定した値は NEX の終了処理で破棄されます。 [詳解] | |
static size_t | GetRequiredMemorySize (const qVector< UnitHeapParam > ¶m) |
渡されたペイロード用のユニットヒープ構成情報をもとに、必要とされるパケットバッファプールのサイズを返します。 [詳解] | |
static qBool | GetSimpleUnitHeapParam (size_t poolSize, size_t avgSendSize, qVector< UnitHeapParam > ¶m) |
パケットバッファプールのサイズと平均送信データサイズを元に、ユニットヒープの簡易構成を算出して返します。 [詳解] | |
static void | GetUnitHeapDebugInfo (qVector< UnitHeapDebugInfo > &debugInfo) |
パケットバッファマネージャーで使用しているペイロード用のユニットヒープのメモリ確保情報を取得します。 パケットバッファマネージャーが動作中の場合のみ正しい値が取得できます。 [詳解] | |
static void | GetUnitHeapParam (qVector< UnitHeapParam > ¶m) |
パケットバッファマネージャーで使用するペイロード用のユニットヒープの構成情報を取得します。 SetUnitHeapParam() で設定を行っていない場合は、デフォルトで使用される構成情報を返します。 [詳解] | |
static qBool | IsActive () |
パケットバッファマネージャーが動作しているかを返します。動作中はユニットヒープ構成を変更できません。 [詳解] | |
static qBool | IsEnablePacketBufferPool () |
パケットバッファプールを使用するか返します。デフォルトはtrueで、使用します。 [詳解] | |
static void | ResetUnitHeapDebugInfo () |
パケットバッファマネージャーで使用しているペイロード用のユニットヒープのメモリ確保情報をリセットします。 [詳解] | |
static qBool | SetUnitHeapParam (const qVector< UnitHeapParam > ¶m) |
パケットバッファマネージャーで使用するペイロード用のユニットヒープの構成情報を設定します。 [詳解] | |
P2P 通信向けのパケットバッファのメモリ管理クラスです。
NEXのメモリ確保のうち、 P2P 通信で使用するパケットバッファのメモリ管理はパケットバッファマネージャーによって行われます。
パケットバッファマネージャーは、 P2P 通信開始前に専用のメモリプール(パケットバッファプール)を一括で確保し、 パケットバッファのメモリ確保要求に応じてパケットバッファプールからメモリ割り当てを行う機能です。
パケットバッファプール自体のメモリ確保は他のNEXオブジェクトと同じ方法で確保されます。
パケットバッファプールはあらかじめ制限されたサイズで確保されるため、 大量のパケット送受信が発生した際のメモリ消費によるNEX全体のメモリ枯渇を防ぐことができます。
以下で使用されるパケットバッファについてはパケットバッファマネージャーでは管理せず、他のNEXオブジェクトと同じメモリ管理が行われます。
パケットバッファプールの確保は P2P 通信開始前に確保され、 P2P 通信停止で解放されます。 具体的には、 ConnectivityManager::StartNATSession()、NetZ::NetZ()、 VSocket::Open()の呼び出しを契機に確保され、 ConnectivityManager::StopNATSession()、 NetZ::~NetZ()、 VSocket::Close()の呼び出し契機で解放されます。
パケットバッファプールは、複数のユニットヒープを使用して管理され、パケットのペイロード以外にペイロードに付随するパケット管理に使用するオブジェクトの確保に使用されます。 このうち、ペイロード用のユニットヒープについて、ユニットサイズやメモリブロック数をアプリケーション側でカスタマイズすることができます。アプリケーションの通信データサイズにあわせてカスタマイズしてください。
パケットバッファの確保は、ユニットサイズが小さいユニットヒープから順にメモリ確保を試み、最初に確保可能となったユニットヒープが使用されます。 最大サイズのユニットヒープでも確保できない場合は、パケットバッファプールが枯渇した状態となります。
|
static |
渡されたペイロード用のユニットヒープ構成情報をもとに、必要とされるパケットバッファプールのサイズを返します。
返されるプールサイズは、渡されたペイロード用ユニットヒープ構成情報をもとに確保されるペイロード用ユニットヒープと NEX内部で自動確保されるパケット管理オブジェクト用ユニットヒープの合計になります。
渡されたユニットヒープ構成情報が以下の条件の場合、不正とみなし0を返します。
[in] | param | ペイロード用のユニットヒープの構成情報を指定します。 |
|
static |
パケットバッファプールのサイズと平均送信データサイズを元に、ユニットヒープの簡易構成を算出して返します。
簡易構成は、ペイロード用とパケット管理オブジェクト用のユニットヒープのメモリ合計が指定したパケットバッファプールのサイズに収まるように算出されます。 また、ペイロード用のユニットヒープで使用するメモリのうち、半分が平均送信データサイズ、残り半分が最大サイズ(1364)のユニットヒープに割り当てられます。 なお、ユニットサイズはNEX内部で付与されるヘッダなどを考慮して平均送信データ送信サイズを80増やして4の倍数に補正された値となります。
パケットバッファプールで確保されるのは1364byte以下のパケットバッファのみのため、1364byteを超える送信データを除外した平均送信データサイズを与えてください。
この関数で得られた構成をもとに、アプリケーションに合わせたチューニングを行ってください。 プールサイズは64kbyte以上を指定する必要があります。
[in] | poolSize | パケットバッファプールのサイズを指定します。 |
[in] | avgSendSize | アプリケーションで送信するデータの平均サイズ。 |
[out] | param | ペイロード用のユニットヒープの構成情報が返ります。 |
true ユニットヒープ構成の算出成功
false 平均送信データサイズが0または1364を超える、プールサイズが小さすぎる
|
static |
パケットバッファマネージャーで使用するペイロード用のユニットヒープの構成情報を設定します。
すでにパケットバッファマネージャーが動作している場合は、設定できません。 動作中かどうかは、IsActive() で分かります。
以下の条件の場合、不正情報としてアサートエラーになります。
設定した値はNEX終了時まで保持されます。
[in] | param | ペイロード用のユニットヒープの構成情報を指定します。 |
true 設定成功
false 設定失敗
|
static |
パケットバッファマネージャーで使用するペイロード用のユニットヒープの構成情報を取得します。 SetUnitHeapParam() で設定を行っていない場合は、デフォルトで使用される構成情報を返します。
デフォルトのパケットバッファプールは、ペイロード用に1364byteのユニットサイズのユニットヒープが使用され、 パケット管理オブジェクト用のユニットヒープを含めて300kbyteの領域を使用します。
[out] | param | ペイロード用の各ユニットヒープの構成情報が返ります。 |
|
static |
パケットバッファマネージャーで使用しているペイロード用のユニットヒープのメモリ確保情報を取得します。 パケットバッファマネージャーが動作中の場合のみ正しい値が取得できます。
[out] | debugInfo | ペイロード用の各ユニットヒープのメモリ確保情報が返ります。 |
|
static |
パケットバッファマネージャーで使用しているペイロード用のユニットヒープのメモリ確保情報をリセットします。
|
static |
パケットバッファマネージャーが動作しているかを返します。動作中はユニットヒープ構成を変更できません。
true 動作中
false 動作していない
パケットバッファプールを使用するか設定します。デフォルトはtrueで、使用します。 falseに設定した場合、デフォルトのメモリマネージャーによってパケットバッファは確保されます。 パケットバッファマネージャーが動作している時は変更できません。 設定した値は NEX の終了処理で破棄されます。
[in] | bEnable | true:使用する、false:使用しない |
true 設定成功
false パケットバッファマネージャーが動作中のため設定失敗