ns 3中的資料跟蹤與採集 Logging系統

2021-09-12 23:05:03 字數 2801 閱讀 8909

在很多大型系統中,都會提供一種基於控制台的訊息記錄模組,用來向使用者即時地反饋命令的執**況或者系統的運**況,ns-3採用這種機制實現了一種可選的多等級的訊息記錄模組——logging系統。

logging系統提供七個等級,由低到高依次為:

日誌級別

含義log_error

記錄錯誤資訊

log_warn

記錄警告資訊

log_debug

記錄一些除錯資訊

log_info

記錄一些程式相關的資訊

log_function

當函式被呼叫時,該呼叫資訊就被記錄

log_logic

對於整體邏輯的描述

log_all

包含上述所有資訊

每乙個高等級記錄的資訊都包含低等級所要記錄的資訊。

在使用時,不同等級之間可以單獨設定也可以累加設定,可以通過修改環境變數ns_log設定也可以通過函式呼叫在指令碼設定

另,每乙個log_type都等價與乙個log_level_type,例如log_function和log_type_function的功能是一樣的。

logging系統在ns-3中主要有2種應用:一是通過輸出網路元件內部模組執行過程來方便使用者理解,二是通過輸出簡單的除錯資訊來方便使用者除錯。

1)有效化系統記錄模組(通過函式呼叫在指令碼設定等級)

在執行指令碼first.cc時的結果為:

這些資訊是怎麼得來的?其實在first.cc的分析中已經指出,這些資訊來自一下兩行語句:

logcomponentenable()函式的作用是使記錄模組有效。

第二個引數是設定該顯示的等級,這裡設定的都是log_level_info。可以修改這個等級引數來得到所需要的資訊,等級越高資訊越詳細。若把此處的等級改為log_level_function,則執行結果如下:

2)通過環境變數修改系統等級

通過修改指令碼**可以修改logging等級,但是每一次都要修改**非常不方便。其實,logging系統模組提供了通過修改環境變數的方法來修改記錄系統等級。**使用方法:在編譯指令碼前使用export命令修改ns_log的值。**仍以first.cc為例,可以做:

3)新增附加字首

很多情況下,使用者不僅想要了解每乙個資訊,還想知道資訊是何時由什麼函式產生的,以便去除錯**以達到想要的效果。例如上面執行結果中at time 2s client sent 1024 bytes to 10.1.1.2 port 9這條資訊是由哪個函式在什麼時間產生的。在這種情況下,可以為ns_log環境變數增加更多的字串引數來達到這一效果。

①新增prefix_func 來為每一條資訊顯示其產生函式,將會發現每一條資訊前都會有乙個函式字首。具體操作如下:

結果如下:

②新增prefix_time 來分析**程式中各個函式呼叫的時間以及各個事件的發生時間,將會發現每一條資訊前都會顯示其產生時間。具體操作如下:

結果如下:

4)自定義logging**

上面所有關於logging模組的知識全部是系統定義好的,但在實際寫**指令碼時難免需要輸出一些自定義的資訊。下面介紹自定義logging**的實現。

在first.cc指令碼中有這樣一行**:

ns_log_component_define ("firstscriptexample");
在此之前這行**看起來似乎沒有任何意義,其實不然,這句**的作用是用來向ns-3系統註冊乙個名為「firstscriptexample」的記錄元件。只有定義了記錄元件,才能在**指令碼中使用logging系統來自定義輸出語句。下面在first.cc中新增語句ns_log_info("creating topology");(這條語句要在建立節點之前新增),如下圖所示:

接下來要啟用有效化這個自定義的記錄元件,方法和啟用系統定義好的元件方法一樣,可以在指令碼中新增**,也可以通過環境變數的方法:

①logcomponentenable (「firstscriptexample」, log_level_info);

②export ns_log=firstscriptexample=info

推薦選用第二種方法(環境變數的方法)。

採用該方法再次執行指令碼,就會發現輸出資訊中多了乙個「creating topology」,如下:

在使用自定義logging系統時,要注意以下兩點:

①一定要在使用前向系統註冊自己的元件。

②要啟用已經註冊好的元件,建議使用環境變數的方法。

NS3中PyViz的安裝

sudo apt get install python dev python pygraphviz python kiwi python pygoocanvas python gnome2 python gnomedesktop python rsvg 安裝python gnomedesktop可能...

ns3中linux kernel的位置理解

dce中 kernel是作為應用軟體使用的,更確切的是作為網路協議棧使用。地位等同於ns3的ip協議棧。那麼層次就是 quagga kernel dce這樣的三層。對於每乙個虛擬節點都是這樣的三層。在dce這一層有節點和介面資訊,在kernel這一層可以看到介面資訊,路由 在quagga這一層也可看...

實現在eclipse中編譯ns 3的詳細步驟

網路模擬器ns 3中原始檔 cc 都是 程式 此處介紹乙個比較優秀的ide整合開發環境eclipse 選擇支援c c 的ide,如圖中紅圈 選擇linux 64 bit版本,32位還是64位根據自己安裝的linux系統選擇就好 然後,執行eclipse 此處是windows環境下使用的版本,往下拖找...