<?xml-model href='http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng' schematypens='http://relaxng.org/ns/structure/1.0'?><TEI xmlns="http://www.tei-c.org/ns/1.0">
	<teiHeader>
		<fileDesc>
			<titleStmt><title level='a'>Developing accurate and scalable simulators of production workflow management systems with WRENCH</title></titleStmt>
			<publicationStmt>
				<publisher></publisher>
				<date>11/01/2020</date>
			</publicationStmt>
			<sourceDesc>
				<bibl> 
					<idno type="par_id">10156518</idno>
					<idno type="doi">10.1016/j.future.2020.05.030</idno>
					<title level='j'>Future Generation Computer Systems</title>
<idno>0167-739X</idno>
<biblScope unit="volume">112</biblScope>
<biblScope unit="issue">C</biblScope>					

					<author>Henri Casanova</author><author>Rafael Ferreira da Silva</author><author>Ryan Tanaka</author><author>Suraj Pandey</author><author>Gautam Jethwani</author><author>William Koch</author><author>Spencer Albrecht</author><author>James Oeth</author><author>Frédéric Suter</author>
				</bibl>
			</sourceDesc>
		</fileDesc>
		<profileDesc>
			<abstract><ab><![CDATA[Scientific workflows are used routinely in numerous scientific domains, and Workflow Management Systems (WMSs) have been developed to orchestrate and optimize workflow executions on distributed platforms. WMSs are complex software systems that interact with complex software infrastructures. Most WMS research and development activities rely on empirical experiments conducted with full-fledged software stacks on actual hardware platforms. These experiments, however, are limited to hardware and software infrastructures at hand and can be labor-and/or time-intensive. As a result, relying solely on real-world experiments impedes WMS research and development. An alternative is to conduct experiments in simulation. In this work we present WRENCH, a WMS simulation framework, whose objectives are (i) accurate and scalable simulations; and (ii) easy simulation software development. WRENCH achieves its first objective by building on the SimGrid framework. While SimGrid is recognized for the accuracy and scalability of its simulation models, it only provides low-level simulation abstractions and thus large software development efforts are required when implementing simulators of complex systems. WRENCH thus achieves its second objective by providing high-level and directly re-usable simulation abstractions on top of SimGrid. After describing and giving rationales for WRENCH's software architecture and APIs, we present two case studies in which we apply WRENCH to simulate the Pegasus production WMS and the WorkQueue application execution framework. We report on ease of implementation, simulation accuracy, and simulation scalability so as to determine to which extent WRENCH achieves its objectives. We also draw both qualitative and quantitative comparisons with a previously proposed workflow simulator.]]></ab></abstract>
		</profileDesc>
	</teiHeader>
	<text><body xmlns="http://www.tei-c.org/ns/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink">
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.">Introduction</head><p>Scientific workflows have become mainstream in support of research and development activities in numerous scientific domains <ref type="bibr">[1]</ref>. Consequently, several Workflow Management Systems (WMSs) have been developed <ref type="bibr">[2,</ref><ref type="bibr">3,</ref><ref type="bibr">4,</ref><ref type="bibr">5,</ref><ref type="bibr">6,</ref><ref type="bibr">7]</ref> that allow scientists to execute workflows on distributed platforms that can accommodate executions at various scales. WMSs handle the logistics of workflow executions and make decisions regarding resource selection, data management, and computation scheduling, the goal being to optimize some performance metric (e.g., latency <ref type="bibr">[8,</ref><ref type="bibr">9]</ref>, throughput <ref type="bibr">[10,</ref><ref type="bibr">11]</ref>, jitter <ref type="bibr">[12]</ref>, reliability <ref type="bibr">[13,</ref><ref type="bibr">14,</ref><ref type="bibr">15]</ref>, power consumption <ref type="bibr">[16,</ref><ref type="bibr">17]</ref>). WMSs are complex software systems that interact with complex software infrastructures and can thus employ a wide range of designs and algorithms.</p><p>In spite of active WMS development and use in production, which has entailed solving engineering challenges, fundamental questions remain unanswered in terms of system designs and algorithms. Although there are theoretical underpinnings for most of these questions, theoretical results often make assumptions that do not hold with production hardware and software infrastructures. Further, the specifics of the design of a WMS can impose particular constraints on what solutions can be implemented effectively, and these constraints are typically not considered in available theoretical results. Consequently, current research that aims at improving and evolving the state of the art, although sometimes informed by theory, is mostly done via "real-world" experiments: designs and algorithms are implemented, evaluated, and selected based on experiments conducted for a particular WMS implementation with particular workflow configurations on particular platforms. As a corollary, from the WMS user's perspective, quantifying accurately how a WMS would perform for a particular workflow configuration on a particular platform entails actually executing that workflow on that platform.</p><p>Unfortunately, real-world experiments have limited scope, which impedes WMS research and development. This is because they are confined to application and platform configurations available at hand, and thus cover only a small subset of the relevant scenarios that may be encountered in practice. Furthermore, exclusively relying on real-world experiments makes it difficult or even impossible to investigate hypothetical scenarios (e.g., "What if the network had a different topology?", "What if there were 10 times more compute nodes but they had half as many cores?"). Real-world experiments, especially when largescale, are often not fully reproducible due to shared networks and compute resources, and due to transient or idiosyncratic behaviors (maintenance schedules, software upgrades, and particular software (mis)configurations). Running real-world experiments is also time-consuming, thus possibly making it difficult to obtain statistically significant numbers of experimental results. Real-world experiments are driven by WMS implementations that often impose constraints on workflow executions. Furthermore, WMSs are typically not monolithic but instead reuse CyberInfrastructure (CI) components that impose their own overheads and constraints on workflow execution. Exploring what lies beyond these constraints via real-world executions, e.g., for research and development purposes, typically entails unacceptable software (re-)engineering costs. Finally, running real-world experiments can also be labor-intensive. This is due to the need to install and execute many full-featured software stacks, including actual scientific workflow implementations, which is often not deemed worthwhile for "just testing out" ideas.</p><p>An alternative to conducting WMS research via real-world experiments is to use simulation, i.e., implement a software artifact that models the functional and performance behaviors of software and hardware stacks of interest. Simulation is used in many computer science domains and can address the limitations of real-world experiments outlined above. Several simulation frameworks have been developed that target the parallel and distributed computing domain <ref type="bibr">[18,</ref><ref type="bibr">19,</ref><ref type="bibr">20,</ref><ref type="bibr">21,</ref><ref type="bibr">22,</ref><ref type="bibr">23,</ref><ref type="bibr">24,</ref><ref type="bibr">25,</ref><ref type="bibr">26,</ref><ref type="bibr">27,</ref><ref type="bibr">28,</ref><ref type="bibr">29,</ref><ref type="bibr">30,</ref><ref type="bibr">31,</ref><ref type="bibr">32,</ref><ref type="bibr">33,</ref><ref type="bibr">34]</ref>. Some simulation frameworks have also been developed specifically for the scientific workflow domain <ref type="bibr">[35,</ref><ref type="bibr">36,</ref><ref type="bibr">37,</ref><ref type="bibr">11,</ref><ref type="bibr">38,</ref><ref type="bibr">39,</ref><ref type="bibr">40]</ref>.</p><p>We claim that advances in simulation capabilities in the field have made it possible to simulate WMSs that execute large workflows using diverse CI services deployed on large-scale platforms in a way that is accurate (via validated simulation models), scalable (fast execution and low memory footprint), and expressive (ability to describe arbitrary platforms, complex WMSs, and complex software infrastructure). In this work, we build on the existing open-source SimGrid simulation framework <ref type="bibr">[33,</ref><ref type="bibr">41]</ref>, which has been one of the drivers of the above advances and whose simulation models have been extensively validated <ref type="bibr">[42,</ref><ref type="bibr">43,</ref><ref type="bibr">44,</ref><ref type="bibr">45,</ref><ref type="bibr">46]</ref>, to develop a WMS simulation framework called WRENCH <ref type="bibr">[47]</ref>. More specifically, this work makes the following contributions 1 :</p><p>1 A preliminary shorter version of this paper appears in the proceedings 1. We justify the need for WRENCH and explain how it improves on the state of the art.</p><p>2. We describe the high-level simulation abstractions provided by WRENCH that (i) make it straightforward to implement full-fledged simulated versions of complex WMS systems; and (ii) make it possible to instantiate simulation scenarios with only few lines of code.</p><p>3. Via two case studies with the Pegasus <ref type="bibr">[2]</ref> production WMS and the WorkQueue <ref type="bibr">[49]</ref> application execution framework, we evaluate the ease-of-use, accuracy, and scalability of WRENCH, and compare it with a previously proposed simulator, WorkflowSim <ref type="bibr">[35]</ref>.</p><p>This paper is organized as follows. Section 2 discusses related work. Section 3 outlines the design of WRENCH and describes how its APIs are used to implement simulators. Section 4 presents our case studies. Finally, Section 5 concludes with a brief summary of results and a discussion of future research directions.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">Related Work</head><p>Many simulation frameworks have been developed for parallel and distributed computing research and development. They span domains such as HPC <ref type="bibr">[18,</ref><ref type="bibr">19,</ref><ref type="bibr">20,</ref><ref type="bibr">21]</ref>, Grid <ref type="bibr">[22,</ref><ref type="bibr">23,</ref><ref type="bibr">24]</ref>, Cloud <ref type="bibr">[25,</ref><ref type="bibr">26,</ref><ref type="bibr">27]</ref>, Peer-to-peer <ref type="bibr">[28,</ref><ref type="bibr">29]</ref>, or Volunteer Computing <ref type="bibr">[30,</ref><ref type="bibr">31,</ref><ref type="bibr">32]</ref>. Some frameworks have striven to be applicable across some or all or the above domains <ref type="bibr">[33,</ref><ref type="bibr">34]</ref>. Two conflicting concerns are accuracy (the ability to capture the behavior of a real-world system with as little bias as possible) and scalability (the ability to simulate large systems with as few CPU cycles and bytes of RAM as possible). The aforementioned simulation frameworks achieve different compromises between these two concerns by using various simulation models. At one extreme are discrete event models that simulate the "microscopic" behavior of hardware/software systems (e.g., by relying on packet-level network simulation for communication <ref type="bibr">[50]</ref>, on cycle-accurate CPU simulation <ref type="bibr">[51]</ref> or emulation for computation). In this case, the scalability challenge can be handled by using Parallel Discrete Event Simulation <ref type="bibr">[52]</ref>, i.e., the simulation itself is a parallel application that requires a parallel platform whose scale is at least commensurate to that of the simulated platform. At the other extreme are analytical models that capture "macroscopic" behaviors (e.g., transfer times as data sizes divided by bottleneck bandwidths, compute times as numbers of operations divided by compute speeds). While these models are typically more scalable, they must be developed with care so that they are accurate. In previous work, it has been shown that several available simulation frameworks use macroscopic models that can exhibit high inaccuracy <ref type="bibr">[43]</ref>.</p><p>A number of simulators have been developed that target scientific workflows. Some of them are stand-alone simulators <ref type="bibr">[35,</ref><ref type="bibr">36,</ref><ref type="bibr">37,</ref><ref type="bibr">11,</ref><ref type="bibr">53]</ref>. Others are integrated with a particular WMS to promote more faithful simulation and code reuse <ref type="bibr">[38,</ref><ref type="bibr">39,</ref><ref type="bibr">54]</ref> or to execute simulations at runtime to guide on-line scheduling decisions made by the WMS <ref type="bibr">[40]</ref>.</p><p>The authors in <ref type="bibr">[39]</ref> conduct a critical analysis of the stateof-the-art of workflow simulators. They observe that many of these simulators do not capture the details of underlying infrastructures and/or use naive simulation models. This is the case with custom simulators such as that in <ref type="bibr">[40,</ref><ref type="bibr">36,</ref><ref type="bibr">37]</ref>. But it is also the case with workflow simulators built on top of generic simulation frameworks that provide convenient user-level abstractions but fail to model the details of the underlying infrastructure, e.g., the simulators in <ref type="bibr">[35,</ref><ref type="bibr">38,</ref><ref type="bibr">11]</ref>, which build on the CloudSim <ref type="bibr">[25]</ref> or GroudSim <ref type="bibr">[24]</ref> frameworks. These frameworks have been shown to lack in their network modeling capabilities <ref type="bibr">[43]</ref>. As a result, some authors readily recognize that their simulators are likely only valid when network effects play a small role in workflow executions (i.e., when workflows are not data-intensive).</p><p>To overcome the above limitations, in <ref type="bibr">[39,</ref><ref type="bibr">54]</ref> the authors have improved the network model in GroudSim and also use a separate simulator, DISSECT-CF <ref type="bibr">[27]</ref>, for simulating cloud infrastructures accurately. The authors acknowledge that the popular SimGrid <ref type="bibr">[33,</ref><ref type="bibr">41]</ref> simulation framework offers compelling capabilities, both in terms of scalability and simulation accuracy. But one of their reasons for not considering SimGrid is that, because it is low-level, using it to implement a simulator of a complex system, such as a WMS and the CI services it uses, would be too labor-intensive. In this work, we address this issue by developing a simulation framework that provides convenient, reusable, high-level abstractions but that builds on Sim-Grid so as to benefit from its scalable and accurate simulation models. Furthermore, unlike <ref type="bibr">[38,</ref><ref type="bibr">39,</ref><ref type="bibr">54]</ref>, we do not focus on integration with any specific WMS. The argument in <ref type="bibr">[39]</ref> is that stand-alone simulators, such as that in <ref type="bibr">[35]</ref>, are disconnected from real-world WMSs because they abstract away much of the complexity of these systems. Instead, our proposed framework does capture low-level system details (and simulates them well thanks to SimGrid), but provides high-level enough abstractions to implement faithful simulations of complex WMSs with minimum effort, which we demonstrate via two case studies.</p><p>Also related to this work is previous research that has not focused on providing simulators or simulation frameworks per se, but instead on WMS simulation methodology. In particular, several authors have investigated methods for injecting realistic stochastic noise in simulated WMS executions <ref type="bibr">[35,</ref><ref type="bibr">55]</ref>. These techniques can be adopted by most of the aforementioned frameworks, including the one proposed in this work.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">WRENCH</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1.">Objective and Intended Users</head><p>WRENCH's objective is to make it possible to study WMSs in simulation in a way that is accurate (faithful modeling of real-world executions), scalable (low computation and memory footprints on a single computer), and expressive (ability to simulate arbitrary WMS, workflow, and platform scenarios with minimal software engineering effort). WRENCH is not a simulator but a simulation framework that is distributed as a C++ library. It provides high-level reusable abstractions for developing simulated WMS implementations and simulators for the execution of these implementations. There are two categories of WRENCH users:</p><p>1. Users who implement simulated WMSs -These users are engaged in WMS research and development activities and need an "in simulation" version of their current or intended WMS. Their goals typically include evaluating how their WMS behaves over hypothetical experimental scenarios and comparing competing algorithm and system design options. For these users, WRENCH provides the WRENCH Developer API (described in Section 3.4) that eases WMS development by removing the typical difficulties involved when developing, either in real-world or in simulation mode, a system comprised of distributed components that interact both synchronously and asynchronously. To this end, WRENCH makes it possible to implement a WMS as a single thread of control that interacts with simulated CI services via high-level APIs and must react to a small set of asynchronous events. 2. Users who execute simulated WMSs -These users simulate how given WMSs behave for particular workflows on particular platforms. Their goals include comparing different WMSs, determining how a given WMS would behave for various workflow configurations, comparing different platform and resource provisioning options, determining performance bottlenecks, engaging in pedagogic activities centered on distributed computing and workflow issues, etc. These users can develop simulators via the WRENCH User API (described in Section 3.5), which makes it possible to build a full-fledged simulator with only a few lines of code. Users in the first category above often also belong to the second category. That is, after implementing a simulated WMS these users typically instantiate simulators for several experimental scenarios to evaluate their WMS.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2.">Software Architecture Overview</head><p>Figure <ref type="figure">1</ref> depicts WRENCH's software architecture. At the bottom layer is the Simulation Core, which simulates lowlevel software and hardware stacks using the simulation abstractions and models provided by SimGrid (see Section 3.3). The next layer implements simulated CI services that are commonly found in current distributed platforms and used by production WMSs. At the time of this writing, WRENCH provides services in 4 categories: compute services that provide access to compute resources to execute workflow tasks; storage services that provide access to storage resources for storing workflow data; network monitoring services that can be queried to determine network distances; and data registry services that can be used to track the location of (replicas of) workflow data. Each category includes multiple service implemen- tations, so as to capture specifics of currently available CI services used in production. For instance, WRENCH includes a "batch-scheduled cluster" compute service, a "cloud" compute service, and a "bare-metal" compute service. The above layer in the software architecture consists of simulated WMS, that interact with CI services using the WRENCH Developer API (see Section 3.4). These WMS implementations, which can simulate production WMSs or WMS research prototypes, are not included as part of the WRENCH distribution, but implemented as stand-alone projects. Two such projects are the simulated Pegasus and Workqueue implementations used for our case study in Section 4. Finally, the top layer consists of simulators that configure and instantiate particular CI services and particular WMSs on a given simulated hardware platform, that launch the simulation, and that analyze the simulation outcome. These simulators use the WRENCH User API (see Section 3.5).</p><p>Here again, these simulators are not part of WRENCH, but implemented as stand-alone projects.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.3.">Simulation Core</head><p>WRENCH's simulation core is implemented using Sim-Grid's S4U API, which provides all necessary abstractions and models to simulate computation, I/O, and communication activities on arbitrary hardware platform configurations. These platform configurations are defined by XML files that specify network topologies and endpoints, compute resources, and storage resources <ref type="bibr">[56]</ref>.</p><p>At its most fundamental level, SimGrid provides a Concurrent Sequential Processes (CSP) model: a simulation consists of sequential threads of control that consume hardware resources. These threads of control can implement arbitrary code, exchange messages via a simulated network, can perform computation on simulated (multicore) hosts, and can perform I/O on simulated storage devices. In addition, SimGrid provides a virtual machine abstraction that includes a migration feature. Therefore, SimGrid provides all the base abstractions necessary to implement the classes of distributed systems that are relevant to scientific workflow executions. However, these abstractions are low-level and a common criticism of SimGrid is that implementing a simulation of a complex system requires a large software engineering effort. A WMS executing a workflow using several CI services is a complex system, and WRENCH builds on top of SimGrid to provide high-level abstractions so that implementing this complex system is not labor-intensive.</p><p>We have selected SimGrid for WRENCH for the following reasons. SimGrid has been used successfully in many distributed computing domains (cluster, peer-to-peer, grid, cloud, volunteer computing, etc.), and thus can be used to simulate WMSs that execute over a wide range of platforms. SimGrid is open source and freely available, has been stable for many years, is actively developed, has a sizable user community, and has provided simulation results for over 350 research publications since its inception. SimGrid has also been the object of many invalidation and validation studies <ref type="bibr">[42,</ref><ref type="bibr">43,</ref><ref type="bibr">44,</ref><ref type="bibr">45,</ref><ref type="bibr">46]</ref>, and its simulation models have been shown to provide compelling advantages over other simulation frameworks in terms of both accuracy and scalability <ref type="bibr">[33]</ref>. Finally, most SimGrid simulations can be executed in minutes on a standard laptop computer, making it possible to perform large numbers of simulations quickly with minimal compute resource expenses. To the best of our knowledge, among comparable available simulation frameworks (as reviewed in Section 2), SimGrid is the only one to offer all the above desirable characteristics.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.4.">WRENCH Developer API</head><p>With the Developer API, a WMS is implemented as a single thread of control that executes according to the pseudo-code blueprint shown in Algorithm 1. Given a workflow to execute, a WMS first gathers information about all the CI services it can use to execute the workflow (lines 2-3). Examples of such information include the number of compute nodes provided by a compute service, the number of cores per node and the speed of these cores, the amount of storage space available in a storage service, the list of hosts monitored by a network monitoring service, etc. Then, the WMS iterates until the workflow execution is complete or has failed (line 4). At each iteration it gathers dynamic information about available services and resources if needed (line 5). Example of such information include currently available capacities at compute or storage services, current network distances between pairs of hosts, etc. Based on resource information and on the current state of the workflow, the WMS can then make whatever scheduling decisions it sees fit (line 7). It then enacts these decisions by interacting with appropriate services. For instance, it could decide to submit a "job" to a compute service to execute a ready task on some number of cores at some compute service and copy all produced files to some storage service, or it could decide to just copy a file between storage services and then update a data location service to keep track of the location of this new file replica. It could also submit one or more pilot jobs <ref type="bibr">[57]</ref> to compute services if they support them. It is the responsibility of the developer to implement all decision-making algorithms employed by the WMS. At the end of the iteration, the WMS simply waits for a workflow execution event to which it can react if need be. Most common events are job completions/failures and data transfer completions/failures.</p><p>The WRENCH Developer API provides a rich set of methods to create and analyze a workflow and to interact with CI services to execute a workflow. These methods were designed based on current and envisioned capabilities of current stateof-the-art WMSs. We refer the reader to the WRENCH Web site <ref type="bibr">[47]</ref> for more information on how to use this API and for the full API documentation. The key objective of this API is to make it straightforward to implement a complex system, namely a full-fledged WMS that interact with diverse CI services. We achieve this objective by providing simple solutions and abstractions to handle well-known challenges when implementing a complex distributed system (whether in the real world or in simulation), as explained hereafter.</p><p>SimGrid provides simple point-to-point communication between threads of control via a mailbox abstraction. One of the recognized strengths of SimGrid is that it employs highly accurate and yet scalable network simulation models. However, unlike some of its competitors, it does not provide any higherlevel simulation abstractions meaning that distributed systems must be implemented essentially from scratch, with messagebased interactions between processes. All message-based interaction is abstracted away by WRENCH, and although the simulated CI services exchange many messages with the WMS and among themselves, the WRENCH Developer API only exposes higher-level interaction with services ("run this job", "move this data") and only requires that the WMS handle a few events. The WMS developer thus completely avoids the need to send and receive (and thus orchestrate) network messages.</p><p>Another challenge when developing a system like a WMS is the need to handle asynchronous interactions. While some service interactions can be synchronous (e.g., "are you up?", "tell me your current load"), most need to be asynchronous so that the WMS retains control. The typical solution is to maintain sets of request handles and/or to use multiple threads of con-trol. To free the WMS developer from these responsibilities, WRENCH provides already implemented "managers" that can be used out-of-the-box to take care of asynchronicity. A WMS can instantiate such managers, which are independent threads of control. Each manager transparently interacts with CI services, maintains a set of pending requests, provides a simple API to check on the status of these requests, and automatically generates high-level workflow execution events. For instance, a WMS can instantiate a "job manager" through which it will create and submit jobs to compute services. It can at any time check on the status of a job, and the job manager interacts directly (and asynchronously) with compute services so as to generate "job done" or "job failed" events to which the WMS can react. In our experience developing simulators from scratch using SimGrid, the implementation of asynchronous interactions with simulated processes is a non-trivial development effort, both in terms of amount of code to write and difficulty to write this code correctly. We posit that this is one of the reasons why some users have preferred using simulation frameworks that provide higher-level abstractions than SimGrid even though they offer less attractive accuracy and/or scalability features. WRENCH provides such higher-level abstractions to the WMS developers, and as a result implementing a WMS with WRENCH can be straightforward.</p><p>Finally, one of the challenges when developing a WMS is failure handling. It is expected that compute, storage, and network resources, as well as the CI services that use them, can fail through the execution of the WMS. SimGrid has the capability to simulate arbitrary failures via availability traces. Furthermore, failures can occur due to the WMS implementation itself, e.g., if it fails to check that the operations it attempts are actually valid, if concurrent operations initiated by the WMS work at cross purposes. WRENCH abstracts away all these failures as C++ exceptions that can be caught by the WMS implementation, or caught by a manager and passed to the WMS as workflow execution events. Regardless, each failure exposes a failure cause, which encodes a detailed description of the failure. For instance, after initiating a file copy from a storage service to another storage service, a "file copy failed" event sent to the WMS would include a failure cause that could specify that when trying to copy file x from storage service y to storage service z, storage service z did not have sufficient storage space. Other example failure causes could be that a network error occurred when storage service y attempted to receive a message from storage service z, or that service z was down. All CI services implemented in WRENCH simulate well-defined failure behaviors, and failure handling capabilities afforded to simulated WMSs can actually allow more sophisticated failure tolerance strategies than currently done or possible in real-world implementations. But more importantly, the amount of code that needs to be written for failure handling in a simulated WMS is minimal.</p><p>Given the above, WRENCH makes it possible to implement a simulated WMS with very little code and effort. The example WMS implementation provided with the WRENCH distribution, which is simple but functional, is under 200 lines of C++ (once comments have been removed). See more discussion of the effort needed to implement a WMS with WRENCH in the context of our case studies (Section 4).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.5.">WRENCH User API</head><p>With the User API one can quickly build a simulator, which typically follows these steps: The above steps can be implemented with only a few lines of C++. An example is provided and described in Appendix A. This example showcases only the most fundamental features of the WRENCH User API, and we refer the reader to the WRENCH Web site <ref type="bibr">[47]</ref> for more detailed information on how to use this API and for the full API documentation. In the future this API will come with Python binding so that users can implement simulators in Python.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.6.">Simulation Debugging and Visualization</head><p>Analyzing and interpreting simulation logs is often a laborintensive process, and users of simulators typically develop sets of scripts for parsing and extracting specific knowledge from the logs. In order to provide WRENCH users with a rapid, first insight on their simulation results, we have been developing a Web-based "dashboard" that compiles simulation logs into a set of tabular and graphical JavaScript components. The dashboard presents overall views on task life-cycles, showing breakdowns between compute and I/O operations, as well as a Gantt chart and 2-and 3-dimensional plots of task executions and resource usage during the simulated workflow execution. An overview of energy consumption per compute resource can also be visualized in the dashboard. The dashboard is currently under development and will be available for users in the next WRENCH release. Figure <ref type="figure">2</ref> shows a screenshot of a simple simulated workflow execution.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Case Study: Simulating production WMSs</head><p>In this section, we present two WRENCH-based simulators of a state-of-the-art WMS, Pegasus <ref type="bibr">[2]</ref>, and an application execution framework, WorkQueue <ref type="bibr">[49]</ref>, as case studies for evaluation and validation purposes.</p><p>Pegasus is being used in production to execute workflows for dozens of high-profile applications in a wide range of scientific domains <ref type="bibr">[2]</ref>. Pegasus provides the necessary abstractions for scientists to create workflows and allows for transparent execution of these workflows on a range of compute platforms including clusters, clouds, and national cyberinfrastructures. During execution, Pegasus translates an abstract resource-independent workflow into an executable workflow, determining the specific executables, data, and computational resources required for the execution. Workflow execution with Pegasus includes data management, monitoring, and failure handling, and is managed by HTCondor DAGMan <ref type="bibr">[58]</ref>. Individual workflow tasks are managed by a workload management framework, HTCondor <ref type="bibr">[59]</ref>, which supervises task executions on local and remote resources. Workflow executions with Pegasus follow a "push model," i.e., a task is bound to a particular compute resource at the onset of the execution and is always executed on that resource if possible.</p><p>WorkQueue is being used in production by a wide range of researchers across many scientific domains for building large- scale master-worker applications that span thousands of machines drawn from clusters, clouds, and grids <ref type="bibr">[60]</ref>. WorkQueue allows users to define tasks, submit them to a workqueue abstraction, and wait for their completions. During execution, WorkQueue starts standard worker processes that can run on any available compute resource. These worker processes perform data transfers and execute tasks, making it possible to execute workflows. Worker processes can also be submitted for execution on HTCondor pools, which is the approach evaluated in this paper. Workflow executions with WorkQueue follow a "pull model," i.e., late-binding of tasks to compute resources based on when resources becomes idle.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.1.">Implementing Pegasus with WRENCH</head><p>Since Pegasus relies on HTCondor, first we have implemented the HTCondor services as simulated core CI services, which together form a new Compute Service that exposes the WRENCH Developer API. This makes HTCondor available to any WMS implementation that is to be simulated using WRENCH, and has been included as part of the growing set of simulated core CI services provided by WRENCH.</p><p>HTCondor is composed of six main service daemons (startd, starter, schedd, shadow, negotiator, and collector). In addition, each host on which one or more of these daemons is spawned must also run a master daemon, which controls the execution of all other daemons (including initialization and completion). The bottom part of Figure <ref type="figure">3</ref> depicts the components of our simulated HTCondor implementation, where daemons are shown in red-bordered boxes. In our simulator we implement the 3 fundamental HTCondor services, implemented as particular sets of daemons, as depicted in the bottom part of Figure <ref type="figure">3</ref> in borderless white boxes. The Job Execution Service consists of a startd daemon, which adds the host on which it is running to the HTCondor pool, and of a starter daemon, which manages task executions on this host. The Central Manager Service consists of a collector daemon, which collects information about all other daemons, and of a negotiator daemon, which performs task/resource matchmaking. The Job Submission Service consists of a schedd daemon, which maintains a queue of tasks, and of several instances of a shadow daemon, each of which corresponds to a task submitted to the HTCondor pool for execution.</p><p>Given the simulated HTCondor implementation above, we then implemented the simulated Pegasus WMS, including the DAGMan workflow engine, using the WRENCH Developer API. This implementation instantiates all services and parses the workflow description file, the platform description file, and a Pegasus-specific configuration file. DAGMan orchestrates the workflow execution (e.g., a task is marked as ready for execution once all its parent tasks have successfully completed), and monitors the status of tasks submitted to the HTCondor pool using a pull model, i.e., task status is fetched from the pool at regular time intervals. The top part of Figure <ref type="figure">3</ref> depicts the components of our simulated Pegasus implementation (each shown in a red box).</p><p>By leveraging WRENCH's high-level simulation abstractions, implementing HTCondor as a reusable core WRENCH service using the Developer API required only 613 lines of code. Similarly, implementing a simulated version of Pegasus, including DAGMan, was done with only 666 lines of code (127 of which are merely parsing simulation configuration files). These numbers include both header and source files, but exclude comments. We argue that the above corresponds to minor simulation software development efforts when considering the complexity of the system being simulated.</p><p>Service implementations in WRENCH are all parameterizable. For instance, as services use message-based communications it is possible to specify all message payloads in bytes (e.g., for control messages). Other parameters encompass various overheads, either in seconds or in computation volumes (e.g., task startup overhead on a compute service). In WRENCH, service implementations come with default values for all these parameters, but it is possible to pick custom values upon service instantiation. The process of picking parameter values so as to match a specific real-world system is referred to as simulation calibration. We calibrated our simulator by measuring delays observed in event traces of real-world executions for workflows on hardware/software infrastructures (see Section 4.3).</p><p>The simulator code, details on the simulation calibration procedure, and experimental scenarios used in the rest of this section are all publicly available online <ref type="bibr">[61]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.2.">Implementing WorkQueue with WRENCH</head><p>WorkQueue implements a master-worker paradigm by which running worker processes can be assigned work dynamically. In our simulator, we implement workers as pilot jobs, a popular mechanism for late-binding of computation to resources <ref type="bibr">[57]</ref>, which is implemented in WRENCH. As WorkQueue does not provide automated mechanisms for starting workers, i.e., triggering pilot job submissions, at runtime, our simulated implementation limits the number of concurrently running pilot jobs based on available compute resources (i.e., cores are not oversubscribed). The simulator implementation has two main components: (1) a workflow system for orchestrating tasks execution and assigning compute tasks to workers; and (2) a scheduler for submitting pilot jobs to compute services. As WRENCH provides a consistent interface across all compute services, our simulator can simulate the execution of WorkQueue on any compute service provided they are configured to support pilot job execution.</p><p>Due to WRENCH's providing high-level simulation abstractions, implementing WorkQueue using the WRENCH Developer API requires only 485 lines of code (113 of which are merely parsing simulation configuration files). These numbers include both header and source files, but exclude comments. Similarly to the WRENCH-based Pegasus simulator, we argue that the simulation software development effort is minimal when considering the complexity of the system being simulated. The simulator code, details on the simulation calibration procedure, and experimental scenarios used in the rest of this section are all publicly available online <ref type="bibr">[62]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.3.">Experimental Scenarios</head><p>We consider experimental scenarios defined by particular workflow instances to be executed on particular platforms. Due to the lack of publicly available detailed workflow execution traces (i.e., execution logs that include data sizes for all files, all execution delays, etc.), we have performed real workflow executions with Pegasus and WorkQueue, and collected raw, time-stamped event traces from these executions. These traces form the ground truth to which we can compare simulated executions. We consider these workflow applications:</p><p>&#8226; 1000Genome <ref type="bibr">[63]</ref>: A data-intensive workflow that identifies mutational overlaps using data from the 1000 genomes project in order to provide a null distribution for rigorous statistical evaluation of potential disease-related mutations. We consider a 1000Genome instance that comprises 71 tasks.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>&#8226; Montage [2]: A compute-intensive astronomy workflow</head><p>for generating custom mosaics of the sky. For this experiment, we ran Montage for processing 1.5 and 2.0 square degrees mosaic 2MASS. We thus refer to each configuration as Montage-1.5 and Montage-2.0, respectively. Montage-1.5, resp. Montage-2.0, comprises 573, resp. 1,240, tasks.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>&#8226; SAND [64]: A compute-intensive bioinformatics workflow</head><p>for accelerating genome assembly. For this experiment, we ran SAND for a full set of reads from the Anopheles gambiae Mopti form. We consider a SAND instance that comprises 606 tasks. We use these platforms, deploying on each a submit node (which runs Pegasus and DAGMan or WorkQueue, and HT-Condor's job submission and central manager services), four worker nodes (4 or 24 cores per node / shared file system), and a data node in the WAN:</p><p>&#8226; ExoGENI: A widely distributed networked infrastructureas-a-service testbed representative of a "bare metal" platform. Each worker node is a 4-core 2.0GHz processor with 12GiB of RAM. The bandwidth between the data node and the submit node was &#8764;0.40 Gbps, and the bandwidth between the submit and worker nodes was &#8764;1.00 Gbps.</p><p>&#8226; AWS: Amazon's cloud platform, on which we use two types of virtual machine instances: t2.xlarge and m5.xlarge. The bandwidth between the data node and the submit node was &#8764;0.44 Gbps, and the bandwidth between the submit and worker nodes on these instances were &#8764;0.74 Gbps and &#8764;1.24 Gbps, respectively. &#8226; Chameleon: An academic cloud testbed, on which we use homogeneous standard cloud units to run an HTCondor pool. Each unit consists of a 24-core 2.3GHz processor with 128 GiB of RAM. The bandwidth between the submit node and worker nodes on these instances were &#8764;10.00 Gbps. To evaluate the accuracy of our simulators, we consider 4 particular experimental scenarios: 1000Genome on ExoGENI, Montage-1.5 on AWS-t2.xlarge, Montage-2.0 on AWS-m5.xlarge, and SAND on Chameleon. The first three scenarios are performed using Pegasus, and the last one is performed using WorkQueue. For each scenario we repeat the realworld workflow execution 5 times (since real-world executions are not perfectly deterministic), and also run a simulated execution execution using the WRENCH-based simulators described in the previous section. For each execution, real-world or simulated, we keep track of the overall application makespan, but also of time-stamped individual execution events such as task submission and completions dates.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.4.">Pegasus: Simulation Accuracy</head><p>The fourth column in Table <ref type="table">1</ref> shows average relative differences between actual and simulated makespans. We see that simulated makespans are close to actual makespans for all three Pegasus scenarios (average relative error is below 5%). One of the key advantages of building WRENCH on top of SimGrid is that WRENCH simulators benefit from the high-accuracy network models in SimGrid. In particular, these models capture many features of the TCP protocol (without resorting to packetlevel simulation). And indeed, when comparing real-world and simulated executions we observe average relative error below 3% for data movement operations. Furthermore, the many processes involved in a workflow execution interact by exchanging (typically small) control messages, and our simulators simulate these message exchanges. For instance, each time an output file is produced by a task a data registry service is contacted so that a new entry can be added to its database of file replicas, which incurs some communication overhead. When comparing real-world to simulated executions we observe average relative simulation error below 1% for these data registration overheads. Overall, a key reason for the high accuracy of our simulators is that they simulate data and control message transfers accurately.</p><p>To draw comparisons with a state-of-the-art simulator, we repeated the above Pegasus simulation experiments using Work-flowSim <ref type="bibr">[35]</ref>. WorkflowSim simulates workflow executions based on execution models similar to that of Pegasus and is built on top of the CloudSim simulation framework <ref type="bibr">[25]</ref>. However, WorkflowSim does not provide a detailed simulated HT-Condor implementation, and does not offer the same simulation calibration capabilities as WRENCH. Nevertheless, we have painstakingly calibrated the WorkflowSim simulator so that it models the hardware and software infrastructures of our experimental scenarios as closely as possible. For each of the 3 Pegasus experimental scenarios, we find that the relative average makespan percentage error is 12.09 &#177;2.84, 26.87 &#177;6.26, and 13.32 &#177;1.12, respectively, i.e., from 4x up to 11x larger than the error values obtained with our WRENCH-based simulator. The reasons for the discrepancies between WorkflowSim and real-world results are twofold. First, WorkflowSim uses the simplistic network models in CloudSim (see discussion in Section 2) and thus suffers from simulation bias w.r.t. communication times. Second, WorkflowSim does not capture all the relevant system details of the system and of the workflow execution. By contrast, our WRENCH-based simulator benefits from the accurate network simulation models provided by SimGrid, and it does capture low-level relevant details although implemented with only a few hundred lines of code.</p><p>In our experiments, we also record the submission and completion dates of each task, thus obtaining empirical cumulative density functions (ECDFs) of these times, for both realworld executions and simulated executions. To further validate the accuracy of our simulation results, we apply Kolmogorov-Smirnov goodness of fit tests (KS tests) with null hypotheses (H 0 ) that the real-world and simulation samples are drawn from the same distributions. The two-sample KS test results in a miss if the null hypothesis (two-sided alternative hypothesis) is rejected at 5% significance level (p-value &#8804; 0.05). Each test for which the null hypothesis is not rejected (p-value &gt; 0.05), indicates that the simulated execution statistically matches the realworld execution. Table <ref type="table">1</ref> shows p-value and KS test distance for both task submission times and task completion times. The null hypothesis is not rejected, and we thus conclude that simulated workflow task executions statistically match real-world executions well. These conclusions are confirmed by visually comparing ECDFs. For instance, Figure <ref type="figure">4</ref> shows real-world and simulated ECDFs for sample runs of Montage-2.0 on AWS-m5.xlarge, with task submission, resp. completion, date ECDFs on the left-hand, resp. right-hand, side. We observe that the simulated ECDFs ("wrench") track the real-world ECDFs ("pegasus") closely. We repeated these simulations using Work-flowSim, and found that the null hypothesis is rejected for all 3 simulation scenarios. This is confirmed visually in Figure <ref type="figure">4</ref>, where the ECDFs obtained from the WorkflowSim simulation ("workflowsim") are far from the real-world ECDFs.</p><p>Although KS tests and ECDFs visual inspections validate that the WRENCH-simulated ECDFs match the real-world ECDFs statistically, these results do not distinguish between individual tasks. In fact, there are some discrepancies between real-world and simulated schedules. For instance, Figure <ref type="figure">5</ref> shows Gantt charts corresponding to the workflow executions shown in Figure <ref type="figure">4</ref>, with the real-world execution on the lefthand side ("pegasus") and the simulated execution on the righthand side ("wrench"). Tasks executions are shown on the vertical axis, each shown as a line segment along the horizontal time axis, spanning the time between the task's start time and the task's finish time. Different task types, i.e., different executables, are shown with different colors. In this workflow, all tasks of the same type are independent and have the same priority. We see that the shapes of the yellow regions, for example, vary between the two executions. These variations are explained by implementation-dependent behaviors of the workflow scheduler. In many instances throughout workflow execution several ready tasks can be selected for execution, e.g., sets of independent tasks in the same level of the workflow. When the number of available compute resources, n, is smaller than the number of ready tasks, the scheduler picks n ready tasks for immediate execution. In most WMSs, these tasks are picked as whatever first n tasks are returned when iterating over data structures in which task objects are stored. Building a perfectly faithful simulation of a WMS would thus entail implementing/using the exact same data structures as that in the actual implementation. This could be labor intensive or perhaps not even possible depending on which data structures, languages, and/or libraries are used in that implementation. In the context of this Pegasus case study, the production implementation of the DAGMan scheduler uses a custom priority list implementation to store ready tasks, while our simulation version of it stores workflow tasks in a C++ std::map data structure indexed by task string IDs. Consequently, when the real-world scheduler picks the first n ready tasks it typically picks different tasks than those picked by its simulated implementation. This is the cause the discrepancies seen in Figure <ref type="figure">5</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.5.">WorkQueue: Simulation Accuracy</head><p>Similar to results obtained with our Pegasus simulator, we observe small (below 4%) average relative differences between actual and simulated makespans using WorkQueue for executing the SAND workflow on the Chameleon cloud platform (4th experimental scenario in Table <ref type="table">1</ref>). The two-sample KS tests for both task submissions and completions indicate that simulated workflow task executions statistically match real-world executions with the WorkQueue application execution framework. Figure <ref type="figure">6</ref> shows real-world ("workqueue") and simulated ("wrench") ECDFs of task submission, resp. completion, dates on the left-hand, resp. right-hand, side. The real-world and simulated task completion ECDFs closely match. However, for task submission dates, although the real-world and simulated ECDFs show very similar trends, the former exhibits a step function pattern while the latter does not. After investigating this inconsistency, we found that in the real-world experiments execution events are recorded in logs as jobs are generated, but not when they are actually submitted to the HTCondor pool. As a result, our ground truth is biased for task submission dates as many tasks appear to be submitted at once. An additional (small) source of discrepancy is that in the real-world execution monitoring data from the HTCondor pool is pulled at regular intervals (about 5s), while in our simulated execution there is no such delay (this delay could be added by modifying our simulator's implementation). We hypothesize that the simulated execution may actually be closer to the real-world execution than what is reported in the real-world execution logs (verifying this hypothesis would require re-engineering the actual WorkQueue implementation to improve its logging feature). More generally, the above highlights the difficulties involved in defining what constitutes a sensible ground truth and obtaining this ground truth via real-world executions.</p><p>Figure <ref type="figure">7</ref> shows Gantt charts corresponding to the SAND executions shown in Figure <ref type="figure">6</ref>. In the real-world execution, we observe the same step function pattern seen in Figure <ref type="figure">6</ref>, for the same reasons. But we also note other discrepancies between real-world and simulated executions. For instance, at the end of the real-world execution, there is a gap in the Gantt chart. This gap corresponds to tasks with sub-second durations, which are not visible due to the chart's resolution. In the real-world executions, all these tasks are submitted in sequence, hence the gap. By contrast, in the simulated execution these tasks are not submitted in sequence. The reason is exactly the same phenomenon as that observed for Pegasus in the previous section. During workflow execution there are often more ready tasks than available workers, and WorkQueue must pick some of these tasks for submissions. This is done by removing the desired number of tasks from some data structure, and, here again the real-world WorkQueue implementation and our simulation of it use different such data structures: the former uses a std::vector, while the latter uses a std::map.</p><p>Overall, the result in this and in the previous sections show that WRENCH makes it possible to accurately simulate the ex-ecution of scientific workflows on production platforms. This was demonstrated for two qualitatively different systems: the Pegasus WMS (which uses a push model to perform earlybinding of tasks to compute resources) and the WorkQueue application execution framework (which uses a pull model to perform late-binding of tasks to compute resources).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.6.">Simulation Scalability</head><p>In this section, we evaluate the speed and the memory footprint of WRENCH simulations. Results with WRENCH version 1.2 were presented in the preliminary version of this work <ref type="bibr">[48]</ref>, while results presented in this section are obtained with version 1.4. Between these two versions a number of performance improvements were made, which explains why the results presented here are superior. About 30% of the performance gain is due to using more appropriate data structures (e.g., whenever possible replacing C++ std::map and std::set data structures by std::unordered map and std::unordered set since the latter have O(1) average case operations). About 50% of the gain is due to the removal of a data structure to keep track of all in-flight (simulated) network messages, so as to avoid memory leaks when simulating host failures. This feature is now only activated whenever simulation of host failures is done. The remaining 20% is due to miscellaneous code improvements (e.g., avoiding pass-byvalue parameters, using helper data structures to trade off space for time).</p><p>Table <ref type="table">2</ref> shows average simulated makespans and simulation execution times for our 4 experimental scenarios. Simulations are executed on a single core of a MacBook Pro 3.5 GHz Intel Core i7 with 16GiB of RAM. For these scenarios, simulation times are more than 100x and up to 2500x shorter than real-world workflow executions. This is because SimGrid simulates computation and communication operations as delays computed based on computation and communication volumes using simulation models with low computational complexity.</p><p>To further evaluate the scalability of our simulator, we use a workflow generator <ref type="bibr">[65]</ref> to generate representative randomized configurations of the Montage workflow with from 1, 000 up to 10, 000 tasks. We generate 5 workflow instances for each number of tasks, and simulate the execution of these generated workflow instances on 128 cores (AWS-m5.xlarge with 32 4-core nodes) using our WRENCH-based Pegasus simulator. Figure <ref type="figure">8</ref> shows simulation time (left vertical axis) and maximum resident set size (right vertical axis) vs. the number of tasks in the workflow. Each sample point is the average over the 5 workflow instances (error bars are shown as well). As expected, both simulation time and memory footprint increase as workflows become larger. The memory footprint grows linearly with the number of tasks (simply due to the need to store more task objects). The simulation time grows faster initially, but then linearly beyond 7,000 tasks. We conclude that the simulation scales well, making it possible to simulate very large 10,000-task Montage configurations in under 13 minutes on a standard laptop computer.</p><p>Figure <ref type="figure">8</ref> also includes results obtained with WorkflowSim. We find that WorkflowSim has a larger memory footprint than  our WRENCH-based simulator (by a factor &#8764;1.41 for 10,000task workflows), and it is slower than our WRENCH-based simulator (by a factor &#8764;1.76 for 10,000-task workflows). In our previous work <ref type="bibr">[48]</ref>, WorkflowSim was faster than our WRENCH-based simulator (by a factor &#8764;1.81 for 10,000-task workflows), with roughly similar trends. The reason for this improvement is a set of memory management optimizations that were applied to the WRENCH implementation, and in particular for handling message objects exchanged between processes. These optimizations have significantly improved the scalability of WRENCH, and it is likely for several other optimizations are possible to push scalability further. These optimizations have also decreased the workflow simulation time significantly when compared to the earlier WRENCH release, e.g., by a factor &#8764;2.6 for 10,000-task workflows. Overall, our experimental results show that WRENCH not only yields accurate simulation results but also can scalably simulate the execution of large-scale complex scientific applications running on heterogeneous platforms.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.">Conclusion</head><p>In this paper, we have presented WRENCH, a simulation framework for building simulators of Workflow Management Systems. WRENCH implements high-level simulation abstractions on top of the SimGrid simulation framework, so as to make it possible to build simulators that are accurate, that can run scalably on a single computer, and that can be implemented with minimal software development effort. Via case studies for the Pegasus production WMS and WorkQueue application execution framework, we have demonstrated that WRENCH achieves these objectives, and that it favorably compares to a recently proposed workflow simulator. The main finding is that with WRENCH one can implement an accurate and scalable simulator of a complex real-world system with a few hundred lines of code. WRENCH is open source and welcomes contributors. WRENCH is already being used for several research and education projects, and Version 1.5 was released in February 2020. We refer the reader to <ref type="url">https://wrench-project.org</ref> for software, documentation, and links to related projects.</p><p>A short-term development direction is to use WRENCH to simulate the execution of current production WMSs and application execution frameworks (as was done for Pegasus and WorkQueue in Section 4). Although we have designed WRENCH with knowledge of many such systems in mind, we expect that WRENCH APIs and abstractions will evolve once we set out to realize these implementations. Another development direction is the implementation of more CI service abstractions in WRENCH, e.g., a Hadoop Compute Service, specific distributed cloud Storage Services. From a research perspective, a future direction is that of automated simulation calibration. As seen in our Pegasus and WorkQueue case studies, even when using validated simulation models, the values of a number of simulation parameters must be carefully chosen in order to obtain accurate simulation results. This issue is not confined to WRENCH, but is faced by all distributed system simulators. In our case studies, we have calibrated these parameters manually by analyzing and comparing simulated and real-world execution event traces. While, to the best of our knowledge, this is the typical practice, what is truly needed is an automated calibration method. Ideally, this method would process a (small) number of (not too large) real-world execution traces for "training scenarios", and compute a valid and robust set of calibration parameter values. An important research question will then be to understand to which extent these automatically computed calibrations can be composed and extrapolated to scenarios beyond the training scenarios.</p></div></body>
		</text>
</TEI>
