使用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)