雷竞技 结算快吗扳手101.

这个页面提供了关于扳手模拟器可以模拟什么以及如何模拟的高级和详细信息。雷竞技 结算快吗raybet电子竞技竞猜类中提供了完整的API细节用户API参考。有关如何的说明,请参阅相关页面雷竞技raybet下载安装扳手雷竞技 结算快吗以及如何设置模拟器项目


10,000英尺视图的扳手模拟器雷竞技 结算快吗

一个雷竞技 结算快吗扳手模拟器可以简单到只有一个main ()创建要模拟的平台(硬件)的功能和在平台上运行的一组服务(软件)。这些服务对应于知道如何存储数据,执行计算和许多现实世界跨世界跨赛brastructure服务可以执行的其他有用物品的软件。

然后模拟器创建一个要执行的工作流,该工作流由一组计算任务组成,每个任务都有输入和输出文件,以及任务之间的控制和/或数据依赖关系。

然后创建一个特殊服务,称为工作流管理系统(WMS),将负责使用可用的硬件资源和软件服务在平台上执行工作流程。使用该WMS使用雷竞技 结算快吗扳手开发者API,正如所讨论的那样雷竞技 结算快吗扳手102.页面。

然后通过单个呼叫启动模拟(雷竞技 结算快吗扳手::模拟::发射()),并且仅在WMS终止时返回(在完成或未能完成工作流的执行之后)。模拟输出可以通过编程方式进行分析和/或转储到JSON文件中。此JSON文件可以加载到雷竞技 结算快吗扳手仪表板工具(只是运行雷竞技 结算快吗wrench-dashboard可执行文件,它应该已经安装在您的系统上)。雷竞技raybet下载

一个扳手模拟器的1000英尺视图雷竞技 结算快吗

在本节中,我们将深入了解如何实现一个扳手模拟器。雷竞技 结算快吗为提供上下文,我们引用/基本的例子/ bare-metal-chain例子扳手分布的目录雷竞技 结算快吗。该模拟器在运行一个计算服务和一个存储服务的两个主机平台上模拟链工作流的执行。虽然也有其他的例子(参见例子/ readme.md.),这个简单的示例足以展示扳手模拟器所做的大部分工作,包括执行下面的步骤。雷竞技 结算快吗请注意,模拟器的代码也包含大量的注释。

步骤0:包括扳手.h雷竞技 结算快吗

为便于使用,所有的扳手抽象在雷竞技 结算快吗雷竞技 结算快吗扳手用户API.可以通过单个头文件获得:

# include 雷竞技 结算快吗< wrench.h >

步骤1:创建并初始化一个模拟

类定义了扳手模拟的状态雷竞技 结算快吗雷竞技 结算快吗扳手:模拟类。类的实例,并对其进行初始化雷竞技 结算快吗扳手::仿真:: init()成员函数。裸金属链模拟器如下:

模拟。初始化(命令行参数个数,argv);

注意,这个成员函数接受传递给模拟器的main函数的命令行参数。这样它就可以解析扳手特定的和雷竞技 结算快吗SimGrid-specific命令行参数。(回想一下,扳手是基于雷竞技 结算快吗SimGrid)。两个有用的论点是——help-雷竞技 结算快吗wrench,显示一个扳手帮助消息,以及雷竞技 结算快吗——help-simgrid,显示广泛的SimGrid帮助消息。

第2步:实例化模拟平台

这是用雷竞技 结算快吗扳手::模拟::instantiatePlatform ()接受参数a的成员函数SimGrid虚拟平台描述文件。任何SimGrid模拟,以及任何扳手模拟,都必须提供模拟硬件平台的描述(计雷竞技 结算快吗算主机、主机集群、存储资源、网络链路、路由器、主机之间的路由等)。裸金属链模拟器附带一个平台描述文件,例子/基本的例子/ bare-metal-chain / two_hosts.xml,我们在这里包括:

