メイン Tools: QualNet Analyzer & QualNet Packet Tracer Average delayについて | 投稿するにはまず登録を |
題名 | 投稿者 | 日時 |
---|---|---|
Average delayについて | kou | 2016/11/11 20:39 |
Re: Average delayについて | ipoten | 2016/11/11 23:35 |
Re: Average delayについて | kou | 2016/11/14 12:01 |
» Re: Average delayについて | ipoten | 2016/11/15 18:58 |
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
ipoten | 投稿日時: 2016/11/15 18:58 |
一人前 登録日: 2005/7/12 居住地: 投稿: 102 |
Re: Average delayについて 統計値の定義を知るためにソースコードを確認しなければならないというのも製品としてどうかとは思うのですが、
QualNetは統計値に限らずそのようなケースが多いですね。 せっかくなので私が確認した際の手順のようなものを書いておきます。 QualNetのバージョンや、モデルが実装された時期により若干スタイルの変遷がありますが、 たいていのプロトコルでは ***Finalize() → ***PrintStats() というシミュレーションの終了時に呼ばれる関数で統計値を出力しています。 「***」はレイヤ名プロトコル名で、今回のIPの場合は NetworkIpFinalize() → NetworkIpPrintStats() となります。 ここから目的の統計値が出力されている個所を探し、出力元になっている値が記録されている変数を特定して、 その変数を検索することによってシミュレーション中にどのようなタイミングで記録が実施されているかを読み解きます。 一方、今回のIPのように一般的でかつ配下にさらに詳細なプロトコルが構成されている場合、 共通の統計値出力がソースコード上まとめて実装されていることがあります。 この場合、上記の探し方だと該当の出力個所にたどり着くのが面倒かもしれません。 ---- 私は今回以下のアプローチをとりました。(QualNet 7.4 のソースコード) 実際の統計値出力の文言 "Average delay" を全文検索します。 複数ヒットしますが、下記の個所を該当箇所と特定しました。 main\stats_net.cpp (335) STAT_NetStatistics::SetStatNames() Average delay の記録には、 STAT_Average STAT_NetStatistics::m_AverageDelay というメンバ変数が使用されているようです。 そこで今度は、m_AverageDelay を検索してみました。 stats_net.cpp の STAT_NetStatistics::AddPacketSentToTransportDataPoint() 関数内に m_AverageDelay.AddDataPoint() を使っている個所が見つかりました。 ここは関数の名称から、受信ノードにおいてネットワークレイヤ(IP)がトランスポートレイヤにデータを上げている個所と推定できます。 STAT_Average クラスの AddDataPoint() 関数は平均値をとるための個々の要素を記録する操作のようです。 AddPacketSentToTransportDataPoint() では m_AverageDelay.AddDataPoint() に delay を渡しており、 この delay はメッセージ内に記録されている sourceSentNetworkDown というタイムスタンプと現在時刻の差として計算されているようなので、 今度は sourceSentNetworkDown の記録個所を検索してみました。 stats_net.cpp の STAT_NetStatistics::AddPacketSentToMacDataPoints() 関数内に sourceSentNetworkDown に現在時刻を代入している個所が見つかりました。 ここは関数の名称から、送信ノードにおいてネットワークレイヤ(IP)がMACレイヤにデータを送り出している個所と推定できます。 ついでに AddPacketSentToMacDataPoints() の呼び出し階層を調べてみました。 MAC_OutputQueueDequeuePacket() → NetworkIpAddPacketSentToMacDataPoints() → AddPacketSentToMacDataPoints() となっており、送信側でIPからMACへ渡す際の送信キューから取り出した場所だということがわかります。 ここまでの確認から、先の投稿の回答としました。 ご参考まで。 |
フラット表示 | 前のトピック | 次のトピック |