使用iFogSim進行模擬
前置條件:需有iFogSim環境,和對iFogSim的基礎概念有所了解。可閱讀前兩篇文章。
- 首先需要創建特定配置的物理組件,配置的參數包括ram,處理器性能(每秒百萬指令),每百萬之令運行的消耗,上行和下行帶寬,根據分層等級划分的忙碌和空閑功耗。
/* 創建霧設備接口 */
private static FogDevice createFogDevice(String nodeName,
long mips,
int ram,
long upBw,
long downBw,
int level,
double ratePerMips,
double busyPower,
double idlePower)
在創建底層級的霧設備時,關聯的IoT設備(傳感器和驅動器)也需要創建,代表着感應間隔的Transmit Distribution對象在創建IoT傳感器時需要設置,此外傳感器和驅動器的創建需要引用application id 和 broker id。
/*創建傳感器接口*/
public Sensor(String name,
String tupleType,
int userId,
String appId,
Distribution transmitDistribution)
/*創建驅動器接口*/
public Actuator(String name,
int userId,
String appId,
String actuatorType)
- 第二步需要創建必須的邏輯組件AppModule, AppEdge和AppLoop。在創建AppModules時,其配置已經提供並且AppEdge對象包含了關於元組類型的信息,它們的方向,cpu和線路網長度伴隨着資源的引用和目標模塊。不同類型的元組基於AppEdge對象指定的規范進行創建。
/*AppModule的創建接口*/
public AppModule(int id,
String name,
String appId,
int userId,
double mips,
int ram,
long bw,
long size,
String vmm,
CloudletScheduler cloudletScheduler,
Map<Pair<String, String>, SelectivityModel> selectivityMap)
/*AppEdge的創建接口*/
public AppEdge(String source,
String destination,
double tupleCpuLength,
double tupleNwLength,
String tupleType,
int direction,
int edgeType)
/*AppLoop的創建接口*/
public AppLoop(List<String> modules)
- 最后管理組件(Module Mapping)被初始化出用來定以不同調度方式和AppModule的放置策略。用戶在分配AppModules到霧設備時可以定義總消耗量,服務延遲,網絡使用,操作損耗和設備差異並且可以相應的繼承抽象的模塊映射(Module Mapping)類。根據AppEdges的信息,一個AppModule需要分配指定的對應的元組類型並且能夠滿足可用的霧資源。一旦AppModule和霧設備完成映射,物理組件和邏輯組件的信息會被送往控制對象。隨后控制對象將整個系統提交到CloudSim引擎作模擬。
/*控制組件的創建接口*/
public Controller(String name,
List<FogDevice> fogDevices,
List<Sensor> sensors,
List<Actuator> actuators)