.. Copyright 2025
.. _intro_concepts:
Introduction
============
What is DTLMod
---------------
A **data transport layer** can is the central component in a **publish-subscribe system**, that connects applications
that produce data objects to those which consume them, moves these data objects, and keeps track of metadata.
The figure below shows a generic data transport layer and introduces the terminology by DTLMod.
.. image:: img/DTL-overview.png
:width: 80%
:align: center
.. raw:: html
On the publisher side, one or more applications (e.g., large-scale physics simulations) produce data, represented by
multiple **variables**, and publish them to the DTL within a **transaction** using a specific **stream**. On the
subscriber side, one or more applications (e.g., analysis and visualization components) subscribe to specific streams
to retrieve the data they need from the DTL. The DTL itself exposes multiple **engines** in charge of the actual data
transport from the publisher(s) to the subscriber(s). These engines either rely on **files** stored on a file system
or use **staging** techniques to move data in memory or over the network.
DTLMod builds on the low-level abstractions exposed by the `SimGrid toolkit `_. Typical
SimGrid-based simulators are composed of multiple **actors** (i.e., simulated processes) that launch
**activities** (i.e., computations, network communications, or I/O operations) defined by an amount of work to do (e.g.,
bytes to read, write, or transfer, compute operations to perform) on **resources** (i.e., CPUs, network links, or
disks). The simulation models at the core of SimGrid determine the respective completion date of these activities to
make the simulated time advance. DTLMod combines these low-level abstractions to expose higher-level concepts and ease
the writing of simulators of in situ processing.
What DTLMod allows you to do
----------------------------
Here follow some research objectives for which DTLMod is relevant:
- **Prototype** your in situ workflow, starting with high-level abstract versions of the different components to
define the workflow structure and its data flow. You can then replace some of the components by the actual MPI
code of your application or analyses, thanks to the integration with
`SMPI `_
- **Compare** the behavior and performance, at scale, of different data transport configurations and study the
effects of resource allocation strategies on performance.
- **Explore** "what-if" scenarios in which you can scale of alter the performance your computing and storage
infrastructure, inject delays or failures, or modify the structure of your in situ workflow.
Anatomy of a project that uses DTLMod
-------------------------------------
As any SimGrid-based simulator, a project that uses DTLMod will rely on the following components:
- A set of **processes** that simulate the logic of each component of an in situ workflow using either the S4U API of
SimGrid or as part of a full-fledged MPI parallel application, in combination with the API of DTLMod for everything
related to data transport.
- A **simulated computing and storage infrastructure** which consists in a description (in either XML or C++) of the
hardware (e.g., compute nodes, network links, disks) of this distributed system.
- A **deployment** of the defined processes. To simulate their execution on the simulated infrastructure, you have to
describe how they are deployed on individual computing resources.
The above components are put together to run a **simulation experiment** that produces **outcomes** (logs,
visualization, statistics) that help users answer their research and development **questions**. These outcomes
typically include a timeline of the application execution.
.. TODO add reference to examples and/or tests