![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
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へ渡す際の送信キューから取り出した場所だということがわかります。 ここまでの確認から、先の投稿の回答としました。 ご参考まで。 ![]() |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |