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

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/04/29:17/18
2024/04/28:16/23

2024/02/29より292/1375
人気モジュール
No.1: フォーラム 23
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット31

No.1:どっかの巡回ロボット30
No.2:Majestic-12巡回ロボット1

日曜日からの合計
メイン
   Tools: QualNet Analyzer & QualNet Packet Tracer
     Average delayについて
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kou
投稿日時: 2016/11/11 20:39
新米
登録日: 2016/6/20
居住地:
投稿: 10
Average delayについて
statファイルの中に各レイヤごとの結果が書き込まれていますが、その中のIP Average delayの定義について教えていただきたいです。
マニュアルにはAverage delay at the network layer.と書かれており、遅延がネットワークレイヤ上で起きていること以外わかりません。
このIP Average delayのdelayは何を指しているかを教えてください。(queueing delay?)
ipoten
投稿日時: 2016/11/11 23:35
一人前
登録日: 2005/7/12
居住地:
投稿: 102
Re: Average delayについて
こんにちは

ソースコードを見てみましたが、
(受信ノードでIPがMACから受け取った時刻) − (送信ノードでIPがMACに渡した時刻)
の平均時間 (second) を、受信側で記録しているようです。
IPの1ホップ分の遅延ですね。

ちなみに、「IPがMACに渡した時刻」というのはIPキューから取り出したところなので、
キューイングの時間は含まれないみたいです。
MAC/PHYの処理遅延(送受信分)と、メディアの伝搬遅延分 ということになるでしょうか。
kou
投稿日時: 2016/11/14 12:01
新米
登録日: 2016/6/20
居住地:
投稿: 10
Re: Average delayについて
詳しく教えていただきありがとうございます。感謝します
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