CTR NEX API Reference
nn::nex::PacketBufferManager クラス

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 > &param)
 渡されたペイロード用のユニットヒープ構成情報をもとに、必要とされるパケットバッファプールのサイズを返します。 [詳解]
 
static qBool GetSimpleUnitHeapParam (size_t poolSize, size_t avgSendSize, qVector< UnitHeapParam > &param)
 パケットバッファプールのサイズと平均送信データサイズを元に、ユニットヒープの簡易構成を算出して返します。 [詳解]
 
static void GetUnitHeapDebugInfo (qVector< UnitHeapDebugInfo > &debugInfo)
 パケットバッファマネージャーで使用しているペイロード用のユニットヒープのメモリ確保情報を取得します。 パケットバッファマネージャーが動作中の場合のみ正しい値が取得できます。 [詳解]
 
static void GetUnitHeapParam (qVector< UnitHeapParam > &param)
 パケットバッファマネージャーで使用するペイロード用のユニットヒープの構成情報を取得します。 SetUnitHeapParam() で設定を行っていない場合は、デフォルトで使用される構成情報を返します。 [詳解]
 
static qBool IsActive ()
 パケットバッファマネージャーが動作しているかを返します。動作中はユニットヒープ構成を変更できません。
[詳解]
 
static qBool IsEnablePacketBufferPool ()
 パケットバッファプールを使用するか返します。デフォルトはtrueで、使用します。
[詳解]
 
static void ResetUnitHeapDebugInfo ()
 パケットバッファマネージャーで使用しているペイロード用のユニットヒープのメモリ確保情報をリセットします。 [詳解]
 
static qBool SetUnitHeapParam (const qVector< UnitHeapParam > &param)
 パケットバッファマネージャーで使用するペイロード用のユニットヒープの構成情報を設定します。 [詳解]
 

詳解

P2P 通信向けのパケットバッファのメモリ管理クラスです。

NEXのメモリ確保のうち、 P2P 通信で使用するパケットバッファのメモリ管理はパケットバッファマネージャーによって行われます。

パケットバッファマネージャーは、 P2P 通信開始前に専用のメモリプール(パケットバッファプール)を一括で確保し、 パケットバッファのメモリ確保要求に応じてパケットバッファプールからメモリ割り当てを行う機能です。

パケットバッファプール自体のメモリ確保は他のNEXオブジェクトと同じ方法で確保されます。

パケットバッファプールはあらかじめ制限されたサイズで確保されるため、 大量のパケット送受信が発生した際のメモリ消費によるNEX全体のメモリ枯渇を防ぐことができます。

以下で使用されるパケットバッファについてはパケットバッファマネージャーでは管理せず、他のNEXオブジェクトと同じメモリ管理が行われます。

  • サーバーとの通信
  • 複製オブジェクトのうちCoreDOによる通信
  • パケットバッファマネージャーで確保可能なメモリブロックサイズの最大(1364byte)を超えるデータの送受信

パケットバッファプールの確保は P2P 通信開始前に確保され、 P2P 通信停止で解放されます。 具体的には、 ConnectivityManager::StartNATSession()、NetZ::NetZ()、 VSocket::Open()の呼び出しを契機に確保され、 ConnectivityManager::StopNATSession()NetZ::~NetZ()VSocket::Close()の呼び出し契機で解放されます。

パケットバッファプールは、複数のユニットヒープを使用して管理され、パケットのペイロード以外にペイロードに付随するパケット管理に使用するオブジェクトの確保に使用されます。 このうち、ペイロード用のユニットヒープについて、ユニットサイズやメモリブロック数をアプリケーション側でカスタマイズすることができます。アプリケーションの通信データサイズにあわせてカスタマイズしてください。

パケットバッファの確保は、ユニットサイズが小さいユニットヒープから順にメモリ確保を試み、最初に確保可能となったユニットヒープが使用されます。 最大サイズのユニットヒープでも確保できない場合は、パケットバッファプールが枯渇した状態となります。

関数詳解

static size_t nn::nex::PacketBufferManager::GetRequiredMemorySize ( const qVector< UnitHeapParam > &  param)
static

渡されたペイロード用のユニットヒープ構成情報をもとに、必要とされるパケットバッファプールのサイズを返します。

返されるプールサイズは、渡されたペイロード用ユニットヒープ構成情報をもとに確保されるペイロード用ユニットヒープと NEX内部で自動確保されるパケット管理オブジェクト用ユニットヒープの合計になります。

渡されたユニットヒープ構成情報が以下の条件の場合、不正とみなし0を返します。

  • ユニットサイズが0または1364超
  • ユニットサイズが4の倍数でない
  • メモリブロック数が0
  • 配列サイズが0
  • ユニットサイズが1364の要素が無い
