Japan QualNet Community Forums Japan QualNet Community Forums
Welcome Guest 
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/04/27:10/11
2024/04/26:21/24

2024/02/27より287/1374
人気モジュール
No.1: フォーラム 96
No.2: QualNet概要 8
No.3: リンク集 2
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット66
No.2:Windows NT2
No.3:Linux1

No.1:どっかの巡回ロボット60
No.2:Safari3
No.3:Baidu巡回ロボット3

日曜日からの合計
メイン
   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へ渡す際の送信キューから取り出した場所だということがわかります。

ここまでの確認から、先の投稿の回答としました。
ご参考まで。
フラット表示 前のトピック | 次のトピック
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT