【理论】使用iFogSim进行模拟

使用iFogSim进行模拟

前置条件:需有iFogSim环境,和对iFogSim的基础概念有所了解。可阅读前两篇文章。

  1. 首先需要创建特定配置的物理组件,配置的参数包括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)
  1. 第二步需要创建必须的逻辑组件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)
  1. 最后管理组件(Module Mapping)被初始化出用来定以不同调度方式和AppModule的放置策略。用户在分配AppModules到雾设备时可以定义总消耗量,服务延迟,网络使用,操作损耗和设备差异并且可以相应的继承抽象的模块映射(Module Mapping)类。根据AppEdges的信息,一个AppModule需要分配指定的对应的元组类型并且能够满足可用的雾资源。一旦AppModule和雾设备完成映射,物理组件和逻辑组件的信息会被送往控制对象。随后控制对象将整个系统提交到CloudSim引擎作模拟。
/*控制组件的创建接口*/
public Controller(String name,
                  List<FogDevice> fogDevices,
                  List<Sensor> sensors,
                  List<Actuator> actuators)
posted @ 2021-06-12 15:41  ReaIms  阅读(1274)  评论(0编辑  收藏  举报