我使用NS 2.35並試圖確定我的路由算法的端到端延遲。解析ns2跟蹤文件
我認爲任何有良好腳本經驗的人都應該能夠回答這個問題,可悲的是,那個人不是我。
我有一個跟蹤文件,看起來像這樣:
- -t 0.548 -s 2 -d 7 -p cbr -e 500 -c 0 -i 1052 -a 0 -x {2.0 17.0 6 ------- null}
h -t 0.548 -s 2 -d 7 -p cbr -e 500 -c 0 -i 1052 -a 0 -x {2.0 17.0 -1 ------- null}
+ -t 0.55 -s 2 -d 7 -p cbr -e 500 -c 0 -i 1056 -a 0 -x {2.0 17.0 10 ------- null}
+ -t 0.555 -s 2 -d 7 -p cbr -e 500 -c 0 -i 1057 -a 0 -x {2.0 17.0 11 ------- null}
r -t 0.556 -s 2 -d 7 -p cbr -e 500 -c 0 -i 1047 -a 0 -x {2.0 17.0 1 ------- null}
+ -t 0.556 -s 7 -d 12 -p cbr -e 500 -c 0 -i 1047 -a 0 -x {2.0 17.0 1 ------- null}
- -t 0.556 -s 7 -d 12 -p cbr -e 500 -c 0 -i 1047 -a 0 -x {2.0 17.0 1 ------- null}
但這裏是我需要做的。
一條以+
開頭的行是當一個新數據包被添加到網絡時。 以r
開頭的行是目的地收到數據包的時候。 -t之後的雙重數字是事件發生的時間。最後,-i是數據包的標識。
對於我來計算平均端到端延遲,我需要在-i之後找到每個具有特定id的行。從那裏我需要計算r
的時間戳減去+
的時間戳
所以我認爲可能有一個正則表達式由空格分隔。我可以將每個分段放入自己的變量中。然後我會檢查15號(包ID)。
但我不知道該從哪裏走,或如何把它放在一起。
我知道網上有一些AWK腳本可以做到這一點,但它們都過時了,並且不符合當前格式(我不知道如何更改它們)。
任何幫助將不勝感激。
編輯:
這裏就是我希望找到一個完整的數據包路由的實例。 我已經在這些之間取出了很多行,以便您可以看到單個數據包事件。
# a packet is enqueued from node 2 going to node 7. It's ID is 1636. this was at roughly 1.75sec
+ -t 1.74499999999998 -s 2 -d 7 -p cbr -e 500 -c 0 -i 1636 -a 0 -x {2.0 17.0 249 ------- null}
# at 2.1s, it left node 2.
- -t 2.134 -s 2 -d 7 -p cbr -e 500 -c 0 -i 1636 -a 0 -x {2.0 17.0 249 ------- null}
# at 2.134 it hopped from 2 to 7 (not important)
h -t 2.134 -s 2 -d 7 -p cbr -e 500 -c 0 -i 1636 -a 0 -x {2.0 17.0 -1 ------- null}
# at 2.182 it was received by node 7
r -t 2.182 -s 2 -d 7 -p cbr -e 500 -c 0 -i 1636 -a 0 -x {2.0 17.0 249 ------- null}
# it was the enqueued by node 7 to be sent to node 12
+ -t 2.182 -s 7 -d 12 -p cbr -e 500 -c 0 -i 1636 -a 0 -x {2.0 17.0 249 ------- null}
# slightly later it left node 7 on its was to node 12
- -t 2.1832 -s 7 -d 12 -p cbr -e 500 -c 0 -i 1636 -a 0 -x {2.0 17.0 249 ------- null}
# it hopped from 7 to 12 (not important)
h -t 2.1832 -s 7 -d 12 -p cbr -e 500 -c 0 -i 1636 -a 0 -x {2.0 17.0 -1 ------- null}
# received by 12
r -t 2.2312 -s 7 -d 12 -p cbr -e 500 -c 0 -i 1636 -a 0 -x {2.0 17.0 249 ------- null}
# added to queue, heading to node 17
+ -t 2.2312 -s 12 -d 17 -p cbr -e 500 -c 0 -i 1636 -a 0 -x {2.0 17.0 249 ------- null}
# left for node 17
- -t 2.232 -s 12 -d 17 -p cbr -e 500 -c 0 -i 1636 -a 0 -x {2.0 17.0 249 ------- null}
# hopped to 17 (not important)
h -t 2.232 -s 12 -d 17 -p cbr -e 500 -c 0 -i 1636 -a 0 -x {2.0 17.0 -1 ------- null}
# received by 17 notice the time delay
r -t 2.28 -s 12 -d 17 -p cbr -e 500 -c 0 -i 1636 -a 0 -x {2.0 17.0 249 ------- null}
腳本將承認2.134爲開始時間,併爲2.28結束,然後給我的0.146sec延遲的理想輸出。它會爲所有數據包ID執行此操作,並只報告平均值。
有人要求我擴展一下文件的工作方式,以及我的期望。
該文件列出了約10,000個數據包的說明。每個數據包可以處於不同的狀態。重要的狀態是+
,這意味着一個數據包已經在一個路由器入隊,而r
這意味着數據包已經被它的目的地接收。
有可能一個被入隊的數據包(因此+
入口)沒有被實際接收,而是被丟棄。這意味着我們不能假定每個+
條目都會有一個r
條目。
我試圖衡量的是平均端到端延遲。這意味着,如果你看一個單一的數據包,就會有一段時間它被排隊,並且它會被接收。我需要做這個計算來找到它的端到端延遲。但我還需要爲9,999個其他數據包來獲得平均值。
我已經考慮過更多,並且總體來說我認爲算法需要工作。
- 刪除不與
+
或r
開始,因爲它們是不重要的所有行。 - 檢查所有數據包ID(即-i後面的數字,例如1052),並將它們放入某種組(也許是多個數組)。
- 每個組現在應該包含有關特定數據包的所有信息。
- 組內,檢查是否有+,理想情況下我們想要第一個+。記錄下它的時間。
- 尋找更多
+
行。看看他們的時間。日誌可能有點混亂。所以它可能會有一個+
線,事實上在模擬的早些時候。 - 如果這個新的
+
行有一個更早的時間,然後用它更新時間變量。 - 假設沒有更多
+
行,請查找r
行。 - 如果沒有
r
行,數據包就被丟棄,所以不用擔心。 - ,每
r
線你會發現,我們需要做的是找到誰擁有最新的時間戳 - 與最新的時間戳
r
線是在數據包終於收到了一個。 - 從
r
時間中減去+
時間,這給了我們分組傳送所花費的時間。 - 將此值添加到數組中,以便稍後對其進行平均。
- 在每個數據包ID組上重複這個過程,然後最終平均所創建的延遲數組。
這就是很多打字,但我認爲它的清晰,因爲我可以在我想要的。我希望我是一個正則表達式大師,但我沒有足夠的時間去學習它來完成這個任務。
感謝您的幫助,如果您有任何問題,請告訴我。
如果你不介意,你能展示你的最終結果應該是什麼樣子?這有點難以理解。例如 –
以'-'和'h'開頭的行是什麼? –
1)當你運行這個,它會是一個特定的身份,還是你想做這個匹配的文件中的所有身份? 2)您在工作文件中預計多大/多少行?我們在談論多MB文件嗎? –