论文中需要一个专门针对于边缘计算模块的仿真测试平台,所以找到了一个EdgeCloudSim的开源平台,又是基于Java进行开发的,觉得很不错,但是中文网络环境中好像还没有对其的教程,在下不才,打算写一系列博文简单介绍分享一些这个软件的使用和踩过的坑。
简介
EdgeCloudSim是一种应用于边缘计算中计算和网络的仿真测试平台,它基于CouldSim进行开发,但添加了相当多的功能,因此可以有效地用于边缘计算方案。EdgeCloudSim是一个开源工具。
包含的功能主要有:
- 在Edge或Cloud VM之间进行任务迁移。
- 移动和边缘设备以及云数据中心的能耗模型。
- 通过考虑拥塞或其他参数(例如移动设备与WiFi接入点之间的距离)来添加概率网络故障模型。
- 用于显示网络拓扑的可视工具。
下载
直接中GitHub上clone下来就好了。
下载地址
安装
EdgeCloudSim需要在Linux环境或者MAC OS中能使用,Windows其实也可以,但是使用方法就不同了,那么将下载下来的tar包在Linux环境中进行解压,开箱即用。
我们就会得到这样的一个目录。其中bin文件夹刚解压的时候是不会有的,当编译Java文件之后产生class字节码文件,就产生这个bin文件夹用于存放字节码文件。
同时,EdgeCloudSim是基于Java进行开发的,所以我们还需要安装JDK环境,版本是1.8及以上。
跑一个demo
在scripts文件夹下已经预先写了很多demo,我们选择sample_app1。
Linux环境下
编译
首先我们编译Java代码,这里已经有一个预先写好的脚本,运行这个脚本就会帮我们编译代码,生成class文件。如果没有任何报错,编译就算成功了,外面的目录下也会生成一个bin文件夹。
sh compile.sh
运行
然后我们就可以通过runner脚本来运行Java程序了。这里需要注意的是,如果我们不加入运行参数,它的默认配置文件路径存在一些问题,会报错:
java.io.FileNotFoundException: /home/kt/edge/EdgeCloudSim-master/scripts/sample_app1/scripts/sample_app1/config/applications.xml (没有那个文件或目录)
所以,这里有两个办法,简单粗暴的就是在报错的路径下重新复制一份配置文件,更合理的就是填入runner.sh的运行参数,我更推荐后者。我们打开runner.sh文件,可以看到如下参数顺序:
script_root_path="$(dirname "$(readlink -f "$0")")"
simulation_out_folder=$1
scenario_name=$2
edge_devices_file=$3
applications_file=$4
iteration_number=$5
scenario_out_folder=${simulation_out_folder}/${scenario_name}/ite${iteration_number}
scenario_conf_file=${script_root_path}/config/${scenario_name}.properties
scenario_edge_devices_file=${script_root_path}/config/${edge_devices_file}
scenario_applications_file=${script_root_path}/config/${applications_file}
这里$0是Shell本身的文件名,而后面5个参数我们可以在输入shell指令的时候手动写入,这样就不会在Java运行的时候用到默认文件路径而产生错误了。这五个参数分别表示:1、仿真结果输出文件夹路径;2、仿真场景名称;3、边缘设备配置文件名称;4、应用文件名称、5、版本号。
这里是我的运行shell的输入信息,结果输出路径依个人而定:
结果
当运行runner.sh之后没有报错,那么仿真程序就正在运行了,可能需要等待比较长的时间。
结束之后,会在我们指定的输入路径之下产生很多仿真过程的日志文件。
打开ite1.log,就可以看到具体参数信息,包括边缘计算过程中的性能指标。
Windows环境下
其实也可以直接通过Java命令对代码进行编译和运行,但是,我们为了方便自己修改代码和调试,可以直接用idea来打开工程并运行。
如果使用idea的话,直接选择打开项目,然后选择文件夹EdgeCloudSim-master即可。例如要运行sample_app1,就选择src/applications/sample_app1文件下的MainApp,直接运行里面的main函数即可,注意修改配置和输出路径参数,创建输出文件夹。
绘图
这个工具包的作者在每个示例下面都提供了matlab的绘图函数,我们只需要改变相应的参数,就可以对结果日志文件中的数据进行提取绘制折线图,非常方便。
首先打开sample_app1下面的matlab文件夹,我们可以看到如下的matlab函数文件。
这里包含了对于仿真测试中各种性能结果的绘图函数,其中我们需要对getConfiguration函数进行修改,这个文件中包含了绘图所需的配置参数。
第一个参数表示了我们将结果日志存放的路径,第二个参数表示仿真的版本信息。这样,plotGenericResult函数会读取这个文件,然后得到具体日志信息,然后再由其他相应的函数调用进行绘图。
我们这里调用一个plotAvgFailedTask函数,看看效果。运行之后,在日志文件路径下,就会生成很多pdf文件,里面就是对应的统计图了。