引数
[in]paramペイロード用のユニットヒープの構成情報を指定します。
戻り値
メモリプールのサイズを返します。ユニットヒープ構成情報が不正の場合0を返します。
static qBool nn::nex::PacketBufferManager::GetSimpleUnitHeapParam ( size_t  poolSize,
size_t  avgSendSize,
qVector< UnitHeapParam > &  param 
)
static

パケットバッファプールのサイズと平均送信データサイズを元に、ユニットヒープの簡易構成を算出して返します。

簡易構成は、ペイロード用とパケット管理オブジェクト用のユニットヒープのメモリ合計が指定したパケットバッファプールのサイズに収まるように算出されます。 また、ペイロード用のユニットヒープで使用するメモリのうち、半分が平均送信データサイズ、残り半分が最大サイズ(1364)のユニットヒープに割り当てられます。 なお、ユニットサイズはNEX内部で付与されるヘッダなどを考慮して平均送信データ送信サイズを80増やして4の倍数に補正された値となります。

パケットバッファプールで確保されるのは1364byte以下のパケットバッファのみのため、1364byteを超える送信データを除外した平均送信データサイズを与えてください。

この関数で得られた構成をもとに、アプリケーションに合わせたチューニングを行ってください。 プールサイズは64kbyte以上を指定する必要があります。

引数
[in]poolSizeパケットバッファプールのサイズを指定します。
[in]avgSendSizeアプリケーションで送信するデータの平均サイズ。
[out]paramペイロード用のユニットヒープの構成情報が返ります。
戻り値一覧:

true ユニットヒープ構成の算出成功

false 平均送信データサイズが0または1364を超える、プールサイズが小さすぎる

static qBool nn::nex::PacketBufferManager::SetUnitHeapParam ( const qVector< UnitHeapParam > &  param)
static

パケットバッファマネージャーで使用するペイロード用のユニットヒープの構成情報を設定します。

すでにパケットバッファマネージャーが動作している場合は、設定できません。 動作中かどうかは、IsActive() で分かります。

以下の条件の場合、不正情報としてアサートエラーになります。

  • ユニットサイズが0または1364超
  • ユニットサイズが4の倍数でない
  • メモリブロック数が0
  • 配列サイズが0
  • ユニットサイズが1364の要素が無い

設定した値はNEX終了時まで保持されます。

引数
[in]paramペイロード用のユニットヒープの構成情報を指定します。
戻り値一覧:

true 設定成功

false 設定失敗

参照
IsActive(), GetUnitHeapParam()
static void nn::nex::PacketBufferManager::GetUnitHeapParam ( qVector< UnitHeapParam > &  param)
static

パケットバッファマネージャーで使用するペイロード用のユニットヒープの構成情報を取得します。 SetUnitHeapParam() で設定を行っていない場合は、デフォルトで使用される構成情報を返します。

デフォルトのパケットバッファプールは、ペイロード用に1364byteのユニットサイズのユニットヒープが使用され、 パケット管理オブジェクト用のユニットヒープを含めて300kbyteの領域を使用します。

引数
[out]paramペイロード用の各ユニットヒープの構成情報が返ります。
参照
SetUnitHeapParam()
static void nn::nex::PacketBufferManager::GetUnitHeapDebugInfo ( qVector< UnitHeapDebugInfo > &  debugInfo)
static

パケットバッファマネージャーで使用しているペイロード用のユニットヒープのメモリ確保情報を取得します。 パケットバッファマネージャーが動作中の場合のみ正しい値が取得できます。

引数
[out]debugInfoペイロード用の各ユニットヒープのメモリ確保情報が返ります。
参照
ResetUnitHeapDebugInfo()
static void nn::nex::PacketBufferManager::ResetUnitHeapDebugInfo ( )
static

パケットバッファマネージャーで使用しているペイロード用のユニットヒープのメモリ確保情報をリセットします。

参照
GetUnitHeapDebugInfo()
static qBool nn::nex::PacketBufferManager::IsActive ( )
static

パケットバッファマネージャーが動作しているかを返します。動作中はユニットヒープ構成を変更できません。

戻り値一覧:

true 動作中

false 動作していない

static qBool nn::nex::PacketBufferManager::EnablePacketBufferPool ( qBool  bEnable)
static

パケットバッファプールを使用するか設定します。デフォルトはtrueで、使用します。 falseに設定した場合、デフォルトのメモリマネージャーによってパケットバッファは確保されます。 パケットバッファマネージャーが動作している時は変更できません。 設定した値は NEX の終了処理で破棄されます。

引数
[in]bEnabletrue:使用する、false:使用しない
戻り値一覧:

true 設定成功

false パケットバッファマネージャーが動作中のため設定失敗

参照
IsEnablePacketBufferPool()
static qBool nn::nex::PacketBufferManager::IsEnablePacketBufferPool ( )
static

パケットバッファプールを使用するか返します。デフォルトはtrueで、使用します。

戻り値一覧:

true 使用する

false 使用しない

参照
EnablePacketBufferPool()