< ?xml 版本=“1.0”? >
< !文档类型 平台 系统 “http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd”>
<平台 版本=“4.1”>
< id=“计数” 路由=“满的”>
< !——WMS运行的主机——>
<宿主 id=“wmshost” 速度=“10个女朋友” 核心=“1”>
<磁盘 id=“硬盘” read_bw=“100 mbps的” write_bw=“100 mbps的”>
<道具 id=“大小” 价值=“5000直布罗陀海峡”/>
<道具 id=“山” 价值=“/”/>
磁盘>
宿主>
< !——运行BareMetalComputeService的主机——>
<宿主 id=“computehost” 速度=“1女朋友” 核心=“10”>
<道具 id=“内存” 价值=“16 gb”/>
宿主>
< !——连接两个主机的网络链路——>
<链接 id=“network_link” 带宽=“50 mbps的” 延迟=“我们20”/>
< !——WMSHost的本地“环回”链接——>
<链接 id=“loopback_WMSHost” 带宽=“1000 ebp” 延迟=“0”/>
< !——ComputeHost的本地“环回”链接——>
<链接 id=“loopback_ComputeHost” 带宽=“1000 ebp” 延迟=“0”/>
< !——网络路由——>
<路线 src=“wmshost” dst=“computehost”>
<link_ctn id=“network_link”/>
路线>
< !——每个环回链路将每个主机连接到自身——>
<路线 src=“wmshost” dst=“wmshost”>
<link_ctn id=“loopback_WMSHost”/>
路线>
<路线 src=“computehost” dst=“computehost”>
<link_ctn id=“loopback_ComputeHost”/>
路线>
区>
平台>

这个文件定义了一个有两个主机的平台,WMSHostcomputehost.。前者是一个1核主机,计算速度为10 gflops /sec,有一个5000 gb的磁盘,具有100 MB/sec的读写带宽,挂载在/。后者是一个10核主机,每个核的计算速度为每秒1gflops,总RAM容量为16gb。该平台还声明了三个网络链接。第一个,叫network_link是一个互连两个主机的实际网络链接,具有50 MB / sec带宽和20微秒延迟。另外两个链接(loopback_WMSHostloopback_ComputeHost)用于为每个主机内的进程间通信(IPC)性能建模。最后,声明网络路由。来自主机的路由WMSHostcomputehost.是通过network_link。然后,使用每个环回链接从每个主机到其自身都有一条路由。注意,这些环回路由是可选的。默认情况下,SimGrid包括针对每个主机的环回路由,其带宽和延迟基于实际计算机上获得的测量值。上面的XML文件不使用这些默认值,而是通过更快的环回链接(零延迟和极高的带宽)声明循环路由。这是因为,对于这个模拟,我们希望建模一个平台,其中主机上的IPC基本上是免费的。

中的其他示例中的平台描述文件将为读者提供参考例子目录,然后转到SimGrid文raybet雷竞app档有关如何创建平台描述文件的详细信息。

裸金属链模拟器将平台描述的路径作为它的第二个命令行参数,从而将模拟的平台实例化为:

模拟。Instanti代言人(argv [2]);

步骤3:在平台上实例化服务

虽然上一步定义了硬件平台,但此步骤定义了该硬件上运行的软件服务。的雷竞技 结算快吗扳手:模拟:add ()成员函数用于向模拟中添加服务。每个服务类都是用一个特定的构造函数创建的,它还指定了服务要在哪个主机上启动。典型的服务类型包括计算服务、存储服务和文件注册服务(参见下面更多的细节)。

裸金属链模拟器实例化了三个服务。第一个是计算服务:

汽车Bare_Metal_service =模拟。添加( 雷竞技 结算快吗扳手:BareMetalComputeService(“computehost”, {“computehost”},”“, {}, {}));

雷竞技 结算快吗扳手:BareMetalComputeService类实现了一个计算服务的模拟,该服务贪婪地运行提交给它的作业。您可以将其看作是一个计算服务器,它只是在请求时分叉执行(可能是多线程的)进程,只确保不超过物理RAM容量。在这种情况下,计算服务在主机上启动computehost.。它可以访问同一主机的计算资源(第二个参数)。第三个参数对应于某个暂存存储器的路径,即在作业运行时可以临时存储数据的存储器。在本例中,scratch存储规范作为主机为空computehost.没有附加磁盘。(见/基本的例子/ bare-metal-chain-scratch例子示例模拟器,其中使用了划痕存储)。最后两个参数是std::地图对象(在本例中都是空的),用于配置计算服务的属性(参见下面这部分)。

