Chapter 2 Background
2.1 Related Work
由於網路環境愈來愈龐大、複雜,模擬一個網路環境運作行為的時間也愈來愈長,
為了解決模擬效率不彰的問題,將一個模擬的拓樸同時分散給不同的處理器執行 的方法也紛紛提出。在[4]中,作者使用 Parallel discrete event simulation (PDES) 的技術修改原有 NS2 網路模擬器 [5]的排程機制,使得它能平行運算事件,雖然 效能上有提昇,但是這套方法並不適用在所有協定模組的網路環境中,它只能應 用在 OSI-7 layer 建構出的網路環境底下。在[6]中,作者著重在無線網路環境底 下效能的提昇並在文章中提出一項技術,可以容易的檢驗出事件是否可以平行運 算,他從三個不同層面尋找能同時運算的事件,分別是 (i)event level, (ii) node level, and (iii) group level,不同層面由於 lookahead 大小的不同,可以找到平行運
同的 logical process (LP),不同的區塊透過 IPC 的方式進行訊息的交換,每一塊 獨立執行的區塊在完成所有不會造成結果錯誤的事件後都必需等待其它部份的 區塊也完成,才能繼續執行新的事件,這是因為不同區塊溝通的訊息可能還在傳 送的途中,不存在任何的 LP 裡,造成模擬結果的錯誤,因此,使用 global barrier 的方式暫停已完成的 LP,使得效能的提昇有了限制; 再者,使用者必需具備平 行運算的概念才能使不同處理器的負載都相等,達到最佳的效能,不過這也暗示 了,網路愈大愈複雜,這項工作就愈加困難。
大部份 PDES 演算法不是破壞掉原有模擬器的架構,就是使用新的程式語言 建構平行分散式環境,對於使用者來說,為了修改出一個可以平行執行的模擬環 境必需學習相關的概念,但無形中這也成為使用平行模擬的一道門檻。在[7]中,
作者開發出一套新的函式庫支援無線網路的同步模擬,不過這套函式庫並非使用 大家所熟知的程式語言所撰寫,為了使用它來完成不同核心同步模擬執行,就必 需花費時間去了解各種語法的使用。
2.1.1 Parallel and Distributed Simulation Overview
如何確保在多顆 CPU 上所運行的結果是正確的,是平行與分散式模擬最主要的 議題。一般的循序模擬 (Sequential simulation)會從事件串列中挑選時間戳記最小 的事件開始執行,所以,執行的過程中並不會出現擁有較大時間戳記的事件先被 執行的情況發生。但在多核心架構下,這樣的案例卻有可能出現,因為同時間可 能會有許多的事件一起執行,如果沒有判定哪些事件彼此之間會相互影響,就會 造成模擬結果的不正確,這種狀況稱之為 「因果錯誤 (causality errors) 」,如圖 Figure 2.1 所示。
Figure 2.1 Causality Error Scenario
為了解決「因果錯誤」的問題,在平行與分散式的模擬中,會將網路拓樸切 割出許多的「邏輯程序」 (Logical Process),它們彼此為相互獨立的個體,每一 個 LP 負責完成自己事件串列下的所有事件,為了確保每一個 LP 是在 time stamp non-decreasing ordering 的環境下完成各自負責的模擬事件,LP 間透過交換帶有 時間的訊息來獲得「local causality constraint」(Events within each logical process must be processed in time stamp order)。雖然在 local causality constraint 下可以保 證不會有「因果錯誤」的狀況發生,然而這個條件並非是必要的,違背「因果約 束 (local causality constraint)」也不一定會造成「因為錯誤」發生。這是因為不同 的兩個事件在相同的 LP 下彼此可能是相互獨立,即使兩個事件不按時間前後關 係完成,也不會造成結果的不同。
對於使用平行與分散式方法模擬,同步機制非常重要。而為了達到同步,最 有名的兩個方法為 – 保守法、樂觀法。使用保守法,每一個 LP 都遵循 local causality constraint,它們將被阻擋直到確定在事件串列中的元素都是安全的,才
以可以避免發生「因為錯誤」。另一個方法 – 樂觀法,則沒有完全照著時間順序