第二个服务是存储服务:

汽车Storage_Service =模拟。添加( 雷竞技 结算快吗扳手:SimpleStorageService(“wmshost”, {“/”}, {{雷竞技 结算快吗扳手:SimpleStorageServiceProperty: BUFFER_SIZE,“50000000”}}, {}));

雷竞技 结算快吗扳手:SimpleStorageService类实现了一个远程可访问存储服务的模拟,文件可以在该服务上存储、复制、删除、读取和写入。此时需要在主机上启动存储服务WMSHost。它使用安装在/。与计算服务一样,最后两个参数用于配置服务的特定属性。在这种情况下,服务被配置为使用50 mb的缓冲区大小来管道网络和磁盘访问(详细信息请参见下面这部分)。

第三个服务是文件注册服务:

汽车file_registry_service =. 雷竞技 结算快吗扳手:FileRegistryService(“wmshost”);
模拟。添加(file_registry_service);

雷竞技 结算快吗扳手:FileRegistryService类实现了键值对服务的模拟,该服务为每个文件(键)存储可用于读/写访问的文件(值)的位置。WMS可以使用该服务来查找工作流文件的位置(这通常是必需的—请参见后面的步骤#4)。

步骤4:创建至少一个工作流

每个扳手模拟雷竞技 结算快吗器都模拟工作流的执行,因此必须创建雷竞技 结算快吗扳手:工作流类。该类具有用于手动创建任务和文件并将它们添加到工作流的成员函数。例如,裸金属链模拟器是这样做的:

/ *添加工作流任务* /
(int我= 0;我< num_tasks;I ++){
/ *创建任务:10GFLOP,1到10个核心,10MB内存占用* /
汽车任务=工作流程。addtask.(“task_”+ std :: to_string(i),10000000000.0,1,10,10000000);
}
/*添加工作流文件*/
(int我= 0;我
/ *创建100MB文件* /
工作流。添加文件(“文件_”+ std :: to_string(i),100000000);
}
/*为每个任务设置输入/输出文件*/
(int我= 0;我< num_tasks;I ++){
汽车任务=工作流程。gettaskbyid(“task_”+ std:: to_string (i));
任务 - >addInputFile(工作流。getFileByID(“文件_”+ std:: to_string(我)));
任务 - > AddOutputfile(工作流程。getFileByID(“文件_”+ std :: to_string(i + 1)));
}

上面创建了一个“链”工作流(因此得名模拟器),其中一个任务的输出被输入到下一个任务。任务的数量从命令行参数中获得。在上面的代码中,每个任务具有100%的并行效率(例如,在10个内核上运行比在1个内核上运行快10倍)。可以自定义任务的并行效率行为,如中所示例子/基本实施例/裸金属 - 多芯任务示例模拟器,其中创建并执行具有不同并行效率模型的任务。

雷竞技 结算快吗扳手:工作流类还提供成员函数,以从工作流描述文件中导入工作流程JSON格式DAX指数格式

在模拟工作流执行开始之前,工作流的输入文件必须是可用的(在某些存储服务上)。这些文件是某些任务的输入,而不是任何任务的输出。它们必须在某些存储服务上“暂存”,裸金属链模拟器是这样做的:

(汽车 constf:工作流。getInputFiles()) {
模拟。stageFile(f, storage_service);
}

注意,在这种特殊情况下,只有一个输入文件。但是上面的代码更加通用,因为它迭代所有工作流输入文件。如果没有,上面的代码将抛出一个异常雷竞技 结算快吗扳手:FileRegistryService实例已添加到模拟中。

步骤5:每个工作流至少实例化一个WMS

必须启动的一个特殊服务是工作流管理系统(Workflow Management System, WMS)服务,即负责执行给定软硬件资源的工作流的软件。裸金属链模拟器是这样做的:

汽车WMS =模拟。添加(雷竞技 结算快吗扳手:: onetaskatatimewms({baremetal_service},{storage_service},“wmshost”));

班级雷竞技 结算快吗扳手:OneTaskAtATimeWMS,它是这个示例模拟器的一部分,使用雷竞技 结算快吗扳手开发者API。看到雷竞技 结算快吗扳手102.页面获取关于如何使用扳手实现WMS的信息。雷竞技 结算快吗上面的代码将计算服务列表(第一个参数)和存储服务列表(第二个参数)传递给WMS构造函数。第3个参数指定WMS应该在主机上运行WMSHost

然后,先前创建的工作流程与WMS相关联:

wms - > addWorkflow(工作流);

步骤6:启动模拟

这是最简单的步骤,只需调用即可完成雷竞技 结算快吗扳手::模拟::发射():

模拟。发射();

此调用检查模拟设置,并块直到WMS终止。

步骤7:过程模拟输出

一次雷竞技 结算快吗扳手::模拟::发射()已返回,可以以编程方式处理仿真输出。的雷竞技 结算快吗扳手::模拟::getOutput ()成员函数返回类的实例雷竞技 结算快吗扳手:SimulationOutput。注意,有一些成员函数来配置生成的输出的类型和数量(请参阅雷竞技 结算快吗扳手::SimulationOutput::使*时间戳()成员函数)。裸金属链模拟器的最小输出处理如下:

(汽车 const&项目:追踪){
std:: cerr < <“任务”< <项目- > getContent () - >gettask.() - >getID() < <“按时完成”<< item->getDate() << std::endl;

具体来说,类雷竞技 结算快吗扳手:SimulationOutput有一个模板雷竞技 结算快吗扳手::SimulationOutput:: getTrace ()成员函数检索各种信息类型的跟踪。上面的第一行代码返回std::向量带有时间戳的任务完成事件。
第二行代码遍历这个向量并打印任务名称和任务完成日期(以秒为单位)。实现时间戳事件的类都是命名的类雷竞技 结算快吗扳手::仿真数据戳omething.,其中“_something_”是自我解释(例如,TaskCompletion,TaskFailure)。

另一种输出是(模拟)能源消耗。雷竞技 结算快吗扳手利用SimGrid能源插件,这为模拟平台中的计算时间和消散能量提供了核算。SimGrid的Energy插件需要主机pstate定义(性能水平,CPU频率)XML平台描述文件。的雷竞技 结算快吗扳手::模拟::getEnergyConsumed ()成员函数返回平台中所有主机消耗的能量。重要的是:在扳手模拟中,能源插件默认是不启用的。雷竞技 结算快吗要启用它,请传递——activate-energy模拟器的命令行选项。看到例子/基本实施例/云袋 - 任务 - 能量对于使用此插件的示例模拟器(以及定义主机功耗配置文件的示例平台描述文件)。

还可以将所有模拟输出转储到JSON文件中。这是用雷竞技 结算快吗扳手::SimulationOutput::转储* JSON ()成员函数。如果您想raybet雷竞app手工解析/处理JSON,每个成员函数的文档详细说明了JSON输出的结构。的API文档raybet雷竞app雷竞技 结算快吗扳手:SimulationOutput类获取所有细节。

或者,您可以运行已安装的雷竞技raybet下载雷竞技 结算快吗wrench-dashboard工具,它提供了生成的JSON模拟输出的交互式可视化/检查。中示例模拟器生成的JSON输出可以运行仪表板/基本的例子/ bare-metal-bag-of-task例子/基本的例子/ cloud-bag-of-task例子。这些模拟器生成一个JSON文件/tmp/雷竞技 结算快吗wrench.json.。只需运行命令雷竞技 结算快吗wrench-dashboard,将弹出一个Web浏览器窗口,您只需在该窗口中上传/tmp/雷竞技 结算快吗wrench.json.文件。

可用的服务

下面是扳手中可用的服务列表。雷竞技 结算快吗单击相应的链接以获得关于这些服务是什么以及如何创建它们的更多信息。

  • 计算服务:这些服务知道如何计算工作流任务:
  • 存储服务这些服务知道如何存储和访问工作流文件:
  • 文件注册表服务这些服务,又称复制目录的数据库密钥值对文件副本可用的存储服务对。
  • 网络距离服务:这些是监视网络的服务,并维护主机到主机网络距离的数据库:
  • EnergyMeter服务:这些服务用于定期测量主机能耗,并将这些测量结果包含在模拟输出中
    (见本节)。
    • 能源计量服务
  • 工作流管理系统(衍生雷竞技 结算快吗扳手:WMS):WMS提供用于执行工作流程应用的机制,包括优化各种目标的决策(通常尝试最小化工作流执行时间)。
    至少应该为运行模拟提供WMS。默认情况下,可以使用扳手雷竞技 结算快吗不是提供WMS实现作为其核心组件的一部分。模拟器中的每个示例例子/目录实现自己的WMS。控件上还可以找到其他WMS实现雷竞技 结算快吗扳手项目网站。看到雷竞技 结算快吗扳手102.获取有关如何实现WMS的信息。

定制服务

每个服务都可以通过传递给它的构造函数a来定制属性列表即,一个键值映射,其中每个键是一个属性,每个值是一个字符串。每个服务定义一个属性类。例如,雷竞技 结算快吗扳手:服务类具有关联的雷竞技 结算快吗扳手:ServiceProperty类,雷竞技 结算快吗扳手:: computeservice.类具有关联的雷竞技 结算快吗扳手:ComputeServiceProperty类,等等,在服务类层次结构的所有级别上。

这些属性类的APraybet雷竞appI文档解释了每个属性的含义、可能的值和默认值。其他属性更多地与服务在操作时可以或应该做什么有关。例如,雷竞技 结算快吗扳手:BatchComputeServiceProperty班级定义A.雷竞技 结算快吗扳手:BatchComputeServiceProperty:: BATCH_SCHEDULING_ALGORITHM这指定了批处理服务应该用于优先作业的哪些调度算法。所有属性类继承来自雷竞技 结算快吗扳手:ServiceProperty类,并且可以研究该层次结构以发现所有可能的(而且有很多)服务定制机会。

最后,每个服务在网络上与其他服务交换消息(例如,WMS服务向计算服务发送“执行一些工作”消息)。所有消息的字节大小(即有效负载)都可以像属性一样进行定制,即通过向服务的构造函数传递一个键值映射。例如,雷竞技 结算快吗扳手:: servicemessagepayload.班级定义A.雷竞技 结算快吗扳手:ServiceMessagePayload:: STOP_DAEMON_MESSAGE_PAYLOAD属性,可用于自定义发送到服务守护进程(即服务的入口点)的控制消息的大小,以字节为单位,以告诉它终止。每个服务类都有一个相应的消息有效负载类,这些消息有效负载类的API文档详细说明了可定制其有效负载的所有消息。raybet雷竞app

自定义日志记录

运行扳手模拟器时,您可能会注意雷竞技 结算快吗到没有记录输出。默认情况下,禁用日志记录输出,但启用它通常很有用(记住它可以减慢模拟)。雷竞技 结算快吗扳手的日志系统是SimGrid的日志记录系统顶部的薄层,因此通过命令行参数进行控制。

bare-metal-chain示例模拟器可以执行如下/基本的例子/ bare-metal-chain例子目录:

./雷竞技 结算快吗wrenchch-example-bare-metal-chain 10 ./two_hosts.xml.

上面的代码不会产生任何输出。可以对终端启用一些日志记录。这个例子中的WMS类(OneTaskAtATimeWMS.cpp)定义了一个名为custom_wms(参见第一行例子/基本的例子/ bare-metal-chain / OneTaskAtATimeWMS.cpp),启用方式如下:

。/雷竞技 结算快吗-example-bare-metal-chain 10 ./two_hosts.xml——log=custom_wms.threshold=info

现在您将看到WMS实现生成的一些(绿色)日志输出。通常希望看到这些消息,因为WMS是工作流执行的大脑。当其他消息被禁用时,它们可以被启用,如下所示:

可以禁用带记录输出的着色- 雷竞技 结算快吗无光泽论点:

。/雷竞技 结算快吗-example-bare-metal-chain 10 ./two_hosts.xml——log=custom_wms.threshold=info--雷竞技 结算快吗- 不用颜色

当将日志输出重定向到一个文件时,禁用颜色可能很有用。

启用所有日志记录都是通过参数完成的——雷竞技 结算快吗wrench-full-log:

。/雷竞技 结算快吗-example-bare-metal-chain雷竞技 结算快吗完整的日志

日志记录输出现在包含由所有模拟运行所生成的输出。在传递时显示有关记录功能的更多详细信息——help-logs命令行参数对您的模拟器。日志类别名称附加到* . cpp模拟器代码、扳手代码和SimGrid代码中的文件。雷竞技 结算快吗使用——help-log-categories命令行参数显示整个日志类别层次结构(非常大)。

看到Simgrid日志文档raybet雷竞app对所有细节。

static const std::string BUFFER_SIZE
复制/通信数据时使用的缓冲区大小:
定义:StorageServiceProperty.h: 32
Workflowfile * AddFile(STD :: String,Double)
向工作流中添加一个新文件。
定义:Workflow.cpp:235
std::shared_ptr< T > add(T * T)
方法将服务添加到模拟中。
定义:Simulation.h: 73
const std:: string getID ()
获取任务的id。
定义:WorkFlowTask.cpp:117
void Instanti代价平面(std :: string)
实例化一个模拟平台。
定义:Simulation.cpp: 217
一个文件注册服务(又名复制目录),它包含一个数据库,其中的文件是可用的。
定义:FileRegistryService.h: 35
空白addInputFile (WorkflowFile *文件)
向任务添加输入文件。
定义:WorkflowTask.cpp: 57
std::vector< WorkflowFile * > getInputFiles() const
检索工作流的输入文件列表(例如,那些输入到某些任务的文件…
定义:Workflow.cpp: 538
WorkflowTask * addTask(std::string, double flops, unsigned long min_num_cores, unsigned long max_num_cores, double memory_requirement)
创建并添加新的计算任务到工作流程。
定义:Workflow.cpp: 40
STD :: Vector *> getTrace()
一旦模拟完成,检索模拟输出跟踪的副本。
定义:SimulationOutput.h: 38
一个计算服务,管理一组多核计算主机,并提供访问他们的资源…
定义:BareMetalComputeService.h: 48
WorkflowFile * getFileByID(const std::string &id)
根据WorkflowFile的ID找到WorkflowFile。
定义:Workflow.cpp:264
定义:Alarm.cpp: 20
工作流(由WMS执行)
定义:Workflow.h: 34
空发射()
启动仿真。
定义:Simulation.cpp: 346
WorkflowTask * getTask ()
检索与此时间戳相关联的WorkflowTask。
定义:SimulationTimestampTypes.cpp: 80
void init(int *,char **)
初始化模拟,解析出特定于扳手和特定于simgrid的命令行参数…雷竞技 结算快吗
定义:Simulation.cpp: 96
WorkflowTask完成时间的模拟时间戳类。
定义:SimulationTimestampTypes.h: 145
提供基本模拟方法的类。一旦模拟对象已显式或导入…
定义:Simulation.h: 46
void stagefile(workflowfile * file,std :: shared_ptr ss)
阶段在(唯一)挂载点的根目录中的存储服务中的文件副本。
定义:模拟.CPP:637
SimulationOutput & getOutput ()
获取模拟输出对象。
定义:Simulation.cpp: 1068
一种存储服务,提供对某些存储资源(如一个或多个磁盘)的直接访问....
定义:SimpleStorageService.h: 44
WorkflowTask * getTaskByID(const std::string &id)
根据WorkflowTask的ID找到WorkflowTask。
定义:Workflow.cpp:148