<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article article-type="research-article" dtd-version="2.3" xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Robot. AI</journal-id>
<journal-title>Frontiers in Robotics and AI</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Robot. AI</abbrev-journal-title>
<issn pub-type="epub">2296-9144</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">762227</article-id>
<article-id pub-id-type="doi">10.3389/frobt.2021.762227</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Robotics and AI</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Configuring ADAS Platforms for Automotive Applications Using Metaheuristics</article-title>
<alt-title alt-title-type="left-running-head">McLean et&#x20;al.</alt-title>
<alt-title alt-title-type="right-running-head">Configuring ADAS Platforms</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>McLean</surname>
<given-names>Shane D.</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Juul Hansen</surname>
<given-names>Emil Alexander</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
</contrib>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Pop</surname>
<given-names>Paul</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1294555/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Craciunas</surname>
<given-names>Silviu S.</given-names>
</name>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1499824/overview"/>
</contrib>
</contrib-group>
<aff id="aff1">
<sup>1</sup>
<institution>Technical University of Denmark Kongens Lyngby</institution>, <addr-line>Kongens Lyngby</addr-line>, <country>Denmark</country>
</aff>
<aff id="aff2">
<sup>2</sup>
<institution>TTTech Computertechnik AG</institution>, <addr-line>Vienna</addr-line>, <country>Austria</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1191085/overview">Dakshina Dasari</ext-link>, Robert Bosch, Germany</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1464663/overview">Risat Pathan</ext-link>, University of Gothenburg, Sweden</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/609056/overview">Navid Razmjooy</ext-link>, Independent researcher, Belgium</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Paul Pop, <email>paupo@dtu.dk</email>
</corresp>
<fn fn-type="other">
<p>This article was submitted to Robotic Control Systems, a section of the journal Frontiers in Robotics and&#x20;AI</p>
</fn>
</author-notes>
<pub-date pub-type="epub">
<day>04</day>
<month>01</month>
<year>2022</year>
</pub-date>
<pub-date pub-type="collection">
<year>2021</year>
</pub-date>
<volume>8</volume>
<elocation-id>762227</elocation-id>
<history>
<date date-type="received">
<day>21</day>
<month>08</month>
<year>2021</year>
</date>
<date date-type="accepted">
<day>14</day>
<month>10</month>
<year>2021</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2022 McLean, Juul Hansen, Pop and Craciunas.</copyright-statement>
<copyright-year>2022</copyright-year>
<copyright-holder>McLean, Juul Hansen, Pop and Craciunas</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these&#x20;terms.</p>
</license>
</permissions>
<abstract>
<p>Modern Advanced Driver-Assistance Systems (ADAS) combine critical real-time and non-critical best-effort tasks and messages onto an integrated multi-core multi-SoC hardware platform. The real-time safety-critical software tasks have complex interdependencies in the form of end-to-end latency chains featuring, e.g., sensing, processing/sensor fusion, and actuating. The underlying real-time operating systems running on top of the multi-core platform use static cyclic scheduling for the software tasks, while the communication backbone is either realized through PCIe or Time-Sensitive Networking (TSN). In this paper, we address the problem of configuring ADAS platforms for automotive applications, which means deciding the mapping of tasks to processing cores and the scheduling of tasks and messages. Time-critical messages are transmitted in a scheduled manner via the timed-gate mechanism described in IEEE 802.1Qbv according to the pre-computed Gate Control List (GCL) schedule. We study the computation of the assignment of tasks to the available platform CPUs/cores, the static schedule tables for the real-time tasks, as well as the GCLs, such that task and message deadlines, as well as end-to-end task chain latencies, are satisfied. This is an intractable combinatorial optimization problem. As the ADAS platforms and applications become increasingly complex, such problems cannot be optimally solved and require problem-specific heuristics or metaheuristics to determine good quality feasible solutions in a reasonable time. We propose two metaheuristic solutions, a Genetic Algorithm (GA) and one based on Simulated Annealing (SA), both creating static schedule tables for tasks by simulating Earliest Deadline First (EDF) dispatching with different task deadlines and offsets. Furthermore, we use a List Scheduling-based heuristic to create the GCLs in platforms featuring a TSN backbone. We evaluate the proposed solution with real-world and synthetic test cases scaled to fit the future requirements of ADAS systems. The results show that our heuristic strategy can find correct solutions that meet the complex timing and dependency constraints at a higher rate than the related work approaches, i.e.,&#x20;the jitter constraints are satisfied in over 6&#x20;times more cases, and the task chain constraints are satisfied in 41% more cases on average. Our method scales well with the growing trend of ADAS platforms.</p>
</abstract>
<kwd-group>
<kwd>automotive applications</kwd>
<kwd>task scheduling</kwd>
<kwd>task preemption</kwd>
<kwd>time-sensitive networking</kwd>
<kwd>TSN</kwd>
<kwd>IEEE 802.1Qbv</kwd>
</kwd-group>
<contract-sponsor id="cn001">H2020 Excellent Science<named-content content-type="fundref-id">10.13039/100010662</named-content>
</contract-sponsor>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>Advanced Driver Assistance Systems (ADAS), present in more and more modern consumer vehicles, perform complex functions that range from driver assistance, e.g., automated or assisted parking, lane changing, etc., to fully autonomous driving. In modern ADAS systems, there is a drive towards moving functions from hardware to software and the architecture from distributed to centralized, allowing modularization within an integrated hardware platform that can be cooperatively used and centrally managed (<xref ref-type="bibr" rid="B47">Niedrist, 2018</xref>). This drive has multiple advantages, like reusability and portability, but presents several challenges, especially in terms of real-time, testing, and safety (<xref ref-type="bibr" rid="B26">Gietelink et&#x20;al., 2006</xref>). The fusion of multiple software functions of different criticality levels onto the same hardware platform has to be done in a composable manner with guaranteed temporal and spatial isolation without sacrificing real-time capabilities. This mixed-criticality paradigm applied to the automotive domain requires new concepts in terms of safety-critical temporal and spatial isolation, new scheduling results and configurations tools, as well as analysis methods for SIL certification (c.f. (<xref ref-type="bibr" rid="B29">Hammond et&#x20;al., 2015</xref>; <xref ref-type="bibr" rid="B47">Niedrist, 2018</xref>)).</p>
<p>Generally, integrated ADAS platforms are composed of heterogeneous multi-core CPUs and Systems-on-chip (SoCs) of different performance and safety levels that are interlinked by a (real-time) communication network (<xref ref-type="bibr" rid="B56">Sommer et&#x20;al., 2013</xref>; <xref ref-type="bibr" rid="B6">Becker et&#x20;al., 2016b</xref>). In such integrated platforms, the ADAS functions have complex timing requirements and feature a complex interdependence between sensors, control software, and actuators. For example, one function for driver assistance collects sensor data from both cameras and distance sensors (ultrasonic, LIDAR) into a sensor fusion layer which transmits the data via the time-aware communication backbone to control algorithms that activate, e.g., the emergency brake system. This succession of function execution and message transmission creates a temporal dependency chain, which has to comply with a set of timing requirements in terms of latency. In order to guarantee both the interdependence and real-time behavior of tasks and their messages, the safety-critical ADAS functions and their communication frames have to be scheduled appropriately. Moreover, other less critical systems, like infotainment, are also integrated into the same platform and must not interfere with the real-time behavior of critical functions.</p>
<sec id="s1-1">
<title>1.1 Related Work</title>
<p>The scheduling of task sets with dependencies has been a well-studied topic within the real-time community. Task schedules with inter-task dependencies are computed in (<xref ref-type="bibr" rid="B12">Chetto et&#x20;al., 1990</xref>) by modifying the offsets and deadlines of the individual tasks and then using EDF to schedule the new task set (<xref ref-type="bibr" rid="B11">Buttazzo, 2011</xref>). In (<xref ref-type="bibr" rid="B13">Choi and Agrawala, 2000</xref>) the notion of absolute and relative timing constraints (i.e.,&#x20;events are temporally dependent on each other) for source and sink task requirements are introduced. Furthermore, the authors present a scheduling approach for uniprocessor systems with complex timing constraints such as jitter requirements. In (<xref ref-type="bibr" rid="B22">Fohler, 1994</xref>) the authors compute static schedules for tasks that communicate through bounded delay protocols like TDMA or TTP using dependency graphs. The work in (<xref ref-type="bibr" rid="B59">Tindell and Clark, 1994</xref>) presents an analysis of the schedulability of tasks that communicate using the TDMA protocol. In (<xref ref-type="bibr" rid="B1">Abdelzaher and Shin, 1999</xref>) an optimal task schedule for communicating tasks is generated using a branch-and-bound approach. A similar approach is introduced in (<xref ref-type="bibr" rid="B48">Peng et&#x20;al., 1997</xref>) with modified optimization criteria. (<xref ref-type="bibr" rid="B16">Craciunas et&#x20;al., 2014</xref>) presents a similar heuristic scheduling approach to ours which uses EDF simulation to create static schedules for tasks with communication and precedence dependencies but in contrast to our work, the results only apply for dependencies between tasks with equal periods. The temporal dependencies between tasks presented in the prior work described above are not as complex as the ones arising from the ADAS task chains where not only task periods can be different, but the correctness of the chain dependency is related to individual task jobs. Multi-rate tasks and complex precedence constraints have been analyzed in (<xref ref-type="bibr" rid="B24">Forget et&#x20;al., 2011</xref>, <xref ref-type="bibr" rid="B23">2017</xref>; <xref ref-type="bibr" rid="B46">Mubeen and Nolte, 2015</xref>). Additionally, in (<xref ref-type="bibr" rid="B36">Isovi&#x107; and Fohler, 2000</xref>), a two-step approach for distributed systems is introduced, which is based on an offline computation and an online EDF mechanism for scheduling tasks with complex constraints like jitter and job-level precedence requirements.</p>
<p>In the context of ADAS, the complex task chain requirements have been addressed in terms of computing the worst-case end-to-end latency of multi-rate chains, c.f. (<xref ref-type="bibr" rid="B4">Becker et&#x20;al., 2017</xref>), depending on the available system information, e.g., scheduling algorithm or task offsets. Our approach is different in that it generates schedules that already adhere to the task chain requirements, which does not necessitate a further analysis since the schedule construction guarantees the real-time requirements. In (<xref ref-type="bibr" rid="B52">Rajeev et&#x20;al., 2010</xref>), the authors present a model-checking-based method to compute worst-case response times and end-to-end latencies of tasks that have chain dependency and communication constraints. In (<xref ref-type="bibr" rid="B5">Becker et&#x20;al., 2016a</xref>), the authors introduce a task chain latency analysis that does not require information about the concrete scheduling algorithm. (<xref ref-type="bibr" rid="B61">Verucchi et&#x20;al., 2020</xref>) use an existing list-scheduling algorithm but apply it on a directed acyclic graph (DAG), which is constructed from multi-rate task sets such that complex precedence and timing constraints are captured and satisfied.</p>
<p>In (<xref ref-type="bibr" rid="B40">Lukasiewycz et&#x20;al., 2012</xref>) a modular framework for ILP-based scheduling of time-triggered distributed automotive systems is presented, where both bus access and operating system schedules are created. The end-to-end latency of chains only applies single-rate dependency chains, and the method suffers from an exponential increase in runtime with increasing the number of tasks and messages. An extension that adds an incremental step in order to reduce the runtime complexity of the schedule generation has been proposed in (<xref ref-type="bibr" rid="B53">Sagstetter et&#x20;al., 2014</xref>), where the focus is on integrating locally optimized schedules into a globally non-optimal solution. In terms of the communication backbone, the scheduling problem for TSN networks has been addressed in, e.g., (<xref ref-type="bibr" rid="B15">Craciunas et&#x20;al., 2016</xref>; <xref ref-type="bibr" rid="B54">Serna Oliver et&#x20;al., 2018</xref>) for fully deterministic communication needs, including latency and jitter requirements without taking into account the schedule of the communicating tasks. Furthermore, the combined task and message scheduling problem has also been thoroughly studied for other types of networks, e.g., TTEthernet (<xref ref-type="bibr" rid="B14">Craciunas and Serna Oliver, 2016</xref>), shared registers (<xref ref-type="bibr" rid="B5">Becker et&#x20;al., 2016a</xref>), or the Universal Communication Model (<xref ref-type="bibr" rid="B50">Pop et&#x20;al., 2003</xref>).</p>
</sec>
<sec id="s1-2">
<title>1.2 Contributions</title>
<p>In our earlier work (<xref ref-type="bibr" rid="B42">McLean et&#x20;al., 2020</xref>) we considered that the communication backbone is done via Peripheral Component Interconnect Express (PCIe), and we have used a periodic real-time task model in which the worst-case execution time (WCET) of a task changes based on the core speed and the communication is modeled as overhead at the end of task instance execution. This paper extends our work to consider the IEEE 802.1&#x20;Time-Sensitive Networking (TSN) deterministic Ethernet standard for the communication. TSN is becoming a de-facto standard in several areas, e.g., industrial, automotive, avionics, space, with a broad industry adoption and several vendors developing TSN switches. This paper presents a heuristic-based scheduling algorithm for ADAS platforms that considers the different dimensions of timing and dependency requirements and is designed with scalability in mind. The optimization approaches are based on metaheuristics (Simulated Annealing and Genetic Algorithm), which take into account not only the timing constraints but also design goals, such as function allocation on computing units. We consider both PCIe and TSN for the communication. Future work may also include the LET model (<xref ref-type="bibr" rid="B7">Biondi and Di Natale, 2018</xref>) which is becoming increasingly popular in the automotive domain since it can provide deterministic communication behavior.</p>
<p>To the best of our knowledge, this is the first work to propose a heuristic-based solution to the combined scheduling problem in ADAS platforms that requires a solution for the task-to-core assignment, static task schedule generation, and the scheduling of TSN messages sent by the tasks, which respects both task and complex task chain timing constraints.</p>
<p>We start by introducing the platform and application models in <xref ref-type="sec" rid="s2">Section 2</xref> followed by a description of the scheduling problem in <xref ref-type="sec" rid="s3">Section 3</xref>. We introduce the algorithm in <xref ref-type="sec" rid="s4">Section 4</xref> followed by an experimental evaluation in <xref ref-type="sec" rid="s5">Section 5</xref> and conclude the paper in <xref ref-type="sec" rid="s6">Section&#x20;6</xref>.</p>
</sec>
</sec>
<sec id="s2">
<title>2 Platform and Application Models</title>
<sec id="s2-1">
<title>2.1 System Model</title>
<p>The modern integrated ADAS hardware platform features a multi-core multi-SoC embedded ECU with a variety of CPUs and Graphics Processing Units (GPUs) running at different speeds, which are interconnected through either a deterministic Ethernet backbone, such as TSN (<xref ref-type="bibr" rid="B35">IEEE, 2016b</xref>) or TTEthernet (<xref ref-type="bibr" rid="B57">Steiner et&#x20;al., 2011</xref>), or through PCIe. RazorMotion (<xref ref-type="bibr" rid="B60">TTTech Computertechnik AG, 2018</xref>), for example, features a Renesas RH850P/1H-C ASIL D MCU with lockstep cores running at 240&#xa0;MHz and two Renesas R-Car H3 ASIL B SoCs with four Cortex A57, four Cortex A53, one Cortex R7, one IMP-X5, and one IMG PowerVR GX6650&#x20;GPU.</p>
<p>
<xref ref-type="fig" rid="F1">Figure&#x20;1</xref> presents a high-level view of the ADAS platform, which is similar to the platform described in (<xref ref-type="bibr" rid="B41">Marija Sokcevic, 2020</xref>). Each host can run a different operating system depending on the safety and performance requirements. Each such OS can have a different scheduling policy, ranging from fixed-priority (AUTOSAR (<xref ref-type="bibr" rid="B9">Bunzel, 2011</xref>)) to table-driven or dynamic priority scheduling (typically in safety RTOSes). However, there is a growing tendency to use a table-driven static schedule execution due to the compositionality and isolation properties (<xref ref-type="bibr" rid="B40">Lukasiewycz et&#x20;al., 2012</xref>; <xref ref-type="bibr" rid="B53">Sagstetter et&#x20;al., 2014</xref>; <xref ref-type="bibr" rid="B45">Mehmed et&#x20;al., 2017</xref>; <xref ref-type="bibr" rid="B20">Ernst et&#x20;al., 2018</xref>), i.e.,&#x20;tasks that are already scheduled are not influenced by new tasks being added to the system. In order to provide a common execution environment and hardware abstraction, a middleware layer, e.g., the MotionWise (<xref ref-type="bibr" rid="B60">TTTech Computertechnik AG, 2018</xref>) layer, is running on top of each operating system. The middleware layer also ensures portability of software functions to be located according to their execution and safety requirements (<xref ref-type="bibr" rid="B47">Niedrist, 2018</xref>). Moreover, the middleware layer provides the capability to execute tasks according to a table-driven pre-computed schedule independent of the underlying OS dispatching mechanisms, which ensures temporal isolation (<xref ref-type="bibr" rid="B45">Mehmed et&#x20;al., 2017</xref>). Hence, in this paper, we focus on creating static schedules for the table-driven dispatching mechanism of such ADAS systems.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>High-level platform model.</p>
</caption>
<graphic xlink:href="frobt-08-762227-g001.tif"/>
</fig>
<p>Tasks performing software functions of different criticality levels communicate with each other both on- and off-chip through different means. On-chip communication is usually done through buffers, message passing, or shared memory, while off-chip communication is achieved either through PCIe or TSN. The safety-critical communication also has to adhere to stringent timing requirements and has to be aligned to the execution schedule of the real-time tasks. For example, when PCIe is used, a message sending cost has to be taken into account when scheduling the respective communicating tasks. When using time-aware switched Ethernet technologies like TSN, the schedule of the messages has to be aligned to the execution of the tasks, and the end-to-end latency requirements comprising both task execution and message transmission have to be&#x20;met.</p>
<p>We model an ADAS platform as a graph <inline-formula id="inf1">
<mml:math id="m1">
<mml:mi mathvariant="script">A</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="script">V</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="script">E</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. A vertex <inline-formula id="inf2">
<mml:math id="m2">
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">V</mml:mi>
</mml:math>
</inline-formula> is either an end system (ES) that performs computations, the set of all ESes denoted with <inline-formula id="inf3">
<mml:math id="m3">
<mml:mi mathvariant="script">ES</mml:mi>
</mml:math>
</inline-formula>, or a TSN switch (SW), their set being denoted with <inline-formula id="inf4">
<mml:math id="m4">
<mml:mi mathvariant="script">SW</mml:mi>
</mml:math>
</inline-formula>. The edges <inline-formula id="inf5">
<mml:math id="m5">
<mml:mi mathvariant="script">E</mml:mi>
</mml:math>
</inline-formula> are the communication links. Each ES <inline-formula id="inf6">
<mml:math id="m6">
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">ES</mml:mi>
</mml:math>
</inline-formula> has a set of computation cores&#x20;<inline-formula id="inf7">
<mml:math id="m7">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>.</p>
</sec>
<sec id="s2-2">
<title>2.2 TSN</title>
<p>Time-Sensitive Networking (<xref ref-type="bibr" rid="B35">IEEE, 2016b</xref>) addresses the need to have more determinism and real-time capabilities over standardized Ethernet networks. To achieve this, TSN defines a series of amendments to the IEEE 802.1Q standard, as well as stand-alone mechanisms and protocols (e.g., 802.1ASrev). TSN has already seen adoption in the industrial domain and is becoming increasingly relevant in the automotive domain. The main mechanisms out of the TSN ecosystem that we consider in this paper are the clock synchronization protocol IEEE 802.1ASrev (<xref ref-type="bibr" rid="B33">IEEE, 2016a</xref>), which provides a synchronized clock reference, and the timed-gate functionality of IEEE 802.1Qbv (<xref ref-type="bibr" rid="B34">IEEE, 2015</xref>) bringing scheduled communication capabilities on the egress ports of devices. The timed-gate mechanism is essentially a shaping gate that forwards selected message streams from each egress queue according to the transmission schedule encoded in so-called Gate-Control Lists (GCL). A TSN stream is defined by a payload size, a talker (sender), one or more listeners (receivers), and optional timing requirements in terms of jitter and latency. The global schedule synthesis has been studied in (<xref ref-type="bibr" rid="B15">Craciunas et&#x20;al., 2016</xref>; <xref ref-type="bibr" rid="B19">D&#xfc;rr and Nayak, 2016</xref>; <xref ref-type="bibr" rid="B49">Pop et&#x20;al., 2016</xref>; <xref ref-type="bibr" rid="B54">Serna Oliver et&#x20;al., 2018</xref>) focusing on enforcing deterministic transmission, temporal isolation, and compositional system design for critical streams with end-to-end latency requirements.</p>
<p>A communication link is modeled as a directed edge is represented by two vertices <inline-formula id="inf8">
<mml:math id="m8">
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">E</mml:mi>
</mml:math>
</inline-formula>. All physical links in the system are bidirectional and so for each <inline-formula id="inf9">
<mml:math id="m9">
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">E</mml:mi>
</mml:math>
</inline-formula>, there exists a <inline-formula id="inf10">
<mml:math id="m10">
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">E</mml:mi>
</mml:math>
</inline-formula> with the same properties except that source and destination are swapped. In TSN-based systems, a directional virtual edge is created for each core, i.e.,&#x20;the edge [<italic>v</italic>
<sub>
<italic>a</italic>
</sub>, <italic>v</italic>
<sub>
<italic>a</italic>
</sub>] is added to <inline-formula id="inf11">
<mml:math id="m11">
<mml:mi mathvariant="script">E</mml:mi>
</mml:math>
</inline-formula>. Each link <inline-formula id="inf12">
<mml:math id="m12">
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">E</mml:mi>
</mml:math>
</inline-formula> has a set of attributes. We denote with [<italic>v</italic>
<sub>
<italic>a</italic>
</sub>, <italic>v</italic>
<sub>
<italic>b</italic>
</sub>].<italic>s</italic> the transmission bandwidth of the link, [<italic>v</italic>
<sub>
<italic>a</italic>
</sub>, <italic>v</italic>
<sub>
<italic>b</italic>
</sub>].<italic>c</italic> denotes the number of queues in associated egress&#x20;port.</p>
</sec>
<sec id="s2-3">
<title>2.3 Application Model</title>
<p>On top of this platform, many different software functions implemented by different vendors must be integrated and deployed. It is crucial that software functions (which may be tested independently) can be integrated with other software functions compositionally. The system is composed of applications (called tasks or runnables) that are either pre-assigned to cores or must be assigned by the scheduling algorithm. Tasks have real-time requirements, both in terms of execution (offset, deadline, jitter) as well as temporal dependencies arising from task chains (defined below). We model the applications as a set of <italic>n</italic> periodic tasks, &#x393; &#x3d; {<italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub>&#x2223;1 &#x2264; <italic>i</italic>&#x20;&#x2264; <italic>n</italic>}, similar to the model in (<xref ref-type="bibr" rid="B39">Liu and Layland, 1973</xref>). A task <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub> is defined by the tuple (<italic>&#x3c3;</italic>
<sub>
<italic>i</italic>
</sub>, <italic>r</italic>
<sub>
<italic>i</italic>
</sub>, <italic>&#x3d5;</italic>
<sub>
<italic>i</italic>
</sub>, <italic>C</italic>
<sub>
<italic>i</italic>
</sub>, <italic>T</italic>
<sub>
<italic>i</italic>
</sub>, <italic>D</italic>
<sub>
<italic>i</italic>
</sub>) with <italic>&#x3c3;</italic>
<sub>
<italic>i</italic>
</sub> representing the core, <italic>C</italic>
<sub>
<italic>i</italic>
</sub> denoting the worst-case execution time (WCET), <italic>T</italic>
<sub>
<italic>i</italic>
</sub> the period, <italic>r</italic>
<sub>
<italic>i</italic>
</sub> the earliest release time, <italic>&#x3d5;</italic>
<sub>
<italic>i</italic>
</sub> the initial offset/displacement of task arrival times and <italic>D</italic>
<sub>
<italic>i</italic>
</sub> the relative deadline of the task under the assumption that <italic>D</italic>
<sub>
<italic>i</italic>
</sub> &#x2264; <italic>T</italic>
<sub>
<italic>i</italic>
</sub>. Each real-time task <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub> yields an infinite set of instances (jobs) <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>,<italic>k</italic>
</sub>, <italic>k</italic>&#x20;&#x3d; 1, 2, &#x2026; (<xref ref-type="bibr" rid="B11">Buttazzo, 2011</xref>, p. 80). Tasks can be preempted at any time instant on a timeline with macrotick granularity given by the underlying OS capabilities.</p>
<p>If a task <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub> is pre-assigned to a core, then its core <italic>&#x3c3;</italic>
<sub>
<italic>i</italic>
</sub> will be given. Otherwise, we decide their assignment to a specific core, in that the <italic>&#x3c3;</italic>
<sub>
<italic>i</italic>
</sub> of a task <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub> can take any value from a finite set of core values <inline-formula id="inf13">
<mml:math id="m13">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>. The assignment of tasks to cores is captured by the mapping function <inline-formula id="inf14">
<mml:math id="m14">
<mml:mi>M</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
<mml:mo>&#x2192;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>.</p>
<p>The scheduling allows preemption, i.e.,&#x20;a schedule table can be constructed such that a task is interrupted by another task and then resumes its execution. Currently, tasks cannot migrate at run time after they have been assigned to a core, but in the future, we envision that task migration, when done correctly with respect to the deterministic timing behavior, will allow even better resource utilization.</p>
<p>Tasks may exchange messages. A message is modeled as a flow (stream) <inline-formula id="inf15">
<mml:math id="m15">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, which has a period &#x3a6;<sub>
<italic>i</italic>
</sub>.<italic>T</italic> which is the same as its sender and receiver tasks, a deadline &#x3a6;<sub>
<italic>i</italic>
</sub>.<italic>D</italic>, which can be arbitrary but smaller than or equal to the period &#x3a6;<sub>
<italic>i</italic>
</sub>.<italic>T</italic>, a message size &#x3a6;<sub>
<italic>i</italic>
</sub>.<italic>P</italic>, and a fixed route &#x3a6;<sub>
<italic>i</italic>
</sub>.<italic>r</italic>. Messages are transmitted as frames. If a message exceeds the maximum transmission unit (MTU) of 1,500 bytes defined for standard Ethernet, then the message is split into <inline-formula id="inf16">
<mml:math id="m16">
<mml:mi>k</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="&#x2308;" close="&#x2309;">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>.</mml:mo>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1500</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> fragments. The message is split such that each resultant frame is its maximum size until the last, which has the last bytes. A frame <inline-formula id="inf17">
<mml:math id="m17">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> is an instance of the frame on the link [<italic>v</italic>
<sub>
<italic>a</italic>
</sub>, <italic>v</italic>
<sub>
<italic>b</italic>
</sub>]. It is associated with the <italic>i</italic>th flow and has sequence number <italic>m</italic>. A frame has a transmission duration of <inline-formula id="inf18">
<mml:math id="m18">
<mml:msup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msup>
<mml:mo>.</mml:mo>
<mml:mi>L</mml:mi>
</mml:math>
</inline-formula> microseconds on the link [<italic>v</italic>
<sub>
<italic>a</italic>
</sub>, <italic>v</italic>
<sub>
<italic>b</italic>
</sub>] where it is transmitted. A frame can have a maximum payload of MTU 1,500 bytes plus the 42 bytes Ethernet header.</p>
</sec>
<sec id="s2-4">
<title>2.4 Timing Constraints</title>
<p>Each task may have implicit timing constraints arising from the task definition and explicit design parameters related to arrival offsets and/or deadline requirements. Hence, a task must execute periodically with the given period <italic>T</italic>
<sub>
<italic>i</italic>
</sub>, and in each period, it must finish its worst-case execution <italic>C</italic>
<sub>
<italic>i</italic>
</sub> within the defined deadline <italic>D</italic>
<sub>
<italic>i</italic>
</sub>, starting after the earliest release time <italic>r</italic>
<sub>
<italic>i</italic>
</sub>. In addition, tasks may also have jitter requirements, i.e.,&#x20;constraints on the variance of execution of consecutive period instances (<xref ref-type="bibr" rid="B11">Buttazzo, 2011</xref>, p. 81-82), due to control loop considerations (<xref ref-type="bibr" rid="B18">Di Natale and Stankovic, 2000</xref>). We denote the jitter requirements of a task <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub> with <italic>J</italic>
<sub>
<italic>i</italic>
</sub> and the observed jitter <italic>j</italic>
<sub>
<italic>i</italic>
</sub>, i.e.,&#x20;the maximal deviation of both starting and finishing times for any two consecutive task instances are bounded by&#x20;<italic>J</italic>
<sub>
<italic>i</italic>
</sub>.</p>
<p>Other timing requirements are related to message passing between tasks, where the communication latency has to be considered. The most complex set of timing requirements come from the so-called task (or event) chains (c.f. (<xref ref-type="bibr" rid="B5">Becker et&#x20;al., 2016a</xref>)). A task chain specifies that at least one instance of every task in the given task chain list has to be executed in the specified order within a given maximum end-to-end <italic>reaction latency</italic>. These chains also have a priority, <italic>p</italic>
<sub>
<italic>i</italic>
</sub>, which can be used for optimization criteria. Since the tasks in the chain can be on different hosts/cores, the communication needs have to be included in the end-to-end latency considerations. In a PCIe backbone, the latencies between communicating tasks are modeled and enforced as an additional delay after executing the sending tasks. In the case of TSN, the frame schedule must be aligned to the task execution to ensure that the messages are sent after the sending task has been executed and before the receiving task starts. Please note that tasks in the chains may have different activation patterns and periodicity, i.e.,&#x20;we are considering multi-rate chains (c.f. (<xref ref-type="bibr" rid="B4">Becker et&#x20;al., 2017</xref>)).</p>
<p>We give a simple example of a task chain in <xref ref-type="fig" rid="F2">Figure&#x20;2</xref> composed of 4 tasks, a source (<italic>&#x3c4;</italic>
<sub>1</sub>), two processing tasks (<italic>&#x3c4;</italic>
<sub>2</sub>, <italic>&#x3c4;</italic>
<sub>3</sub>) and a sink (<italic>&#x3c4;</italic>
<sub>4</sub>) with periods of 20&#xa0;<italic>ms</italic>, 20&#xa0;<italic>ms</italic>, 10&#xa0;<italic>ms</italic> and 20&#xa0;<italic>ms</italic>, respectively. The critical communication between <italic>&#x3c4;</italic>
<sub>1</sub> and <italic>&#x3c4;</italic>
<sub>2</sub> is done off-chip through the TSN network over two switches (<italic>SW</italic>
<sub>1</sub> and <italic>SW</italic>
<sub>2</sub>) since <italic>&#x3c4;</italic>
<sub>1</sub> and <italic>&#x3c4;</italic>
<sub>2</sub> are running on different SoCs. For the purposes of this illustration, tasks <italic>&#x3c4;</italic>
<sub>2</sub>, <italic>&#x3c4;</italic>
<sub>3</sub>, and <italic>&#x3c4;</italic>
<sub>4</sub> are located on the same core, and the communication is assumed to be in 0-time. From each instance of the source, there needs to be a succession of instances of the other tasks in the right order such that the latency is not exceeded. It is allowed that an instance of the processing or sink tasks merges multiple signals. In the example, the sink merges the signal from two execution instances of the processing task <italic>&#x3c4;</italic>
<sub>3</sub>. The communication frames from <italic>&#x3c4;</italic>
<sub>1</sub> to <italic>&#x3c4;</italic>
<sub>2</sub> have to be scheduled in such a way that the message is forwarded through the switches and arrives at <italic>&#x3c4;</italic>
<sub>2</sub> before the respective instance of <italic>&#x3c4;</italic>
<sub>2</sub> executes. The latency of the communication needs to be also included in the total end-to-end latency.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>Task chain example with TSN communication.</p>
</caption>
<graphic xlink:href="frobt-08-762227-g002.tif"/>
</fig>
<p>Let <inline-formula id="inf19">
<mml:math id="m19">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> denote the set of task chains, where a task chain is given by the tuple <italic>&#x2135;</italic>
<sub>
<italic>i</italic>
</sub> &#x3d; ({<italic>&#x3c4;</italic>
<sub>1</sub> &#x227a;&#x2026;&#x227a; <italic>&#x3c4;</italic>
<sub>
<italic>k</italic>
</sub>}, <italic>L</italic>
<sub>
<italic>i</italic>
</sub>, <italic>p</italic>
<sub>
<italic>i</italic>
</sub>) with <italic>L</italic>
<sub>
<italic>i</italic>
</sub> being the allowed end-to-end latency and <italic>p</italic>
<sub>
<italic>i</italic>
</sub> &#x2208; [0, 1] is the priority. For a chain <inline-formula id="inf20">
<mml:math id="m20">
<mml:msub>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x227a;</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>&#x227a;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, we formalize the correctness condition for the in-order execution and end-to-end latency requirement as follows:<disp-formula id="e1">
<mml:math id="m21">
<mml:mtable class="aligned">
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mo>&#x2200;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>h</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
<mml:mo>:</mml:mo>
<mml:mo>&#x2203;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>h</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mo>&#x2200;</mml:mo>
<mml:mi>j</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mtext>&#x2009;such&#x2009;that</mml:mtext>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2265;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2227;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2227;</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2200;</mml:mo>
<mml:mi>j</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
<mml:mo>:</mml:mo>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2265;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(1)</label>
</disp-formula>where <italic>hp</italic>
<sub>
<italic>i</italic>
</sub> is the hyperperiod of the chain <italic>&#x2135;</italic>
<sub>
<italic>i</italic>
</sub> calculated as the least common multiple of the periods of the tasks in the respective chain and interfering tasks.<xref ref-type="fn" rid="fn1">
<sup>1</sup>
</xref> and <italic>start</italic>(<italic>&#x3c4;</italic>
<sub>
<italic>i</italic>,<italic>j</italic>
</sub>) and <italic>end</italic>(<italic>&#x3c4;</italic>
<sub>
<italic>i</italic>,<italic>j</italic>
</sub>) denote the start and end of the execution of the job <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>,<italic>j</italic>
</sub>, respectively.</p>
<p>If there is communication over the TSN network between any two tasks in the chain, the TSN network schedule needs to reflect several correctness conditions. Firstly, the correctness conditions from (<xref ref-type="bibr" rid="B15">Craciunas et&#x20;al., 2016</xref>) for generating GCL schedules need to be fulfilled in order to have correct and deterministic frame transmission over IEEE 802.1Qbv TSN devices. In addition to the technological constraints of standard full-duplex Ethernet networks, a deterministic timing of frames is enforced in (<xref ref-type="bibr" rid="B15">Craciunas et&#x20;al., 2016</xref>) through so-called frame/flow isolation constraints. In the timed-gate mechanism of IEEE 802.1Qbv, the transmission schedule applies to the entire traffic class (as opposed to individual frames like in, e.g., TTEthernet). Therefore, the queue state has to be known and deterministic in order to ensure that the right frames are sent at the right time. Hence, the isolation conditions in (<xref ref-type="bibr" rid="B15">Craciunas et&#x20;al., 2016</xref>) enforce that a correct GCL schedule isolates frames of different flows either in the space domain by placing them in different egress queues or in the time domain, preventing frames of different flows from being in the same queue at the same time. Secondly, implementation or network-specific correctness conditions need to be fulfilled. Here we mention the synchronization error and the microtick of the timeline. The synchronization protocol defined in IEEE 802.1As-rev ensures a common clock reference; however, individual clocks may still have a bounded time differential towards the clock reference. The maximum of all the individual bounded clock errors is called the network precision (<italic>&#x3b4;</italic>). Furthermore, the (hardware) realization of the required state machines defined in, e.g., IEEE 802.1Qbv implementing the TAS mechanism also has a certain overhead, resulting in a minimum mandatory spacing of scheduled events (called microtick or link granularity). The microtick or link granularity defines the fastest rate at which schedule events can be processed by the TSN hardware and hence, the granularity of the TSN scheduling timeline. Thirdly, the GCL schedule and, more specifically, the schedule offsets of the frame transmission need to be aligned to the task schedule. For example, a message transmitted between two tasks within a chain has to be scheduled for sending after the execution of the sending task and has to arrive before the receiving task executes. Additionally, the communication latency, which adds to the chain&#x2019;s overall end-to-end latency, has to be within the given latency requirements.</p>
<p>For a given mapping <italic>M</italic>, we denote the schedule table with <inline-formula id="inf21">
<mml:math id="m22">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula>. In this table, each task <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub> has a list of offsets <italic>O</italic>
<sub>
<italic>i</italic>
</sub> on its core <italic>&#x3c3;</italic>
<sub>
<italic>i</italic>
</sub>. The first offset in <italic>O</italic>
<sub>
<italic>i</italic>
</sub>, denoted with <italic>&#x3d5;</italic>
<sub>
<italic>i</italic>
</sub>, captures the initial offset of <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub>&#x2019;s arrival time within the schedule, and the rest of the offsets in <italic>O</italic>
<sub>
<italic>i</italic>
</sub> are the times when task <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub> resumes its execution if preempted. The schedule table <inline-formula id="inf22">
<mml:math id="m23">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula> also contains the GCLs, which are captured via an offset <inline-formula id="inf23">
<mml:math id="m24">
<mml:msup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msup>
<mml:mo>.</mml:mo>
<mml:mi>&#x3d5;</mml:mi>
</mml:math>
</inline-formula>, where <italic>i</italic> and <italic>m</italic> are the flow and the frame instance, respectively, and [<italic>v</italic>
<sub>
<italic>a</italic>
</sub>, <italic>v</italic>
<sub>
<italic>b</italic>
</sub>] is the link on which the frame is transmitted. <xref ref-type="fig" rid="F2">Figure&#x20;2</xref> shows a Gantt chart, which is a visual representation of a schedule&#x20;table.</p>
</sec>
</sec>
<sec id="s3">
<title>3 Problem Formulation</title>
<p>The scheduling algorithm needs to find an assignment of unassigned tasks to cores such that the tasks are schedulable on each assigned core concerning their timing constraints (offsets, deadlines, and jitter) as well as concerning the task chain requirements. Moreover, since there is communication either between individual tasks or between tasks in a task chain, the scheduling algorithm also needs to find a schedule for the deterministic communication backbone that respects the required maximum latencies.</p>
<p>As an input to our problem we have 1) the ADAS platform <inline-formula id="inf24">
<mml:math id="m25">
<mml:mi mathvariant="script">A</mml:mi>
</mml:math>
</inline-formula> and 2) the applications, denoted by the set of applications &#x393;, including the task chains <inline-formula id="inf25">
<mml:math id="m26">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> and all the mapping and timing constraints. We are interested in determining 1) a mapping <italic>M</italic> of tasks to the cores of the platform and 2) a static schedule <inline-formula id="inf26">
<mml:math id="m27">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula> of tasks on each core, such that the task deadlines and their jitter, as well as end-to-end constraints on task chains are satisfied. We consider a constant delay for the PCIe communication backbone as part of a task&#x2019;s WCET. For the TSN backbone, we assume that the flows and their routing are given (e.g., using the shortest path), and the schedule <inline-formula id="inf27">
<mml:math id="m28">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula> also contains the offsets of frames, i.e.,&#x20;we also 3) determine the TSN&#x20;GCLs.</p>
</sec>
<sec id="s4">
<title>4 Mapping and Scheduling Strategy</title>
<p>The presented in the previous section is a combination of the problems in (<xref ref-type="bibr" rid="B49">Pop et&#x20;al., 2016</xref>) and (<xref ref-type="bibr" rid="B42">McLean et&#x20;al., 2020</xref>). Both problems are complex scheduling problems, and the decision problem associated with them have been thoroughly investigated in the literature. (<xref ref-type="bibr" rid="B55">Sinnen, 2007</xref>) and (<xref ref-type="bibr" rid="B25">Garey and Johnson, 1979</xref>) prove it to be in the NP-complete class by reducing it to the known 3-PARTITION and PARTITION problems. With the assumption that <italic>P</italic>&#x20;&#x2260; <italic>NP</italic>, the scheduling problem cannot be solved efficiently by a polynomial-time algorithm. In our initial investigation of the problem, we have implemented a solution using Optimization Modulo Theories (OMT), which is an extension of Satisfiability Modulo Theories (SMT), based on the work in (<xref ref-type="bibr" rid="B14">Craciunas and Serna Oliver, 2016</xref>). However, the OMT/SMT approach has not been able to find solutions due to the complexity of the problem. The increasing complexity of ADAS platforms renders such mathematical programming approaches, including Integer Linear Programming (ILP) (<xref ref-type="bibr" rid="B14">Craciunas and Serna Oliver, 2016</xref>), infeasible in practice. It is expected that ADAS platforms, which already have the complexity of an entire in-vehicle electronics system (<xref ref-type="bibr" rid="B60">TTTech Computertechnik AG, 2018</xref>), will grow to a scale of thousands of functions with hundreds of complex event chain requirements. For such intractable problems, researchers have proposed the use of problem-specific heuristics and metaheuristics (<xref ref-type="bibr" rid="B10">Burke and Kendall, 2005</xref>), as an alternative to exact optimization methods which have exponential running times. Several metaheuristic approaches have been presented in the literature (<xref ref-type="bibr" rid="B10">Burke and Kendall, 2005</xref>), and the challenge is to identify the right metaheuristic for our problem. Metaheuristics aim to find a good quality solution in a reasonable time but do not guarantee that an (optimal) solution will always be found. Based on the review of the related work, we have decided to implement a combination of heuristics for scheduling, based on List Scheduling (<xref ref-type="bibr" rid="B55">Sinnen, 2007</xref>) and a <italic>simulation</italic> of the Earliest Deadline First (EDF) (<xref ref-type="bibr" rid="B14">Craciunas and Serna Oliver, 2016</xref>) scheduling algorithm. For the mapping, we have decided to compare the Simulated Annealing (SA) and Genetic Algorithm (GA) metaheuristics, which have been shown in the literature to be a promising approach for task mapping problems.</p>
<sec id="s4-1">
<title>4.1 Solution Overview and Cost Function</title>
<p>An overview of our optimization strategy is illustrated in <xref ref-type="fig" rid="F3">Figure&#x20;3</xref>. The metaheuristics (SA or GA) decide the mapping <italic>M</italic> via an iterative search which generates neighboring solutions from the current solution, see &#x201c;SA or GA search procedure&#x201d; box in the figure, see the details in <xref ref-type="sec" rid="s4-2">Section 4.2</xref>. The schedule <inline-formula id="inf28">
<mml:math id="m29">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula> of flows and messages is decided by a combination of scheduling heuristics, i.e.,&#x20;List Scheduling (LS) and Earliest Deadline First (EDF), see the box with LS and EDF in the figure, and the details in <xref ref-type="sec" rid="s4-3">Section 4.3</xref> and <xref ref-type="sec" rid="s4-4">Section 4.4</xref>, respectively. Finally, the quality of a solution is evaluated using a <italic>cost function</italic>, see &#x201c;Cost Function&#x201d; box in the figure and the discussion later in this section. We present our proposed solution for TSN-based systems. The same solution is used for PCIe-based systems, with the observation that the flows are not considered, i.e.,&#x20;they are modeled as an overhead added to the sending task&#x2019;s&#x20;WCET.</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>Solution overview.</p>
</caption>
<graphic xlink:href="frobt-08-762227-g003.tif"/>
</fig>
<p>We use an LS-based heuristic to jointly schedule the flows and the tasks involved in communication, presented in <xref ref-type="sec" rid="s4-3">Section 4.3</xref>. Once the communicating tasks and flows are scheduled, we use an Earliest Deadline First (EDF)-based scheduling heuristic to add the tasks not involved in communication across cores and optimize the schedule, also by introducing design-time &#x201c;preemption&#x201d;, i.e.,&#x20;task splitting, see <xref ref-type="sec" rid="s4-4">Section 4.4</xref>. We then check if the schedule adheres to the timing requirements imposed by the jitter and task chain constraints. The EDF scheduling heuristic introduces design-time task preemption by <italic>simulating</italic> at design time an EDF scheduling policy parameterized by task offsets and local deadlines. The heuristics receive as an input the mapping of tasks to cores. The LS heuristic is controlled by the tasks and flow offsets (<italic>&#x3d5;</italic>
<sub>
<italic>i</italic>
</sub> &#x2265; 0), which are the earliest times a task can be started, or a flow can be sent. The EDF heuristic is controlled by both the offsets and local deadlines <inline-formula id="inf29">
<mml:math id="m30">
<mml:mi mathvariant="script">D</mml:mi>
</mml:math>
</inline-formula>, see the arrow in <xref ref-type="fig" rid="F3">Figure&#x20;3</xref> from the &#x201c;SA or GA search procedure&#x201d; box and the LS and EDF box&#x20;below.</p>
<p>The mapping and the controlling parameters (offsets, deadlines) for the scheduling heuristics are determined by the metaheuristics, as part of their search procedure. We have developed two metaheuristics, one based on Simulated Annealing (SA), see <xref ref-type="sec" rid="s4-2-1">Section 4.2.1</xref> and one based on a Genetic Algorithm (GA), see <xref ref-type="sec" rid="s4-2-2">Section 4.2.2</xref>. Both metaheuristics modify the mapping of tasks <italic>M</italic>, the task and flow offsets (<italic>&#x3d5;</italic>
<sub>
<italic>i</italic>
</sub> &#x2265; 0), and deadlines <inline-formula id="inf30">
<mml:math id="m31">
<mml:mi mathvariant="script">D</mml:mi>
</mml:math>
</inline-formula>, to find an optimal solution with respect to the cost function. The novelty in our approach is that our metaheuristics make use of the different dimensions that influence task execution, i.e.,&#x20;task mapping, task offsets, and task deadlines, to converge to a near-optimal solution faster than traditional approaches.</p>
<p>The cost function (<italic>Cost</italic>), defined in <xref ref-type="disp-formula" rid="e2">Eq. 2</xref>, captures both a minimization objective with respect to the end-to-end latency of task chains and penalties representing constraint violations given by the application. The function has two cases, 1) a value if the solution configuration meets all the timing constraints and 2) a combination of static and dynamic penalties if one or more timing constraints are violated.<disp-formula id="e2">
<mml:math id="m32">
<mml:mi>C</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mfrac>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:munder>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x22c5;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x22c5;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">f</mml:mi>
<mml:mi>&#x3c7;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mi mathvariant="normal">r</mml:mi>
<mml:mi mathvariant="normal">u</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">f</mml:mi>
<mml:mi>&#x3c7;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="normal">f</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">l</mml:mi>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(2)</label>
</disp-formula>
</p>
<p>During the search, the metaheuristics do not reject the invalid solutions. Instead, we &#x201c;penalize&#x201d; an invalid solution by increasing its cost function value to be larger than the values for valid solutions in the hope of driving the search towards valid solutions. A solution is <italic>invalid</italic> if one of the three constraints is violated: 1) There is a task or flow which does not meet its deadline, i.e.,&#x20;the worst-case response time <italic>f</italic>
<sub>
<italic>i</italic>
</sub> of a task <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub> is larger than its deadline <italic>D</italic>
<sub>
<italic>i</italic>
</sub> (or the worst-case delay of a flow is larger than its deadline). 2) There is a chain <italic>&#x2135;</italic>
<sub>
<italic>i</italic>
</sub> which has an end-to-end latency <italic>l</italic>
<sub>
<italic>i</italic>
</sub> that is greater than its allowed latency <italic>L</italic>
<sub>
<italic>i</italic>
</sub>. 3) There is a task <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub> which has a jitter <italic>j</italic>
<sub>
<italic>i</italic>
</sub> greater than maximum allowed jitter <italic>J</italic>
<sub>
<italic>i</italic>
</sub>, see the notations in <xref ref-type="sec" rid="s2-4">Section 2.4</xref>. We capture each of these constraint violations using a separate penalty term, which is zero if the constraint is not violated: 1) <italic>&#x3c1;</italic>
<sub>
<italic>D</italic>
</sub> for deadline violations, 2) <italic>&#x3c1;</italic>
<sub>
<italic>&#x2135;</italic>
</sub> for chain latency violations and 3) <italic>&#x3c1;</italic>
<sub>
<italic>J</italic>
</sub> for jitter violations. Hence, if the sum of these penalty terms is zero then the solution is valid, i.e.,&#x20;all constraints are satisfied and thus all penalty terms are zero. We capture this situation with a test defined by <italic>&#x3c7;</italic>(<italic>s</italic>) &#x3d; <italic>&#x3c1;</italic>
<sub>
<italic>&#x2135;</italic>
</sub> &#x2b; <italic>&#x3c1;</italic>
<sub>
<italic>D</italic>
</sub> &#x2b; <italic>&#x3c1;</italic>
<sub>
<italic>J</italic>
</sub> &#x3e; 0. <italic>&#x3c7;</italic>(<italic>s</italic>) is true if the solution is valid, i.e.,&#x20;case (1) in <xref ref-type="disp-formula" rid="e2">Eq. 2</xref>, and false if the solution is invalid, corresponding to case&#x20;(2).</p>
<p>Let us first discuss case (1) when the solution is valid. In this case, the value of the cost function which has to be minimized is defined as the average weighted distance of the measured end-to-end latency <italic>l</italic>
<sub>
<italic>i</italic>
</sub> over the imposed constraint <italic>L</italic>
<sub>
<italic>i</italic>
</sub>, of all task chains. Basically, the smaller the chain latencies, the smaller the term. When we sum up <inline-formula id="inf31">
<mml:math id="m33">
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:math>
</inline-formula> we also multiply with the chain&#x2019;s priority <italic>p</italic>
<sub>
<italic>i</italic>
</sub> to capture the relative importance of chains. The resulted summation is divided with the number of chains <inline-formula id="inf32">
<mml:math id="m34">
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:math>
</inline-formula>. Note that when a solution is valid, <italic>l</italic>
<sub>
<italic>i</italic>
</sub> &#x2264; <italic>L</italic>
<sub>
<italic>i</italic>
</sub>. The divisions of <italic>l</italic>
<sub>
<italic>i</italic>
</sub> by <italic>L</italic>
<sub>
<italic>i</italic>
</sub> and of the summation by <inline-formula id="inf33">
<mml:math id="m35">
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:math>
</inline-formula> are intended to normalize the cost function term. In addition, we multiply the thus resulted term with a static penalty weight <italic>w</italic>
<sub>1</sub>. We will discuss the use of weights shortly when we cover case&#x20;(2).</p>
<p>Let us consider the example in <xref ref-type="fig" rid="F4">Figure&#x20;4</xref> where we have three tasks and one chain on a single core. The details are given next to the figure, with the note that the allowed end-to-end latency of the chain <italic>L</italic>
<sub>1</sub> is 20, and its priority <italic>p</italic>
<sub>
<italic>i</italic>
</sub> is 1.0. <xref ref-type="fig" rid="F4">Figure&#x20;4A</xref> shows a valid solution, whereas <xref ref-type="fig" rid="F4">Figure&#x20;4B</xref> an invalid one. For <xref ref-type="fig" rid="F4">Figure&#x20;4A</xref> we have <italic>l</italic>
<sub>1</sub> &#x3d; 20, hence the cost function is <inline-formula id="inf34">
<mml:math id="m36">
<mml:mfrac>
<mml:mrow>
<mml:mn>20</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>20</mml:mn>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x22c5;</mml:mo>
<mml:mn>1.0</mml:mn>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi>w</mml:mi>
<mml:mn>1</mml:mn>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi>w</mml:mi>
<mml:mn>1</mml:mn>
</mml:math>
</inline-formula>. Let us now discuss the cost function for the case 2) when a solution is invalid. In that case, <italic>&#x3c1;</italic>
<sub>
<italic>&#x2135;</italic>
</sub> &#x2b; <italic>&#x3c1;</italic>
<sub>
<italic>D</italic>
</sub> &#x2b; <italic>&#x3c1;</italic>
<sub>
<italic>J</italic>
</sub> will be greater than zero. To this term, we add <italic>w</italic>
<sub>1</sub> to ensure that any invalid solution will be rated worse relative to that of any valid solution. That is, it adjusts the score such that the minimal penalty value is higher than that of any feasible solution, thereby preventing the search process from accepting any invalid candidate over a valid one. As discussed, we use <italic>&#x3c1;</italic>
<sub>
<italic>D</italic>
</sub> to penalize deadline violations, <italic>&#x3c1;</italic>
<sub>
<italic>&#x2135;</italic>
</sub> to penalize chain violations and <italic>&#x3c1;</italic>
<sub>
<italic>J</italic>
</sub> to penalize jitter violations.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>Schedule optimization. <bold>(A)</bold> End-to-end task chain latencies not satisfied. <bold>(B)</bold> End-to-end task chains latencies satisfied.</p>
</caption>
<graphic xlink:href="frobt-08-762227-g004.tif"/>
</fig>
<p>The values of these penalty functions are dynamic, i.e.,&#x20;a larger value is used bigger constraint violations. We first define the <italic>&#x3c1;</italic>
<sub>
<italic>&#x2135;</italic>
</sub> from <xref ref-type="disp-formula" rid="e3">Eq. 3</xref> in detail and then discuss the other two penalties, which are similarly constructed. The relative importance of these penalties are determined by the weights <italic>w</italic>
<sub>2</sub>, <italic>w</italic>
<sub>3</sub> and <italic>w</italic>
<sub>3</sub>. <italic>&#x3c1;</italic>
<sub>
<italic>&#x2135;</italic>
</sub> in <xref ref-type="disp-formula" rid="e3">Eq. 3</xref>, measures the weighted average of end-to-end violation. The violation of a chain <italic>&#x2135;</italic>
<sub>
<italic>i</italic>
</sub> is defined as the difference between its highest observed chain latency <italic>l</italic>
<sub>
<italic>i</italic>
</sub> and its end-to-end constraint <italic>L</italic>
<sub>
<italic>i</italic>
</sub>.<disp-formula id="e3">
<mml:math id="m37">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:munder>
<mml:mfrac>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x22c5;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
<label>(3)</label>
</disp-formula>
</p>
<p>If <italic>l</italic>
<sub>
<italic>i</italic>
</sub> is smaller or equal to <italic>L</italic>
<sub>
<italic>i</italic>
</sub> then the chain constraint is satisfied and the term is zero. We discuss here the case when the constraint is not satisfied, i.e.,&#x20;<italic>l</italic>
<sub>
<italic>i</italic>
</sub> &#x3e; <italic>L</italic>
<sub>
<italic>i</italic>
</sub>. When <italic>l</italic>
<sub>
<italic>i</italic>
</sub> &#x3e; <italic>L</italic>
<sub>
<italic>i</italic>
</sub> the <italic>max</italic> operator will return <italic>l</italic>
<sub>
<italic>i</italic>
</sub> &#x2212; <italic>L</italic>
<sub>
<italic>i</italic>
</sub>. To normalize the penalty value, we clamp any observed violation <italic>l</italic>
<sub>
<italic>i</italic>
</sub> &#x2212; <italic>L</italic>
<sub>
<italic>i</italic>
</sub> to the interval [0, <italic>L</italic>
<sub>
<italic>i</italic>
</sub>] using the <italic>min</italic> operator and divide by <italic>L</italic>
<sub>
<italic>i</italic>
</sub>, hence the term in the summation will be in the interval [0, 1]. We divide the sum with the number&#x20;of chains <inline-formula id="inf35">
<mml:math id="m38">
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:math>
</inline-formula> and then multiply with the static weight <italic>w</italic>
<sub>2</sub>. Let us illustrate this with the example in <xref ref-type="fig" rid="F4">Figure&#x20;4B</xref>, where the latency <italic>L</italic>
<sub>
<italic>i</italic>
</sub> &#x3d; 20 for chain <italic>&#x2135;</italic>
<sub>1</sub> is violated, i.e.,&#x20;<italic>l</italic>
<sub>
<italic>i</italic>
</sub> &#x3d; 23. Hence, <inline-formula id="inf36">
<mml:math id="m39">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>20</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0,23</mml:mn>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>20</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mn>20</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x22c5;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>20</mml:mn>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x22c5;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>.</p>
<p>Likewise, the additional deadline and jitter costs (<italic>&#x3c1;</italic>
<sub>
<italic>D</italic>
</sub> and <italic>&#x3c1;</italic>
<sub>
<italic>J</italic>
</sub>) is listed by <xref ref-type="disp-formula" rid="e4">Eqs. 4</xref>, <xref ref-type="disp-formula" rid="e5">5</xref>, respectively. Here <italic>&#x3c1;</italic>
<sub>
<italic>D</italic>
</sub> measures the weighted average of deadline violations with a violation range clamped in the interval [0, <italic>D</italic>
<sub>
<italic>i</italic>
</sub>]. The deadline violation of a task or flow <italic>i</italic> is denoted as the difference between the maximal relative finishing time of all of <italic>i</italic>&#x2019;s instances <italic>f</italic>
<sub>
<italic>i</italic>
</sub> and the relative deadline <italic>D</italic>
<sub>
<italic>i</italic>
</sub>.<disp-formula id="e4">
<mml:math id="m40">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
</mml:mrow>
</mml:munder>
<mml:mfrac>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x22c5;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>.</mml:mo>
</mml:math>
<label>(4)</label>
</disp-formula>
</p>
<p>Finally, <italic>&#x3c1;</italic>
<sub>
<italic>J</italic>
</sub> measures the weighted average of jitter violations. We define the jitter violation of a task <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub> as the difference between the maximal observed jitter <italic>j</italic>
<sub>
<italic>i</italic>
</sub> and the threshold <italic>J</italic>
<sub>
<italic>i</italic>
</sub>. The violation range is then clamped in the interval [0, <italic>J</italic>
<sub>
<italic>i</italic>
</sub>].<disp-formula id="e5">
<mml:math id="m41">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
</mml:mrow>
</mml:munder>
<mml:mfrac>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x22c5;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:math>
<label>(5)</label>
</disp-formula>
</p>
<p>In <xref ref-type="disp-formula" rid="e2">Eqs. 2</xref>&#x2013;<xref ref-type="disp-formula" rid="e5">5</xref>, we list <italic>w</italic>
<sub>1</sub>, <italic>w</italic>
<sub>2</sub>, <italic>w</italic>
<sub>3</sub> and <italic>w</italic>
<sub>4</sub> as static weights designed to capture the importance of the respective violation with the following constraints: <italic>w</italic>
<sub>2</sub> &#x2265; <italic>w</italic>
<sub>1</sub>, <italic>w</italic>
<sub>3</sub> &#x2265; <italic>w</italic>
<sub>1</sub>, <italic>w</italic>
<sub>4</sub> &#x2265; <italic>w</italic>
<sub>1</sub>. The constants were determined based on manual experimentation and observations, with <italic>w</italic>
<sub>1</sub> through <italic>w</italic>
<sub>4</sub> set to 10,000, 40,000, 10,000, and 60,000, respectively. Please note that there are no optimal values for the weights, since they have to be adapted to the application domain, criticality definitions and design goals of the respective use-case.</p>
</sec>
<sec id="s4-2">
<title>4.2 Metaheuristics</title>
<p>The SA and GA metaheuristics aim to iteratively optimize solutions by randomly changing existing solutions <italic>s</italic> to create new solutions <italic>s</italic>&#x2032; and evaluate them by using the cost function. They take as input the platform model <inline-formula id="inf37">
<mml:math id="m42">
<mml:mi mathvariant="script">A</mml:mi>
</mml:math>
</inline-formula> and the applications &#x393; and return the best solution <italic>s</italic>&#x2a; found according to the cost function. Both start from an initial solution <italic>s</italic>
<sub>0</sub>. Metaheuristics can start from any initial solution, even a random one. However, in our case, we have developed a <italic>Greedy</italic> algorithm to generate the initial solution. With SA and GA the mapping is optimized during the search. With Greedy, the mapping is decided constructively as follows. For each task, considering the processor affinity constraints (that restrict the mapping to specific processors), we iterate through all cores and identify the core with the lowest utilization. The utilization of a task is its WCET divided by its period. The utilization of core is the sum of all task utilizations on that core. We then map the task to the respective core. This ensures a balanced utilization of cores in the initial solution. Once the mapping is decided, we use the same LS and EDF scheduling heuristics to schedule the tasks and flows, see <xref ref-type="sec" rid="s4-3">Section 4.3</xref> and <xref ref-type="sec" rid="s4-4">Section 4.4</xref>, respectively. However, with Greedy, the input parameters to the scheduling heuristics, such as offsets for both LS and EDF and local deadlines for EDF, are not optimized. Thus, we consider that the offsets are all set to zero and the local deadlines are set to the absolute deadlines.</p>
<sec id="s4-2-1">
<title>4.2.1 Simulated Annealing</title>
<p>We first describe a Simulated Annealing (SA)-based metaheuristic approach, which uses an EDF-based heuristic to solve the task scheduling problem. Simulated Annealing is a heuristic method that aims to optimize solutions by randomly selecting a candidate solution in the neighborhood of the current one (<xref ref-type="bibr" rid="B10">Burke and Kendall, 2005</xref>). The SA algorithm accepts a new neighbor solution if it is better than the current one. Moreover, a worse solution can be accepted with a certain probability given by the cost function <italic>Cost</italic> and the <italic>cooling scheme</italic> defined by an initial temperature, <italic>t</italic>
<sub>
<italic>s</italic>
</sub> and a cooling rate <italic>cr</italic>, specifying the rate at which the temperature drops with each iteration.</p>
<p>A new candidate solution <italic>s</italic>&#x2032; (also called neighbor) is generated starting from the current solution <italic>s</italic> by performing design transformations (also called <italic>moves</italic>) on <italic>s</italic>. We use three moves, described in the following. <italic>AdjustDeadline</italic> adjusts the deadline of a single randomly selected task. Only tasks that failed at complying with the jitter constraints are potential candidates for this move. Note that the deadlines in <inline-formula id="inf38">
<mml:math id="m43">
<mml:mi mathvariant="script">D</mml:mi>
</mml:math>
</inline-formula> are used to control the resulting EDF schedule. We do not change the relative deadline <italic>D</italic>
<sub>
<italic>i</italic>
</sub> of the task, which is one of its timing constraints. For a task <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub>, AdjustDeadline will modify the deadline used by EDF to schedule <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub>, such that it is lower or equal to <italic>D</italic>
<sub>
<italic>i</italic>
</sub>. We check for each resulted schedule that all timing constraints are satisfied. <italic>SwapTasks</italic> swaps the core mapping of two randomly selected tasks, considering the imposed mapping constraints. For example, if the task has a processor affinity, the swapping is done within the cores of the particular processor. Only tasks that are allowed to swap are considered, meaning only tasks without a predefined core assignment. Offset and Deadline adjustments are reset to zero for both tasks when performing this action. Finally, the utilization/core load is not considered, and as such, this action might overload one of the cores. <italic>AdjustOffset</italic> changes the offset of a randomly selected task or&#x20;flow.</p>
<p>The function that generates neighbor solutions is implemented as a simple state machine, allowing moves mentioned earlier to be chosen randomly. Various probability assignments for these moves were tried, and, based on observations from performed experiments, a uniform distribution has been chosen for all actions.</p>
</sec>
<sec id="s4-2-2">
<title>4.2.2 Genetic Algorithm</title>
<p>GA is a multi-objective optimization heuristic inspired by evolutionary biology (<xref ref-type="bibr" rid="B17">Deb et&#x20;al., 2000</xref>). We 1) encode each solution (<italic>chromosome</italic>) as an array where each entry (<italic>gene</italic>) contains information on the mapping, offset and deadline of a task/flow and 2) randomly initialize <italic>N</italic> <italic>individuals</italic>. We then 3) evolve some selected candidates by using 4) recombination and 5) mutation. Finally, 6) the evolved candidates with better <italic>fitness</italic> will replace the parent population. As mentioned, GA is a multi-objective metaheuristic. This means that the <italic>fitness</italic> is captured with several cost function values, i.e.,&#x20;<italic>&#x3c1;</italic>
<sub>
<italic>&#x2135;</italic>
</sub> for chains, <italic>&#x3c1;</italic>
<sub>
<italic>D</italic>
</sub> for deadlines and <italic>&#x3c1;</italic>
<sub>
<italic>J</italic>
</sub> for jitter constraints, see the discussion in <xref ref-type="sec" rid="s4-1">Section 4.1</xref>. This is in contrast to SA, which collapses all these terms into a single cost function value, as defined in <xref ref-type="disp-formula" rid="e2">Eq. (2)</xref>. Steps 3) to 6) are repeated until the allotted time is exhausted.</p>
<p>Several crossover operators have been proposed in the literature, and we have implemented: uniform order-based crossover (OX), (OX) using 2-point and using 1-point approaches (<xref ref-type="bibr" rid="B58">Syswerda, 1991</xref>), Partially-Mapped Crossover (<xref ref-type="bibr" rid="B28">Goldberg and Lingle, 1985</xref>), Cycle-Based Crossover (<xref ref-type="bibr" rid="B27">Goldberg and Lingle, 1987</xref>) and Alternating-Position Crossover (<xref ref-type="bibr" rid="B37">Larranaga et&#x20;al., 1997</xref>). Based on our experiments, we have decided to employ a standard uniform crossover. Regarding mutation, for each gene in the chromosome, we compare a randomly generated number with a &#x201c;probability of mutation&#x201d;, and if this number is smaller, then this position is mutated. The probability of mutation has been determined using ParamILS (<xref ref-type="bibr" rid="B32">Hutter et&#x20;al., 2009</xref>) as discussed in <xref ref-type="sec" rid="s5">Section 5</xref>. To select parents, we sort the &#x201c;population&#x201d; using the &#x201c;non-dominated&#x201d; sorting method from (<xref ref-type="bibr" rid="B17">Deb et&#x20;al., 2000</xref>). Half the population is kept as parents, and to create new individuals, two random parents are picked until all individuals have been created.</p>
</sec>
</sec>
<sec id="s4-3">
<title>4.3 Joint Flow and Task Scheduling</title>
<p>One approach to the task and flow scheduling problem is to solve the problems separately and then fit them together. This is a reasonable approach when the two sub-problems do not form a circular dependency. In our case, however, the two scheduling problems are closely linked together. Let us consider the example in <xref ref-type="fig" rid="F5">Figure&#x20;5</xref>, where we have a topology of three end systems (<italic>ES</italic>
<sub>1</sub> to <italic>ES</italic>
<sub>3</sub>) and one switch (<italic>SW</italic>
<sub>1</sub>). We have four tasks <italic>&#x3c4;</italic>
<sub>
<italic>A</italic>
</sub>, <italic>&#x3c4;</italic>
<sub>
<italic>B</italic>
</sub>, <italic>&#x3c4;</italic>
<sub>
<italic>C</italic>
</sub>, and <italic>&#x3c4;</italic>
<sub>
<italic>D</italic>
</sub> with precedence constraints [<italic>&#x3c4;</italic>
<sub>
<italic>A</italic>
</sub> &#x227a; <italic>&#x3c4;</italic>
<sub>
<italic>B</italic>
</sub> &#x227a; <italic>&#x3c4;</italic>
<sub>
<italic>C</italic>
</sub> &#x227a; <italic>&#x3c4;</italic>
<sub>
<italic>D</italic>
</sub>] that form a chain. <italic>&#x3c4;</italic>
<sub>
<italic>A</italic>
</sub> needs to be executed on <italic>ES</italic>
<sub>1</sub>, <italic>&#x3c4;</italic>
<sub>
<italic>B</italic>
</sub> on <italic>ES</italic>
<sub>2</sub> and <italic>&#x3c4;</italic>
<sub>
<italic>C</italic>
</sub> and <italic>&#x3c4;</italic>
<sub>
<italic>D</italic>
</sub> on <italic>ES</italic>
<sub>3</sub>. Task <italic>&#x3c4;</italic>
<sub>
<italic>A</italic>
</sub> sends a message to <italic>&#x3c4;</italic>
<sub>
<italic>B</italic>
</sub>, and <italic>&#x3c4;</italic>
<sub>
<italic>B</italic>
</sub> sends a message to <italic>&#x3c4;</italic>
<sub>
<italic>C</italic>
</sub>. For illustration purposes, the task WCETs and the transmission times of message frames on links are a single time unit, and network precision and macrotick are ignored. The period of all tasks is 8&#x20;time units, and the chain latency is also 8 time&#x20;units.</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption>
<p>Scheduling approaches, <bold>(A)</bold> is a schedule where flows 1 and 2 are scheduled before taking tasks into account, <bold>(B)</bold> is the optimized scenario where task and flows are scheduled concurrently.</p>
</caption>
<graphic xlink:href="frobt-08-762227-g005.tif"/>
</fig>
<p>If the messages are scheduled first, then the solution of the flow would look as shown in <xref ref-type="fig" rid="F5">Figure&#x20;5A</xref>. This schedule minimizes the flow latencies, but since task <italic>&#x3c4;</italic>
<sub>
<italic>B</italic>
</sub> must receive message 1 and send message 2, the schedule contains a lot of idle time; hence, the chain latency becomes 13&#x20;time units. Note that messages 1 and 2 scheduled at the beginning of the schedule are sent by tasks <italic>&#x3c4;</italic>
<sub>
<italic>A</italic>
</sub> and <italic>&#x3c4;</italic>
<sub>
<italic>B</italic>
</sub> from the previous period. The same issue exists if the tasks are scheduled without any knowledge of the network. However, if both task scheduling and message scheduling are optimized concurrently, then an optimized solution, shown in <xref ref-type="fig" rid="F5">Figure&#x20;5B</xref>, can be produced. This reduces the chain latency substantially to 8&#x20;time units from 13 in <xref ref-type="fig" rid="F5">Figure&#x20;5A</xref>, meeting thus the task chain latency constraint.</p>
<p>In this section, we propose a joint flow and task scheduling heuristic based on List Scheduling (LS) (<xref ref-type="bibr" rid="B55">Sinnen, 2007</xref>). LS is a widely used task scheduling heuristic that is known to obtain good quality solutions when determining static schedules for tasks on multiprocessors. We have re-purposed LS for jointly scheduling flows and tasks. Our LS is inspired by the individual flow scheduling heuristic from (<xref ref-type="bibr" rid="B51">Raagaard and Pop, 2017</xref>), which uses variants of ASAP (As Soon As Possible) and ALAP (As Late As Possible) scheduling. Both of these are a special case of the List Scheduling heuristic (<xref ref-type="bibr" rid="B55">Sinnen, 2007</xref>). Our LS is more general, scheduling both flows and tasks. This LS can use offset and ordering parameters to control the placement of frames, which is not considered in (<xref ref-type="bibr" rid="B51">Raagaard and Pop, 2017</xref>).</p>
<p>LS receives as input the architecture <inline-formula id="inf39">
<mml:math id="m44">
<mml:mi mathvariant="script">A</mml:mi>
</mml:math>
</inline-formula>, applications &#x393; and the solution <italic>s</italic> generated by the outer metaheuristic, containing the mapping <italic>M</italic>, offsets <italic>&#x3d5;</italic> and deadlines <inline-formula id="inf40">
<mml:math id="m45">
<mml:mi mathvariant="script">D</mml:mi>
</mml:math>
</inline-formula>. LS returns a partial schedule table <inline-formula id="inf41">
<mml:math id="m46">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> covering the hyperperiod of &#x393; and including all flows and those communicating tasks involved in sending and receiving the flows. The joint scheduling is achieved by adding those tasks involved in communication as &#x201c;virtual flows&#x201d; and the cores where they are mapped for execution as &#x201c;virtual links&#x201d;. Then, precedence constraints are added to ensure that a frame cannot be sent before its sending task has finished executing, and a receiving task cannot start before its input frames have arrived. Hence, in the following, flows and links also denote tasks and cores, respectively. Note that not all tasks are involved in the communication over TSN. Tasks that are not sending/receiving flows are added to the schedule in a subsequent step using the EDF-based heuristic from <xref ref-type="sec" rid="s4-4">Section&#x20;4.4</xref>.</p>
<p>
<statement content-type="algorithm" id="alg1">
<label>Algorithm 1</label>
<p>ScheduleFlow (<italic>&#x3b8;</italic>, <italic>&#x3d5;</italic>). Schedules a flow <italic>&#x3b8;</italic> as soon as possible (ASAP), considering its offset <italic>&#x3d5;</italic> given by the metaheuristic. All frames in the flow have initialized lower and upper bounds to &#x2212; <italic>&#x221e;</italic>, <italic>&#x221e;</italic>, respectively.<inline-graphic xlink:href="frobt-08-762227-fx1.tif"/>
</p>
<p>Similar to (<xref ref-type="bibr" rid="B51">Raagaard and Pop, 2017</xref>), LS starts with an empty timeline and iteratively schedules one flow at a time. The metaheuristic specifies the order in which flows are chosen. Similar to (<xref ref-type="bibr" rid="B51">Raagaard and Pop, 2017</xref>), the flows are chosen according to their deadlines since flows with tight deadlines are the hardest to schedule and therefore should be picked first. The tie-breaker for the ordering is given by the flow period. Each flow is scheduled using the ScheduleFlow procedure in <xref ref-type="other" rid="alg1">Algorithm 1</xref> such that the end-to-end latency is minimized. The termination condition for the LS is that either a schedule has been found for all flows or the current iteration does not produce a feasible schedule with respect to the flow deadline.</p>
<p>We now examine the steps of <xref ref-type="other" rid="alg1">Algorithm 1</xref> in more detail. In step 1 frames are retrieved in the order given by <xref ref-type="disp-formula" rid="e7">Eq. 7</xref>, see <xref ref-type="sec" rid="s4-3-3">Section 4.3.3</xref> for an explanation of how the next frame is determined. In step 3, the frame offset <italic>&#x3d5;</italic> is set to the earliest time in a <italic>feasible region</italic>, greater than the <italic>lower bound</italic>, determined in step 2. <xref ref-type="sec" rid="s4-3-2">Section 4.3.2</xref> and <xref ref-type="sec" rid="s4-3-1">Section 4.3.1</xref> present how we define and determine the feasible regions and the lower bound, respectively. If the algorithm reaches a state where a frame cannot be scheduled, e.g., there is not enough space, then it needs to find another solution. This search is done by backtracking: In step 4 backtracking is done by increasing the lower bound to the latest available time which is less than the frame offset found in step 3, then rescheduling the previous frame, see <xref ref-type="sec" rid="s4-3-4">Section&#x20;4.3.4</xref>.</p>
</statement>
</p>
<sec id="s4-3-1">
<title>4.3.1 Lower Bound</title>
<p>The lower bound for the LS algorithm, inspired by (<xref ref-type="bibr" rid="B51">Raagaard and Pop, 2017</xref>), is calculated using <xref ref-type="disp-formula" rid="e6">Eq. 6</xref>. <inline-formula id="inf43">
<mml:math id="m48">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3d5;</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is used as shorthand for <inline-formula id="inf44">
<mml:math id="m49">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mi>&#x3d5;</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mi>L</mml:mi>
</mml:math>
</inline-formula>, and where <italic>&#x3d5;</italic> is the frame offset and <italic>L</italic> is the frame transmission duration. This equation ensures that the assigned offset fulfills the link congestion and flow transmission constraints, i.e.,&#x20;that frames must be fully received before being transmitted. The <italic>link congestion</italic> constraint does not allow two or more frames to be sent on the same link at the same time. The <italic>flow transmission</italic> constraint restricts the sending of a frame to be after the reception and buffering of that frame in the switch. The link congestion and flow transmission constraints result in a minimum possible end-to-end latency for flows. This lower bound is influenced by the route of the flow as well as the flow characteristics. The following equation, introduced in (<xref ref-type="bibr" rid="B51">Raagaard and Pop, 2017</xref>), captures the lower bound on <inline-formula id="inf45">
<mml:math id="m50">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>, when considering the previous frame on the same link, <inline-formula id="inf46">
<mml:math id="m51">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>, and the same frame on the previous link, <inline-formula id="inf47">
<mml:math id="m52">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>.<disp-formula id="e6">
<mml:math id="m53">
<mml:munder accentunder="false">
<mml:mrow>
<mml:mi>&#x3d5;</mml:mi>
</mml:mrow>
<mml:mo accent="true">&#x332;</mml:mo>
</mml:munder>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mi>&#x3d5;</mml:mi>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">f</mml:mi>
<mml:mi>m</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>&#x2227;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3d5;</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">f</mml:mi>
<mml:mi>m</mml:mi>
<mml:mo>&#x3e;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>&#x2227;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3d5;</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3b4;</mml:mi>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">f</mml:mi>
<mml:mi>m</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>&#x2227;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
<mml:mo>&#x2260;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mi>max</mml:mi>
<mml:mfenced open="(" close="">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3d5;</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mspace width="1em"/>
<mml:mfenced open="" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3d5;</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3b4;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi mathvariant="normal">O</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mi mathvariant="normal">h</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">r</mml:mi>
<mml:mi mathvariant="normal">w</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(6)</label>
</disp-formula>
</p>
</sec>
<sec id="s4-3-2">
<title>4.3.2 Feasible Regions</title>
<p>When a flow is scheduled, each frame will <italic>block</italic> those queues and the network links where it is scheduled. The <italic>feasible region</italic> for a frame, similar to (<xref ref-type="bibr" rid="B51">Raagaard and Pop, 2017</xref>), is a set of intervals where the frame can be scheduled without violating the feasibility of the existing partial schedule. The algorithm relies on feasible regions to find out where the frames can be scheduled without interfering with other frames. Since frames can have different periods, this complicates the search for space where the frame can be scheduled.</p>
<p>We introduce two operations that the feasible region implement, i.e.,&#x20;queue <italic>blocking</italic>, and <italic>searching</italic> for the feasible region of a frame. <italic>Blocking</italic> is used when a frame is scheduled in a known feasible region, and <italic>searching</italic> is used when the algorithm is searching for an appropriate place for a frame. <italic>Blocking</italic> happens at most once for every flow scheduled, while <italic>searching</italic> can happen several times, depending on how hard it is to schedule a frame. In order to minimize the time in search, the following method of constructing the feasible regions is&#x20;used.</p>
<p>If a frame <inline-formula id="inf48">
<mml:math id="m54">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> is scheduled on the network, then it will block the egress queue <inline-formula id="inf49">
<mml:math id="m55">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mi>&#x3c1;</mml:mi>
</mml:math>
</inline-formula> from <inline-formula id="inf50">
<mml:math id="m56">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mi>&#x3d5;</mml:mi>
</mml:math>
</inline-formula> to <inline-formula id="inf51">
<mml:math id="m57">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mi>&#x3d5;</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mi>L</mml:mi>
</mml:math>
</inline-formula>. When we need to determine if a frame of another period interferes with the other frame, we have to check that it does not interfere in the whole hyperperiod. Instead of determining this each time we have to check for a new frame, we create a feasible region for each different period in the network. The feasible regions of other periods are then blocked using the BlockQueues procedure from <xref ref-type="other" rid="alg2">Algorithm&#x20;2</xref>.</p>
<p>
<statement content-type="algorithm" id="alg2">
<label>Algorithm 2</label>
<p>BlockQueues<inline-formula id="inf52">
<mml:math id="m58">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. Procedure for blocking time slots inside the feasible regions for a frame instance <italic>&#x3b8;</italic>
<sub>
<italic>i</italic>,<italic>m</italic>
</sub> on a link [<italic>v</italic>
<sub>
<italic>a</italic>
</sub>, <italic>v</italic>
<sub>
<italic>b</italic>
</sub>]<inline-graphic xlink:href="frobt-08-762227-fx2.tif"/>
</p>
<p>Step 4 of Alg. 2 does the queue blocking. It takes a <italic>start</italic>, <italic>end</italic>, and a frame, and blocks the frame&#x2019;s queue and link in that interval, where mod is the modulo operator. If <italic>start</italic> &#x3e; <italic>end</italic>, then the queue is blocked in the intervals [0, <italic>end</italic>[ and [<italic>start</italic>, <italic>Q</italic>
<sub>
<italic>T</italic>
</sub>], where <italic>Q</italic>
<sub>
<italic>T</italic>
</sub> is the period of the queue. An example of the blocking is illustrated in <xref ref-type="fig" rid="F6">Figure&#x20;6</xref>, where we show on a link [<italic>v</italic>
<sub>
<italic>a</italic>
</sub>, <italic>v</italic>
<sub>
<italic>b</italic>
</sub>] how the feasible region of a frame instance <italic>&#x3b8;</italic>
<sub>
<italic>i</italic>,<italic>m</italic>
</sub> is blocked. Let us assume that an earlier frame in the same queue and link had a period of 10&#xa0;<italic>ms</italic> and our frame&#x2019;s period is <italic>&#x3b8;</italic>
<sub>
<italic>i</italic>,<italic>m</italic>
</sub>.<italic>T</italic>&#x20;&#x3d; 15&#xa0;<italic>ms</italic>. Both frames have an offset of 2&#xa0;<italic>ms</italic> and their transmission times are 1&#xa0;<italic>ms</italic>. Frame instance <italic>&#x3b8;</italic>
<sub>
<italic>i</italic>,<italic>m</italic>
</sub> cannot use the time slots where the earlier frame has been scheduled, at every 10&#xa0;<italic>ms</italic>, the first row in <xref ref-type="fig" rid="F6">Figure&#x20;6</xref>. In addition, we also need to block those times where, if <italic>&#x3b8;</italic>
<sub>
<italic>i</italic>,<italic>m</italic>
</sub> is scheduled periodically with a period of 15, runs the risk of conflicting with the other frame with a period of 10. For example, <italic>&#x3b8;</italic>
<sub>
<italic>i</italic>,<italic>m</italic>
</sub> cannot be scheduled at time 7, because its next occurrence at 7 &#x2b; 15&#x20;&#x3d; 22 would conflict with the other frame that periodically is scheduled every 10&#xa0;<italic>ms</italic> with an offset of 2, i.e.,&#x20;2 &#x2b; 10&#x20;&#x2b; 10&#x20;&#x3d; 22. The second row in <xref ref-type="fig" rid="F6">Figure&#x20;6</xref> shows the times blocked by <xref ref-type="other" rid="alg2">Algorithm 2</xref> for our example with two frames.</p>
</statement>
</p>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption>
<p>Blocking times of a frame with a period of 15&#xa0;<italic>ms</italic> considering another frame with a period of 10&#xa0;<italic>ms</italic> over their hyperperiod.</p>
</caption>
<graphic xlink:href="frobt-08-762227-g006.tif"/>
</fig>
</sec>
<sec id="s4-3-3">
<title>4.3.3 Getting the Next Frame</title>
<p>The LS heuristic schedules the frames in the order specified by <xref ref-type="disp-formula" rid="e7">Eq. 7</xref>:<disp-formula id="e7">
<mml:math id="m60">
<mml:mi mathvariant="normal">N</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mi mathvariant="normal">F</mml:mi>
<mml:mi mathvariant="normal">r</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">m</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mtext>LCL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">f</mml:mi>
<mml:mspace width="0.17em"/>
<mml:mspace width="0.17em"/>
<mml:mi mathvariant="normal">b</mml:mi>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mi mathvariant="normal">N</mml:mi>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mo>&#x2227;</mml:mo>
<mml:mi mathvariant="normal">b</mml:mi>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mi mathvariant="normal">S</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mtext>FNL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">f</mml:mi>
<mml:mspace width="0.17em"/>
<mml:mspace width="0.17em"/>
<mml:mi mathvariant="normal">b</mml:mi>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mi mathvariant="normal">N</mml:mi>
<mml:mi mathvariant="normal">L</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>NL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mi mathvariant="normal">h</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">r</mml:mi>
<mml:mi mathvariant="normal">w</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(7)</label>
</disp-formula>where <italic>LCL</italic> is the last &#x201c;virtual link&#x201d; (core), <italic>FNL</italic> is the first network link, <italic>NL</italic> is the next link, <italic>bLNL</italic> is true when frame is on the last network link, and <italic>bLS</italic> is true if the frame is the last frame in the flow. The NextFrame function is valid for all frames except the last &#x201c;virtual frame&#x201d;, where <italic>NextLink</italic> is not defined.</p>
<p>LS starts from the first &#x201c;virtual frame&#x201d; (sender task), and goes through each frame and ends with the last &#x201c;virtual frame&#x201d; (receiving task). The idea is to allow backtracking only to change the last scheduled frame. We illustrate an ordering in <xref ref-type="fig" rid="F7">Figure&#x20;7</xref>, where the order is indicated in parenthesis inside the rectangles representing tasks and frames. In <xref ref-type="fig" rid="F7">Figure&#x20;7</xref> we have a setup where a task <italic>&#x3c4;</italic>
<sub>1</sub> on <italic>ES</italic>
<sub>1</sub> modeled as a &#x201c;virtual frame&#x201d; on the &#x201c;virtual link&#x201d; [<italic>ES</italic>
<sub>1</sub>, <italic>ES</italic>
<sub>1</sub>] sends a flow <italic>&#x3a6;</italic>
<sub>1</sub> of size 3xMTU, which hence has to be split in three frames <italic>&#x3b8;</italic>
<sub>1</sub>.1, <italic>&#x3b8;</italic>
<sub>1</sub>.2 and <italic>&#x3b8;</italic>
<sub>1</sub>.3, to a task <italic>&#x3c4;</italic>
<sub>2</sub> on&#x20;<italic>ES</italic>
<sub>2</sub>.</p>
<fig id="F7" position="float">
<label>FIGURE 7</label>
<caption>
<p>How tasks and flow frames are scheduled together. The order is indicated by the number in parenthesis.</p>
</caption>
<graphic xlink:href="frobt-08-762227-g007.tif"/>
</fig>
<p>
<xref ref-type="fig" rid="F7">Figure&#x20;7</xref> shows the order in which <xref ref-type="disp-formula" rid="e7">Eq. 7</xref> will visit the frames. Note that by using this order and converting tasks to &#x201c;virtual frames&#x201d; on &#x201c;virtual links&#x201d; we can treat the tasks and frames together and schedule them jointly. Thus, the frames <italic>&#x3c4;</italic>
<sub>1</sub> and <italic>&#x3c4;</italic>
<sub>2</sub> on &#x201c;virtual links&#x201d; [<italic>ES</italic>
<sub>1</sub>, <italic>ES</italic>
<sub>1</sub>] and [<italic>ES</italic>
<sub>2</sub>, <italic>ES</italic>
<sub>2</sub>], respectively, are &#x201c;virtual frames&#x201d; (tasks), hence they are scheduled as tasks without concern for MTU-size limits. However, the flow <italic>&#x3a6;</italic>
<sub>1</sub> has to be split into frames <italic>&#x3b8;</italic>
<sub>1</sub>.1 to <italic>&#x3b8;</italic>
<sub>1</sub>.3, which are then scheduled as frames on the physical links. The idle times in the schedule in <xref ref-type="fig" rid="F7">Figure&#x20;7</xref> between each frame are due to the link granularity and synchronization, which have been considered for this example.</p>
</sec>
<sec id="s4-3-4">
<title>4.3.4 Backtracking</title>
<p>When the LS heuristic schedules a frame instance <italic>&#x3b8;</italic>
<sub>
<italic>i</italic>,<italic>m</italic>
</sub>, it sets the upper bound of the frame instance <inline-formula id="inf54">
<mml:math id="m61">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">NL</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3d5;</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> on the next link <italic>NL</italic> to the latest time available in the queue of the next link <italic>NL</italic>. When we schedule the frame instance <inline-formula id="inf55">
<mml:math id="m62">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">NL</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> there can be two situations, visualized in <xref ref-type="fig" rid="F8">Figures 8A,B</xref>. In <xref ref-type="fig" rid="F8">Figure&#x20;8</xref> we show the previous <italic>link</italic> where the frame instance <italic>&#x3b8;</italic>
<sub>
<italic>i</italic>,<italic>m</italic>
</sub> was transmitted, and the next link <italic>NL</italic> where the frame instance <inline-formula id="inf56">
<mml:math id="m63">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">NL</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> has to be transmitted next. On the link <italic>NL</italic> we show with hatched rectangles the times where <inline-formula id="inf57">
<mml:math id="m64">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">NL</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> cannot be transmitted, e.g., because other frames are being transmitted.</p>
<fig id="F8" position="float">
<label>FIGURE 8</label>
<caption>
<p>Visualization of lower bound and upper bounds. The hatched areas are already filled by other frames, such that the non-hatched areas form the feasible region. <bold>(A)</bold> Case where the next frame can be scheduled in the feasible region. <bold>(B)</bold> Case where there is not enough space is available to schedule the frame and backtracking will be used to move the frame forward.</p>
</caption>
<graphic xlink:href="frobt-08-762227-g008.tif"/>
</fig>
<p>Case (1) is when we have enough space to send <inline-formula id="inf58">
<mml:math id="m65">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">NL</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> on <italic>NL</italic>, depicted in <xref ref-type="fig" rid="F8">Figure&#x20;8A</xref>. The frame can then be placed into the queue as early as the constraints allow. Conversely, case (2), is when there is not enough space for the frame on <italic>NL</italic>, as shown in <xref ref-type="fig" rid="F8">Figure&#x20;8B</xref>. In this case, we use <italic>backtracking</italic>. We first need to check later times on <italic>NL</italic> when there is space to transmit <inline-formula id="inf59">
<mml:math id="m66">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">NL</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>. This is achieved by increasing the lower bound of <italic>&#x3b8;</italic>
<sub>
<italic>i</italic>,<italic>m</italic>
</sub> on the previous link such that <inline-formula id="inf60">
<mml:math id="m67">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">NL</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> will have to be delayed, i.e.,&#x20;scheduled at a later time. If we are unsuccessful in pushing <inline-formula id="inf61">
<mml:math id="m68">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">NL</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> later, we need to push also <italic>&#x3b8;</italic>
<sub>
<italic>i</italic>,<italic>m</italic>
</sub> later, which is achieved by going back on the links where <italic>&#x3b8;</italic>
<sub>
<italic>i</italic>,<italic>m</italic>
</sub> was transmitted, and delaying the frames. This is the backtracking process, which continues going back on the previous links and delaying the frames until we are able to find space for all of them. If such a space cannot be found, it means that the frame cannot be scheduled, hence this solution is infeasible. The metaheuristics will hopefully then guide the search in their outer loop to other solutions where the frame can be scheduled.</p>
</sec>
</sec>
<sec id="s4-4">
<title>4.4 EDF Simulation for Schedule Synthesis</title>
<p>The List Scheduling heuristic from <xref ref-type="sec" rid="s4-3">Section 4.3</xref> has scheduled all the flows and the corresponding communicating tasks, resulting in a partial schedule <inline-formula id="inf62">
<mml:math id="m69">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. We propose the EDF-based heuristic in <xref ref-type="other" rid="alg3">Algorithm 3</xref> for scheduling the rest of the non-communicating tasks and optimizing the schedule. <italic>EDFScheduleSynthesis</italic> receives as input the architecture <inline-formula id="inf63">
<mml:math id="m70">
<mml:mi mathvariant="script">A</mml:mi>
</mml:math>
</inline-formula>, applications &#x393; the partial solution <italic>s</italic> containing the mapping <italic>M</italic>, offsets <italic>&#x3d5;</italic>, deadlines <inline-formula id="inf64">
<mml:math id="m71">
<mml:mi mathvariant="script">D</mml:mi>
</mml:math>
</inline-formula> and partial schedule <inline-formula id="inf65">
<mml:math id="m72">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. The schedule synthesis heuristic from <xref ref-type="other" rid="alg3">Algorithm 3</xref> is based on <italic>simulating</italic> Earliest Deadline First (EDF) scheduling, similar to (<xref ref-type="bibr" rid="B16">Craciunas et&#x20;al., 2014</xref>; <xref ref-type="bibr" rid="B3">Barzegaran et&#x20;al., 2020</xref>). EDF is a scheduling algorithm (<xref ref-type="bibr" rid="B11">Buttazzo, 2011</xref>) that prioritizes tasks at each time instant depending on their deadlines, i.e.,&#x20;the one with the earliest deadline will get control of the CPU. Given the task WCETs, offsets, and deadlines, the partial schedule <inline-formula id="inf66">
<mml:math id="m73">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, the complete schedule table <inline-formula id="inf67">
<mml:math id="m74">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula> is generated by simulating how EDF would execute tasks until the hyperperiod. For a given mapping, offsets, and deadlines, EDF will always produce the same schedule. We optimize the schedule produced by the EDF simulation by allowing the metaheuristics in an outer loop to change the mapping <italic>M</italic>, offsets <italic>&#x3d5;</italic>
<sub>
<italic>i</italic>
</sub> of each task <italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub> and deadlines <inline-formula id="inf68">
<mml:math id="m75">
<mml:mi mathvariant="script">D</mml:mi>
</mml:math>
</inline-formula>, and by allowing preemption for the tasks. The EDF simulation is implemented using the <italic>discrete-event simulation</italic> (DES) paradigm, where the operation of a system is seen as a discrete sequence of events in time, and an <italic>event</italic> captures the change of state in the system at a particular moment in&#x20;time.</p>
<p>
<statement content-type="algorithm" id="alg3">
<label>Algorithm 3</label>
<p>EDFScheduleSynthesis<inline-formula id="inf69">
<mml:math id="m76">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="script">A</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. Schedules the tasks that are not involved in the communication on top of the partial schedule <inline-formula id="inf70">
<mml:math id="m77">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> produced by <xref ref-type="other" rid="alg1">Algorithm 1</xref>, creating the final schedule <inline-formula id="inf71">
<mml:math id="m78">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula>
<inline-graphic xlink:href="frobt-08-762227-fx3.tif"/>
</p>
<p>We start by assigning all tasks to their respective cores (step 1 in <xref ref-type="other" rid="alg3">Algorithm 3</xref>). All tasks without a task mapping will be mapped according to a best-fit strategy with respect to utilization, i.e.,&#x20;balancing the processor and core utilization. We run the simulation for a length <italic>l</italic> (set in step 2), after which the schedule will repeat itself. <italic>l</italic> is defined by 2 &#x22c5;<italic>hyperperiod</italic> &#x2b; <italic>MaxOffset</italic>, where hyperperiod is determined as the Least Common Multiple of all tasks in &#x393; and the <italic>MaxOffset</italic> is the maximum over all offsets <italic>&#x3d5;</italic>
<sub>
<italic>i</italic>
</sub> (<xref ref-type="bibr" rid="B38">Leung and Merrill, 1980</xref>). The iteration over the simulation length <italic>l</italic> is done in the steps 6&#x2013;12. The current time is captured by <italic>cycle</italic>, and we advance the time to the <italic>next</italic> event that needs to be simulated.</p>
<p>The EDF simulation is performed per core <italic>&#x3c3;</italic> (step 10), and we use a queue <italic>Q</italic>
<sub>
<italic>&#x3c3;</italic>
</sub> containing all cores from all processors, ordered by the earliest event that needs to be simulated. To start the simulation, steps 3&#x2013;5 add cores to the queue <italic>Q</italic>
<sub>
<italic>&#x3c3;</italic>
</sub>, by visiting all the cores in the architecture&#x20;<inline-formula id="inf75">
<mml:math id="m82">
<mml:mi mathvariant="script">A</mml:mi>
</mml:math>
</inline-formula>.</p>
<p>The next event to be simulated is determined by taking the head of the queue <italic>Q</italic>
<sub>
<italic>&#x3c3;</italic>
</sub> (Dequeue) and calling NextCycle. NextCycle is called for a core <italic>&#x3c3;</italic> and returns the time <italic>cycle</italic> when the next event of interest for scheduling occurs on that core. Our NextCycle implementation skips unnecessary cycles, i.e. when no events of interest to the scheduling occur. It does so by progressing towards the nearest event defined by either releasing a task from the waiting queue, choosing the task with the earliest deadline first from the ready queue, completing a task, or allowing preemption to occur on a certain break point defined by a parameter called <italic>macrotick</italic> for each core. The macrotick defines the preemption granularity. The macrotick is set such that it allows preemption, under the constraint that the overhead due to context switches on each processor should be low, see (<xref ref-type="bibr" rid="B2">Aichouch et&#x20;al., 2013</xref>; <xref ref-type="bibr" rid="B16">Craciunas et&#x20;al., 2014</xref>; <xref ref-type="bibr" rid="B62">Zuepke et&#x20;al., 2015</xref>) for a discussion.</p>
<p>We add cores to be simulated in <italic>Q</italic>
<sub>
<italic>&#x3c3;</italic>
</sub> only if we are still within the simulation length <italic>l</italic>. The algorithm stops when there are no cores to be simulated (<italic>Q</italic>
<sub>
<italic>&#x3c3;</italic>
</sub> is empty). The EDF simulation logic is taking place in the EDFSimulation function, called at line 10, which simulates up to the <italic>next</italic> event, which is returned. The product of EDFScheduleSythesis is then a recording of all occurred events, from which we can derive the schedule table <inline-formula id="inf76">
<mml:math id="m83">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula> of the current solution <italic>s</italic>. As mentioned, LS schedules jointly the flows and those tasks involved in the communication. EDF schedules the tasks not scheduled so far, i.e.,&#x20;those which are not involved in inter-core communication. The EDF algorithm allows task preemption, which in our case means that tasks in the schedule can be split at design-time. This optimizes the schedule table, as the scheduling search space becomes larger and latencies and jitters can be further optimized compared to the case such task splitting is not allowed. In addition, EDF will be allowed to split the communicating tasks already added to the partial schedule <inline-formula id="inf77">
<mml:math id="m84">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> by the LS heuristic if such task splitting will not result in constraint violations.</p>
<p>We illustrate the EDF approach via the example in <xref ref-type="fig" rid="F4">Figure&#x20;4</xref>, consisting of an architecture with a single processor with two cores, <italic>&#x3c3;</italic>
<sub>1</sub> and <italic>&#x3c3;</italic>
<sub>2</sub>, both of which having a macro tick of 1&#xa0;<italic>ms</italic>. The depicted application is modelled by the task set &#x393; &#x3d; {<italic>&#x3c4;</italic>
<sub>1</sub>, <italic>&#x3c4;</italic>
<sub>2</sub>, <italic>&#x3c4;</italic>
<sub>3</sub>}. In this example all tasks have a jitter constraint of 0, meaning that they have to start in each period instance at the same time in relation to the start of the period. The tasks are defined as <italic>&#x3c4;</italic>
<sub>1</sub> &#x3d; (<italic>&#x3c3;</italic>
<sub>0</sub>, 0, <italic>&#x3d5;</italic>
<sub>1</sub>, 4, 10, 10), <italic>&#x3c4;</italic>
<sub>2</sub> &#x3d; (<italic>&#x3c3;</italic>
<sub>0</sub>, 0, <italic>&#x3d5;</italic>
<sub>2</sub>, 1, 4, 4) and <italic>&#x3c4;</italic>
<sub>3</sub> &#x3d; (<italic>&#x3c3;</italic>
<sub>1</sub>, 0, <italic>&#x3d5;</italic>
<sub>3</sub>, 4, 20, 20). Furthermore, the set of task chains is defined by <inline-formula id="inf78">
<mml:math id="m85">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x2135;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>, with <italic>&#x2135;</italic>
<sub>1</sub> &#x3d; ({<italic>&#x3c4;</italic>
<sub>1</sub> &#x227a; <italic>&#x3c4;</italic>
<sub>2</sub> &#x227a; <italic>&#x3c4;</italic>
<sub>3</sub>}, 20, 1.0). Please note, that given Eq. 1, only two chain instances are necessary to validate as the hyperperiod of <italic>&#x2135;</italic>
<sub>1</sub> is 20&#xa0;<italic>ms</italic>, and the period of <italic>&#x3c4;</italic>
<sub>1</sub> is&#x20;10&#xa0;<italic>ms</italic>.</p>
<p>
<xref ref-type="fig" rid="F4">Figure&#x20;4A</xref> depicts a solution, where the jitter and the task chain end-to-end constraints are violated, whereas <xref ref-type="fig" rid="F4">Figure&#x20;4B</xref> shows a valid solution. As seen from <xref ref-type="fig" rid="F4">Figure&#x20;4A</xref>, <italic>&#x3c4;</italic>
<sub>1</sub> violates its jitter constraints, as the start (and end) of execution within its periods varies. This is detected when the events for the respective tasks instances are raised. For example, the event triggering the start of execution with respect to <italic>&#x3c4;</italic>
<sub>1,1</sub> and <italic>&#x3c4;</italic>
<sub>1,2</sub> differs by 1&#xa0;<italic>ms</italic>. While the initial offset <italic>&#x3d5;</italic>
<sub>
<italic>i</italic>
</sub> for all tasks is 0, resulting in <italic>&#x3c4;</italic>
<sub>2,1</sub> and <italic>&#x3c4;</italic>
<sub>3,1</sub> starting their execution first, neither are source tasks with respect to <italic>&#x2135;</italic>
<sub>1</sub>. Moving forward, <italic>&#x3c4;</italic>
<sub>1,1</sub> is started at cycle 1, causing the event to trigger the registration of a task chain instance <italic>&#x2135;</italic>
<sub>1,1</sub>. At cycle 4, <italic>&#x3c4;</italic>
<sub>1,1</sub> is preempted by <italic>&#x3c4;</italic>
<sub>2,2</sub> while <italic>&#x3c4;</italic>
<sub>3,1</sub> completes is execution. Although <italic>&#x3c4;</italic>
<sub>3,1</sub> is a sink task, and a chain instance has been registered, the instance has yet to receive the completion of <italic>&#x3c4;</italic>
<sub>1,1</sub> and <italic>&#x3c4;</italic>
<sub>2,<italic>k</italic>
</sub> before it is accepted. That is, the presence of an event from <italic>&#x3c4;</italic>
<sub>2,<italic>k</italic>
</sub> that happens after <italic>&#x3c4;</italic>
<sub>1,1</sub> must be registered. Subsequently, <italic>&#x3c4;</italic>
<sub>1,1</sub> completes at cycle 5, allowing the <italic>&#x2135;</italic>
<sub>1,1</sub> to advance its state, waiting for <italic>&#x3c4;</italic>
<sub>2,3</sub>. Lastly, <italic>&#x3c4;</italic>
<sub>3,2</sub> finalizes its execution at cycle 23, thus completing <italic>&#x2135;</italic>
<sub>1,1</sub> with a resulting latency of 23, which incidentally violates the given constraints. The chain instance <italic>&#x2135;</italic>
<sub>1,2</sub> is registered at cycle 10, and finalizes at cycle 23, yielding a latency of 14. Given that both latency and jitter constraints have been violated, the product of the EDFScheduleSynthesis is not feasible.</p>
<p>However, in an optimized solution, solving the associated violations can be achieved by manipulating the initial offsets <italic>&#x3d5;</italic>
<sub>
<italic>i</italic>
</sub> for the tasks, as depicted in <xref ref-type="fig" rid="F4">Figure&#x20;4B</xref>. Here, the schedule has been altered such that all executions of <italic>&#x3c4;</italic>
<sub>1</sub> and <italic>&#x3c4;</italic>
<sub>3</sub> have been deferred by <italic>&#x3d5;</italic>
<sub>1</sub> and <italic>&#x3d5;</italic>
<sub>3</sub>. For <italic>&#x3c4;</italic>
<sub>1</sub>, the displacement <italic>&#x3d5;</italic>
<sub>1</sub> solves the jitter constraint violation, because all jobs <italic>&#x3c4;</italic>
<sub>1,<italic>i</italic>
</sub> now start (and end) at the same cycle relative to its period. Finally, <italic>&#x3c4;</italic>
<sub>3</sub> has been displaced by 9 cycles, such that its initial execution allows <italic>&#x3c4;</italic>
<sub>3,1</sub> to catch the events from <italic>&#x3c4;</italic>
<sub>2,3</sub> (and by extension <italic>&#x3c4;</italic>
<sub>1,1</sub>), thus reducing the latency of <italic>&#x2135;</italic>
<sub>1,1</sub>. Likewise, by introducing <italic>&#x3d5;</italic>
<sub>1</sub> for <italic>&#x3c4;</italic>
<sub>1</sub> the latency of <italic>&#x2135;</italic>
<sub>1,1</sub> was reduced even further. The combined effect of <italic>&#x3d5;</italic>
<sub>1</sub> and <italic>&#x3d5;</italic>
<sub>3</sub> is full compliance of all constraints with the resulting latencies of 10 and 20&#xa0;<italic>ms</italic> for <italic>&#x2135;</italic>
<sub>1,1</sub> and <italic>&#x2135;</italic>
<sub>1,2</sub>, respectively.</p>
</statement>
</p>
</sec>
</sec>
<sec id="s5">
<title>5 Experimental Results</title>
<p>We have evaluated the proposed solutions in for both network setups, PCIe in <xref ref-type="sec" rid="s5-1">Section 5.1</xref> and TSN in <xref ref-type="sec" rid="s5-2">Section 5.2</xref>. We have used both realistic test cases and synthetic test cases. The synthetic test cases were generated using a tool developed for this purpose (<xref ref-type="bibr" rid="B44">McLean et&#x20;al., 2019</xref>), which derives the desired task properties from the realistic test cases. The test case generation tool was extended to add TSN flows based on the work from (<xref ref-type="bibr" rid="B14">Craciunas and Serna Oliver, 2016</xref>). All experiments were conducted on a High Performance Computing (HPC) cluster, with each node configured with 2xIntel Xeon Processor 2660v3 (10 cores, 2.60&#xa0;GHz) and 128&#xa0;GB memory. Both SA and GA run on one node at a&#x20;time.</p>
<p>The choice of parameters for the metaheuristics has been done using ParamILS (<xref ref-type="bibr" rid="B32">Hutter et&#x20;al., 2009</xref>), which performs a stochastic search in the parameter space. ParamILS works by giving it a list of possible values for each parameter to be tuned. The list of values was initially chosen on a broad scale, and then if runs seemed to converge, the range was narrowed. Because the different test case sizes have varying difficulty, parameter tuning was done separately for the different test case sizes. For each type of test case, 10 parallel runs were launched with differing seeds so that more solutions could be discovered (<xref ref-type="bibr" rid="B31">Hutter et&#x20;al., 2012</xref>).</p>
<sec id="s5-1">
<title>5.1 Experimental Results for PCIe-Based Systems</title>
<p>As a first experiment, we were interested in determining our proposed SA&#x2019;s ability to find near-optimal solutions. We have implemented an exhaustive search that finds the optimal solution; however, we could only do that for small task sets of less than 10 tasks considering an architecture with two cores. Our SA was able to find the same optimal solution in less than 10&#xa0;s. In the following sets of experiments, determining the efficacy of SA was achieved through a combination of synthetic and realistic test scenarios, benchmarked against two other heuristics: Greedy, presented as the initial solution for the metaheuristics in <xref ref-type="sec" rid="s4-2">Section 4.2</xref> and Genetic Algorithm&#x20;(GA).</p>
<sec id="s5-1-1">
<title>5.1.1 Synthetic Test Cases</title>
<p>We were then interested in determining if using an SA meta-heuristic combined with EDF-simulation is a viable solution for finding feasible schedules when confronted with very large task sets. Thus, we have used five test cases, ranging from 100 to 500% in scale, i.e.,&#x20;for <italic>ADAS1x100%</italic> the application contains 151 tasks and 31 chains using a model of the architecture discussed in <xref ref-type="sec" rid="s2">section 2</xref>, whereas with <italic>ADAS1x200%</italic> the architecture would double the number of processors, tasks and task chains. The results are presented in <xref ref-type="table" rid="T1">Table&#x20;1</xref>, with each row representing the results of a task case. A <italic>test case</italic> is a scenario consisting of 30 synthetically generated task sets, with each undergoing 30 trials (runs of SA and GA on the same test case). Thus a single test case, e.g., <italic>ADAS1x100%</italic>, would conduct 900 trials for each algorithm. As the experiment progresses through each case, the algorithms were given additional time due to an inherent increased complexity of the problem (see the <italic>Time</italic> column).</p>
<table-wrap id="T1" position="float">
<label>TABLE 1</label>
<caption>
<p>Evaluation results on synthetic test&#x20;cases.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th rowspan="3" align="left">Test case</th>
<th rowspan="3" align="center">Time</th>
<th colspan="7" align="center">Greedy</th>
<th colspan="7" align="center">SA</th>
<th colspan="7" align="center">GA</th>
</tr>
<tr>
<th colspan="3" align="center">Chains</th>
<th colspan="3" align="center">Jitter</th>
<th rowspan="2" align="center">Sched.</th>
<th colspan="3" align="center">Chains</th>
<th colspan="3" align="center">Jitter</th>
<th rowspan="2" align="center">Sched.</th>
<th colspan="3" align="center">Chains</th>
<th colspan="3" align="center">Jitter</th>
<th rowspan="2" align="center">Sched.</th>
</tr>
<tr>
<th align="center">
<italic>Min</italic>
</th>
<th align="center">
<italic>Avg</italic>
</th>
<th align="center">
<italic>Max</italic>
</th>
<th align="center">
<italic>Min</italic>
</th>
<th align="center">
<italic>Avg</italic>
</th>
<th align="center">
<italic>Max</italic>
</th>
<th align="center">
<italic>Min</italic>
</th>
<th align="center">
<italic>Avg</italic>
</th>
<th align="center">
<italic>Max</italic>
</th>
<th align="center">
<italic>Min</italic>
</th>
<th align="center">
<italic>Avg</italic>
</th>
<th align="center">
<italic>Max</italic>
</th>
<th align="center">
<italic>Min</italic>
</th>
<th align="center">
<italic>Avg</italic>
</th>
<th align="center">
<italic>Max</italic>
</th>
<th align="center">
<italic>Min</italic>
</th>
<th align="center">
<italic>Avg</italic>
</th>
<th align="center">
<italic>Max</italic>
</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">ADAS1x100%</td>
<td align="center">1&#xa0;h</td>
<td align="center">0.97</td>
<td align="center">0.98</td>
<td align="center">1.00</td>
<td align="center">0.58</td>
<td align="center">0.61</td>
<td align="center">0.68</td>
<td align="char" char=".">1.00</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="char" char=".">1.00</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="char" char=".">1.00</td>
</tr>
<tr>
<td align="left">ADAS1x200%</td>
<td align="center">2&#xa0;h</td>
<td align="center">0.97</td>
<td align="center">0.99</td>
<td align="center">1.00</td>
<td align="center">0.55</td>
<td align="center">0.67</td>
<td align="center">0.75</td>
<td align="char" char=".">1.00</td>
<td align="center">0.98</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="center">0.94</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="char" char=".">1.00</td>
<td align="center">0.98</td>
<td align="center">1.00</td>
<td align="center">1.00</td>
<td align="center">0.71</td>
<td align="center">0.95</td>
<td align="center">1.00</td>
<td align="char" char=".">1.00</td>
</tr>
<tr>
<td align="left">ADAS1x300%</td>
<td align="center">3&#xa0;h</td>
<td align="center">0.97</td>
<td align="center">0.99</td>
<td align="center">1.00</td>
<td align="center">0.52</td>
<td align="center">0.64</td>
<td align="center">0.72</td>
<td align="char" char=".">1.00</td>
<td align="center">0.97</td>
<td align="center">0.99</td>
<td align="center">1.00</td>
<td align="center">0.70</td>
<td align="center">0.87</td>
<td align="center">1.00</td>
<td align="char" char=".">1.00</td>
<td align="center">0.97</td>
<td align="center">0.99</td>
<td align="center">1.00</td>
<td align="center">0.70</td>
<td align="center">0.88</td>
<td align="center">1.00</td>
<td align="char" char=".">1.00</td>
</tr>
<tr>
<td align="left">ADAS1x400%</td>
<td align="center">4&#xa0;h</td>
<td align="center">0.97</td>
<td align="center">0.97</td>
<td align="center">0.98</td>
<td align="center">0.52</td>
<td align="center">0.64</td>
<td align="center">0.73</td>
<td align="char" char=".">1.00</td>
<td align="center">0.97</td>
<td align="center">0.99</td>
<td align="center">1.00</td>
<td align="center">0.69</td>
<td align="center">0.80</td>
<td align="center">0.88</td>
<td align="char" char=".">1.00</td>
<td align="center">0.94</td>
<td align="center">0.99</td>
<td align="center">1.00</td>
<td align="center">0.70</td>
<td align="center">0.81</td>
<td align="center">0.92</td>
<td align="char" char=".">1.00</td>
</tr>
<tr>
<td align="left">ADAS1x500%</td>
<td align="center">5&#xa0;h</td>
<td align="center">0.97</td>
<td align="center">0.98</td>
<td align="center">0.98</td>
<td align="center">0.51</td>
<td align="center">0.62</td>
<td align="center">0.70</td>
<td align="char" char=".">1.00</td>
<td align="center">0.95</td>
<td align="center">0.98</td>
<td align="center">0.99</td>
<td align="center">0.63</td>
<td align="center">0.78</td>
<td align="center">0.86</td>
<td align="char" char=".">1.00</td>
<td align="center">0.95</td>
<td align="center">0.98</td>
<td align="center">1.00</td>
<td align="center">0.64</td>
<td align="center">0.79</td>
<td align="center">0.87</td>
<td align="char" char=".">1.00</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>For each algorithm (Greedy, SA, and GA), we show in the table, under the <italic>Sched.</italic> columns, the percentage of cases (out of the 30 trials) for which the algorithms determine schedulable solutions (all <italic>deadline</italic> constraints are satisfied; 1 means 100%). The columns labeled <italic>Chains</italic> have the percentage of chains out of the total chains, for which the respective algorithm was able to satisfy the end-to-end constraints. Similarly, <italic>Jitter</italic> denotes the percentage of jitter constraints satisfied. These values are presented in terms of minimum, average and maximum considering the 30 runs. Note that the Greedy algorithm is not stochastic and always outputs the same result.</p>
<p>As we can see from <xref ref-type="table" rid="T1">Table&#x20;1</xref>, the Greedy approach has comparatively the worst performance in terms of complying with the constraints. We also see that SA can find schedulable solutions (in terms of deadlines, chains, and jitter constraints) within the allotted time, even when the problem size increases. We see that SA has a drop in finding feasible schedules (from 100% in column <italic>Chains.</italic> for ADAS1x100%, to 63% for ADAS1x500%, and cannot meet the jitter constraints for some of the two largest test cases). We estimate that this is caused by a combination of increased difficulty of the task sets and their constraints, as well the crude method for estimating the time allotted. We observed that both SA and GA obtain similar quality results, with SA being slightly better for smaller test cases and GA doing slightly better for larger test cases. Both metaheuristics (SA and GA) are clearly superior to the mapping heuristic, such as Greedy, when presented with very large task&#x20;sets.</p>
</sec>
<sec id="s5-1-2">
<title>5.1.2 Realistic Test Cases</title>
<p>For the following evaluation, we were interested in the ability of SA to handle realistic test cases. Thus, we have used three test cases, ADAS1 to ADAS3, which are variants of an anonymized realistic task set currently in use in a series-production vehicle. All test cases have 151 tasks and 31 task chains, but with varying jitter, earliest activation, and macrotick constraints. The experiment was set up such that 30 trials were conducted with SA for each test case; the time limit used is in minutes. As we can see from <xref ref-type="table" rid="T2">Table&#x20;2</xref>, SA can find feasible solutions for all test cases. As the test cases get progressively more difficult from ADAS1 to ADAS3, in terms of timing constraints that need to be satisfied, SA retains its ability to find solutions within the allotted time, albeit at a slightly lower rate. By comparison, we see that the percentage of resolved constraints for the Greedy algorithm decreases similarly and fails on all accounts to find feasible schedules that meet&#x20;all the constraints. We have also implemented an approach from the related work (<xref ref-type="bibr" rid="B61">Verucchi et&#x20;al., 2020</xref>), called <italic>DAG</italic>, which constructs a Directed Acyclic Graph (DAG) from the input task set. The constructed DAG can handle the multiple periods of tasks in the task set and encodes the chain constraints. Such a DAG is built on the fly by our approach when constructing a solution. The DAG approach does not consider &#x201c;preemption&#x201d;, i.e.,&#x20;the tasks will not be split when scheduled, and uses List Scheduling instead of EDF for scheduling the DAG. As we can see, the DAG approach from related work is similar to our Greedy approach and significantly under-performs compared to our SA metaheuristic. In addition, it results in fewer jitter constraints satisfied, compared to our Greedy.</p>
<table-wrap id="T2" position="float">
<label>TABLE 2</label>
<caption>
<p>Evaluation results on realistic test&#x20;cases.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th rowspan="2" align="left">Test case</th>
<th rowspan="2" align="center">Time</th>
<th colspan="3" align="center">DAG</th>
<th colspan="3" align="center">Greedy</th>
<th colspan="7" align="center">SA</th>
</tr>
<tr>
<th align="center">Chains</th>
<th align="center">Jitter</th>
<th align="center">Sched.</th>
<th align="center">Chains</th>
<th align="center">Jitter</th>
<th align="center">Sched.</th>
<th colspan="3" align="center">Chains</th>
<th colspan="3" align="center">Jitter</th>
<th align="center">Sched.</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="left"/>
<td align="center">Min</td>
<td align="center">Avg</td>
<td align="center">Max</td>
<td align="center">Min</td>
<td align="center">Avg</td>
<td align="center">Max</td>
</tr>
<tr>
<td align="left">ADAS1</td>
<td align="char" char=".">3.20</td>
<td align="char" char=".">0.90</td>
<td align="char" char=".">0.31</td>
<td align="char" char=".">1.00</td>
<td align="char" char=".">0.81</td>
<td align="char" char=".">0.37</td>
<td align="char" char=".">1.00</td>
<td align="center">0.97</td>
<td align="center">0.99</td>
<td align="center">1.00</td>
<td align="center">0.95</td>
<td align="center">0.99</td>
<td align="center">1.00</td>
<td align="char" char=".">1.00</td>
</tr>
<tr>
<td align="left">ADAS2</td>
<td align="char" char=".">6.40</td>
<td align="char" char=".">0.55</td>
<td align="char" char=".">0.10</td>
<td align="char" char=".">1.00</td>
<td align="char" char=".">0.65</td>
<td align="char" char=".">0.21</td>
<td align="char" char=".">1.00</td>
<td align="center">0.94</td>
<td align="center">0.99</td>
<td align="center">1.00</td>
<td align="center">0.84</td>
<td align="center">0.99</td>
<td align="center">1.00</td>
<td align="char" char=".">1.00</td>
</tr>
<tr>
<td align="left">ADAS3</td>
<td align="char" char=".">13.20</td>
<td align="char" char=".">0.74</td>
<td align="char" char=".">0.10</td>
<td align="char" char=".">1.00</td>
<td align="char" char=".">0.48</td>
<td align="char" char=".">0.21</td>
<td align="char" char=".">1.00</td>
<td align="center">0.84</td>
<td align="center">0.99</td>
<td align="center">1.00</td>
<td align="center">0.74</td>
<td align="center">0.97</td>
<td align="center">1.00</td>
<td align="char" char=".">1.00</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
</sec>
<sec id="s5-2">
<title>5.2 Experimental Results for TSN-Based Systems</title>
<p>In this section, we considered that the communication is done via a TSN backbone. We have used synthetic test cases, for which we generated various TSN networks. We have used three different types of graphs with varying degrees of connectivity. The topologies (mesh, ring, and tree) are shown in <xref ref-type="fig" rid="F9">Figure&#x20;9</xref>.</p>
<fig id="F9" position="float">
<label>FIGURE 9</label>
<caption>
<p>Topologies used for experiments. In each topology, a switch has 3 end systems attached (for tree: Leaf nodes only). <bold>(A)</bold> Mesh topology. <bold>(B)</bold> Ring topology. <bold>(C)</bold> Tree topology with depth &#x3d; 2.</p>
</caption>
<graphic xlink:href="frobt-08-762227-g009.tif"/>
</fig>
<p>The number of end systems, switches, and chains are given in <xref ref-type="table" rid="T3">Table&#x20;3</xref>, similar to the setup used in (<xref ref-type="bibr" rid="B14">Craciunas and Serna Oliver, 2016</xref>), except for the number of chains. For each end system, 16 tasks are created, 8 which communicate and 8 which do not. Each communicating task sends a message to another communicating task. Thus, there will be &#x7c;<italic>ES</italic>&#x7c;&#x22c5; 4 flows in the network. The utilization is set to be 50% for each end system, 25% of which corresponds to communicating tasks and 75% to the rest. Task WCETs are chosen such that they are divisible with the macrotick and fit within the assigned utilization. Message lengths are chosen at random between 84 and 1,542 Bytes. The macrotick of the end systems is set to 250&#xa0;<italic>&#x3bc;</italic>s, and the granularity of the links are set to 1&#xa0;<italic>&#x3bc;</italic>s. The speed of links from end systems to switches is set to 100&#xa0;Mbps and to 1&#xa0;Gbps between switches.</p>
<table-wrap id="T3" position="float">
<label>TABLE 3</label>
<caption>
<p>Number of switches, end systems and chains for each topology and size of test&#x20;case.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Size</th>
<th align="center">Topology</th>
<th align="center">Switches</th>
<th align="center">End systems</th>
<th align="center">Tasks</th>
<th align="center">Chains</th>
<th align="center">Flows</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td rowspan="2" align="left">Small</td>
<td align="left">Mesh, Ring</td>
<td align="char" char=".">2</td>
<td align="char" char=".">4</td>
<td align="center">64</td>
<td align="char" char=".">16</td>
<td align="center">16</td>
</tr>
<tr>
<td align="left">Tree, depth &#x3d; 1</td>
<td align="char" char=".">4</td>
<td align="char" char=".">6</td>
<td align="center">96</td>
<td align="char" char=".">16</td>
<td align="center">24</td>
</tr>
<tr>
<td rowspan="2" align="left">Medium</td>
<td align="left">Mesh, Ring</td>
<td align="char" char=".">4</td>
<td align="char" char=".">16</td>
<td align="center">256</td>
<td align="char" char=".">32</td>
<td align="center">64</td>
</tr>
<tr>
<td align="left">Tree, depth &#x3d; 2</td>
<td align="char" char=".">13</td>
<td align="char" char=".">36</td>
<td align="center">576</td>
<td align="char" char=".">32</td>
<td align="center">144</td>
</tr>
<tr>
<td rowspan="2" align="left">Large</td>
<td align="left">Mesh, Ring</td>
<td align="char" char=".">8</td>
<td align="char" char=".">48</td>
<td align="center">768</td>
<td align="char" char=".">64</td>
<td align="center">192</td>
</tr>
<tr>
<td align="left">Tree, depth &#x3d; 3</td>
<td align="char" char=".">15</td>
<td align="char" char=".">48</td>
<td align="center">768</td>
<td align="char" char=".">64</td>
<td align="center">192</td>
</tr>
<tr>
<td rowspan="2" align="left">Huge</td>
<td align="left">Mesh, Ring</td>
<td align="char" char=".">16</td>
<td align="char" char=".">192</td>
<td align="center">3,072</td>
<td align="char" char=".">128</td>
<td align="center">768</td>
</tr>
<tr>
<td align="left">Tree, depth &#x3d; 2</td>
<td align="char" char=".">43</td>
<td align="char" char=".">432</td>
<td align="center">6,912</td>
<td align="char" char=".">128</td>
<td align="center">1,728</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>We have used three sets of randomly chosen periods, all in milliseconds, <italic>P</italic>1 &#x3d; {10, 20, 25, 50, 100}, <italic>P</italic>2 &#x3d; {10, 30, 100}, and <italic>P</italic>3 &#x3d; {50, 75}. We use the shortest paths for routes. The chains are generated with a maximum task length of 15, and a minimum of 2, and lengths are chosen from a uniform random distribution. Two consecutive tasks in a chain must either be on the same end system or be communicating via the TSN network. In order to compare the performance between the two metaheuristics, 10 runs were performed on each of the test cases for a total of 360 runs for each of the metaheuristics. The time given for each size is as follows. 300&#xa0;s for small test cases, 1,200&#xa0;s for medium, 4,800&#xa0;s for large, and 19,200&#xa0;s for the largest test cases, called &#x201c;huge&#x201d;.</p>
<p>
<xref ref-type="fig" rid="F10">Figure&#x20;10</xref> shows on the <italic>y</italic>-axis the percentage of test cases solved for each size and topology. The results are grouped per topology, mesh, ring, and tree, and for each topology, we use different sets of periods, <italic>P</italic>1 to <italic>P</italic>3. A test case is &#x201c;solved&#x201d; if all the requirements are satisfied. On the <italic>y</italic>-axis, 1 means that 100% of the requirements were satisfied, whereas 0 means that no requirements could be satisfied. On the <italic>x</italic>-axis, we show the type of test case, small, medium, large, and huge. As we can see, our GA and SA solutions can successfully solve all the test cases, except for some of the &#x201c;huge&#x201d; test cases, especially in the tree topologies, where a few requirements could not be satisfied. In those situations, GA performs better than SA. When considering the cost of the solutions (the value of <xref ref-type="disp-formula" rid="e2">Eq. 2</xref>), we noticed that SA is better than GA in terms of the cost function for small, medium, and large test cases. However, in the huge test cases, GA not only is able to find feasible solutions more consistently but is also able to find solutions of lower&#x20;cost.</p>
<fig id="F10" position="float">
<label>FIGURE 10</label>
<caption>
<p>Comparison of SA and GA in terms of percentage of solved solutions, i.e.,&#x20;all the tasks and flows are successfully scheduled and the constraints, e.g., chain latencies, are satisfied.</p>
</caption>
<graphic xlink:href="frobt-08-762227-g010.tif"/>
</fig>
<p>Finally, we were also interested in our approaches&#x2019; ability to find a feasible solution as fast as possible. That is, we wanted to determine what is the earliest time when all the requirements are satisfied. Once such a solution is found, the metaheuristics continue the optimization until the time limit is reached. Hence, we modified SA and GA to return once a feasible solution was found. The runtime results are shown in <xref ref-type="fig" rid="F11">Figure&#x20;11</xref>. The figure shows that when SA can find a feasible solution for a test case, it generally finds it faster than GA. However, there are situations where GA outperforms&#x20;SA.</p>
<fig id="F11" position="float">
<label>FIGURE 11</label>
<caption>
<p>Comparison of SA and GA runtimes when searching for the first feasible solution.</p>
</caption>
<graphic xlink:href="frobt-08-762227-g011.tif"/>
</fig>
</sec>
</sec>
<sec id="s6">
<title>6 Conclusion and Future Work</title>
<p>In this paper, we have considered safety-critical ADAS applications mapped on modern multi-processor platforms. The applications are modeled as a set of communicating software tasks with complex timing requirements, e.g., jitter, deadlines, and end-to-end latency bounds on task chains. We have proposed an optimization strategy that, given the application and platform models, determines a mapping of tasks to the cores of the platform and a static schedule of tasks on each core, such that the timing constraints are satisfied. We have also considered a realistic communication backbone implemented using the IEEE 802.1&#x20;Time-Sensitive Networking standard, and our optimization derives the schedule tables for the TSN messages.</p>
<p>Our optimization strategy uses metaheuristics (Simulated Annealing and Genetic Algorithm) to explore the solution space, combined with a scheduling heuristic to jointly solve the task and message scheduling problem. The experimental evaluation on several realistic and synthetic test cases has demonstrated that our proposed strategy is able to find solutions that meet the timing constraints at a higher rate than traditional approaches and scales with the growing trend of ADAS platforms.</p>
<p>Our evaluation has shown that SA is superior in finding feasible solutions fast and with a lower cost function value compared to GA, whereas GA outperforms SA for very large TSN-based test cases where. As future work, we want to implement a hybrid multi-objective metaheuristic (<xref ref-type="bibr" rid="B8">Blum and Roli, 2008</xref>) that combines SA and GA and considers several optimization objectives, such as reducing the number of task preemptions in order to reduce context switch overhead and reducing the number of switch queues used by the TSN messages.</p>
</sec>
</body>
<back>
<sec id="s7">
<title>Data Availability Statement</title>
<p>The raw data supporting the conclusions of this article will be made available by the authors, without undue reservation.</p>
</sec>
<sec id="s8">
<title>Author Contributions</title>
<p>All authors listed have made a substantial, direct, and intellectual contribution to the work and approved it for publication.</p>
</sec>
<sec id="s9">
<title>Funding</title>
<p>The research presented throughout this paper has partially received funding from the European Community&#x2019;s Horizon 2020 programme under the UP2DATE project (grant agreement 871465).</p>
</sec>
<sec sec-type="COI-statement" id="s10">
<title>Conflict of Interest</title>
<p>Author SC was employed by the company TTTech Computertechnik&#x20;AG.</p>
<p>The remaining authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec sec-type="disclaimer" id="s11">
<title>Publisher&#x2019;s Note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors, and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<ack>
<p>This paper is an extended version of (<xref ref-type="bibr" rid="B42">McLean et&#x20;al., 2020</xref>) based on original technical material contained in a thesis of the first author (<xref ref-type="bibr" rid="B43">McLean, 2019</xref>) which is archived as a technical report (<xref ref-type="bibr" rid="B44">McLean et&#x20;al., 2019</xref>) and extended with material included in a thesis of the second author (<xref ref-type="bibr" rid="B30">Hansen, 2020</xref>).</p>
</ack>
<fn-group>
<fn id="fn1">
<label>1</label>
<p>I.e., tasks that execute on the same core as the tasks in the&#x20;chain</p>
</fn>
</fn-group>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Abdelzaher</surname>
<given-names>T. F.</given-names>
</name>
<name>
<surname>Shin</surname>
<given-names>K. G.</given-names>
</name>
</person-group> (<year>1999</year>). <article-title>Combined Task and Message Scheduling in Distributed Real-Time Systems</article-title>. <source>IEEE Trans. Parallel Distrib. Syst.</source> <volume>10</volume>, <fpage>1179</fpage>&#x2013;<lpage>1191</lpage>. <pub-id pub-id-type="doi">10.1109/71.809575</pub-id> </citation>
</ref>
<ref id="B2">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Aichouch</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Pr&#xe9;votet</surname>
<given-names>J.-C.</given-names>
</name>
<name>
<surname>Nouvel</surname>
<given-names>F.</given-names>
</name>
</person-group> (<year>2013</year>). &#x201c;<article-title>Evaluation of the Overheads and Latencies of a Virtualized RTOS</article-title>,&#x201d; in <conf-name>2013 8th IEEE International Symposium on Industrial Embedded Systems</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>81</fpage>&#x2013;<lpage>84</lpage>. <pub-id pub-id-type="doi">10.1109/sies.2013.6601475</pub-id> </citation>
</ref>
<ref id="B3">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Barzegaran</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Cervin</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Pop</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Performance Optimization of Control Applications on Fog Computing Platforms Using Scheduling and Isolation</article-title>. <source>IEEE Access</source> <volume>8</volume>, <fpage>104085</fpage>&#x2013;<lpage>104098</lpage>. <pub-id pub-id-type="doi">10.1109/access.2020.2999322</pub-id> </citation>
</ref>
<ref id="B4">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Becker</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Dasari</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Mubeen</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Behnam</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Nolte</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>End-to-end Timing Analysis of Cause-Effect Chains in Automotive Embedded Systems</article-title>. <source>J.&#x20;Syst. Architecture</source> <volume>80</volume>, <fpage>1</fpage>. <pub-id pub-id-type="doi">10.1016/j.sysarc.2017.09.004</pub-id> </citation>
</ref>
<ref id="B5">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Becker</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Dasari</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Mubeen</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Behnam</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Nolte</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2016a</year>). &#x201c;<article-title>Synthesizing Job-Level Dependencies for Automotive Multi-Rate Effect Chains</article-title>,&#x201d; in <conf-name>2016 IEEE 22nd International Conference on Embedded and Real-Time Computing Systems and Applications</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>159</fpage>&#x2013;<lpage>169</lpage>. <pub-id pub-id-type="doi">10.1109/rtcsa.2016.41</pub-id> </citation>
</ref>
<ref id="B6">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Becker</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Dasari</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Nicolic</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Akesson</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Nelis</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Nolte</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2016b</year>). &#x201c;<article-title>Contention-free Execution of Automotive Applications on a Clustered many-core Platform</article-title>,&#x201d; in <conf-name>2016 28th Euromicro Conference on Real-Time Systems</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>14</fpage>&#x2013;<lpage>24</lpage>. <pub-id pub-id-type="doi">10.1109/ecrts.2016.14</pub-id> </citation>
</ref>
<ref id="B7">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Biondi</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Di Natale</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Achieving Predictable Multicore Execution of Automotive Applications Using the LET Paradigm</article-title>,&#x201d; in <conf-name>2018 IEEE Real-Time and Embedded Technology and Applications Symposium</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>240</fpage>&#x2013;<lpage>250</lpage>. <pub-id pub-id-type="doi">10.1109/rtas.2018.00032</pub-id> </citation>
</ref>
<ref id="B8">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Blum</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Roli</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2008</year>). &#x201c;<article-title>Hybrid Metaheuristics: an Introduction</article-title>,&#x201d; in <source>Hybrid Metaheuristics</source> (<publisher-name>Springer</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>30</lpage>. <pub-id pub-id-type="doi">10.1007/978-3-540-78295-7_1</pub-id> </citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Bunzel</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2011</year>). <article-title>AUTOSAR - the Standardized Software Architecture</article-title>. <source>Informatik Spektrum</source> <volume>34</volume>, <fpage>79</fpage>&#x2013;<lpage>83</lpage>. <pub-id pub-id-type="doi">10.1007/s00287-010-0506-7</pub-id> </citation>
</ref>
<ref id="B10">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Burke</surname>
<given-names>E. K.</given-names>
</name>
<name>
<surname>Kendall</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2005</year>). <source>Search Methodologies</source>. <publisher-name>Springer</publisher-name>. </citation>
</ref>
<ref id="B11">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Buttazzo</surname>
<given-names>G. C.</given-names>
</name>
</person-group> (<year>2011</year>). <source>Hard Real-Time Computing Systems: Predictable Scheduling Algorithms and Applications (Real-Time Systems Series)</source>. <publisher-name>Springer-Verlag</publisher-name>. </citation>
</ref>
<ref id="B12">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Chetto</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Silly</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Bouchentouf</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>1990</year>). <article-title>Dynamic Scheduling of Real-Time Tasks under Precedence Constraints</article-title>. <source>J.&#x20;Real-Time Syst.</source> <volume>2</volume>, <fpage>181</fpage>&#x2013;<lpage>194</lpage>. <pub-id pub-id-type="doi">10.1007/bf00365326</pub-id> </citation>
</ref>
<ref id="B13">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Choi</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Agrawala</surname>
<given-names>A. K.</given-names>
</name>
</person-group> (<year>2000</year>). &#x201c;<article-title>Scheduling of Real-Time Tasks with Complex Constraints</article-title>,&#x201d; in <source>Performance Evaluation: Origins and Directions</source> (<publisher-name>IEEE</publisher-name>), <fpage>253</fpage>&#x2013;<lpage>282</lpage>. <pub-id pub-id-type="doi">10.1007/3-540-46506-5_11</pub-id> </citation>
</ref>
<ref id="B14">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Craciunas</surname>
<given-names>S. S.</given-names>
</name>
<name>
<surname>Oliver</surname>
<given-names>R. S.</given-names>
</name>
</person-group> (<year>2016</year>). <article-title>Combined Task- and Network-Level Scheduling for Distributed Time-Triggered Systems</article-title>. <source>Real-time Syst.</source> <volume>52</volume>, <fpage>161</fpage>&#x2013;<lpage>200</lpage>. <pub-id pub-id-type="doi">10.1007/s11241-015-9244-x</pub-id> </citation>
</ref>
<ref id="B15">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Craciunas</surname>
<given-names>S. S.</given-names>
</name>
<name>
<surname>Serna Oliver</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Chmelik</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Steiner</surname>
<given-names>W.</given-names>
</name>
</person-group> (<year>2016</year>). &#x201c;<article-title>Scheduling Real-Time Communication in IEEE 802.1Qbv Time Sensitive Networks</article-title>,&#x201d; in <conf-name>Proc. 24th International Conference on Real-Time Networks and Systems</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>183</fpage>&#x2013;<lpage>192</lpage>. <pub-id pub-id-type="doi">10.1145/2997465.2997470</pub-id> </citation>
</ref>
<ref id="B16">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Craciunas</surname>
<given-names>S. S.</given-names>
</name>
<name>
<surname>Serna Oliver</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Ecker</surname>
<given-names>V.</given-names>
</name>
</person-group> (<year>2014</year>). &#x201c;<article-title>Optimal Static Scheduling of Real-Time Tasks on Distributed Time-Triggered Networked Systems</article-title>,&#x201d; in <conf-name>Proceedings of the 2014 IEEE Emerging Technology and Factory Automation</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>8</lpage>. <pub-id pub-id-type="doi">10.1109/etfa.2014.7005128</pub-id> </citation>
</ref>
<ref id="B17">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Deb</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Agrawal</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Pratap</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Meyarivan</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2000</year>). &#x201c;<article-title>A Fast Elitist Non-dominated Sorting Genetic Algorithm for Multi-Objective Optimization: NSGA-II</article-title>,&#x201d; in <conf-name>Proceedings of the International Conference on Parallel Problem Solving from Nature</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>849</fpage>&#x2013;<lpage>858</lpage>. <pub-id pub-id-type="doi">10.1007/3-540-45356-3_83</pub-id> </citation>
</ref>
<ref id="B18">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Di Natale</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Stankovic</surname>
<given-names>J.&#x20;A.</given-names>
</name>
</person-group> (<year>2000</year>). <article-title>Scheduling Distributed Real-Time Tasks with Minimum Jitter</article-title>. <source>IEEE Trans. Comput.</source> <volume>49</volume>, <fpage>303</fpage>&#x2013;<lpage>316</lpage>. <pub-id pub-id-type="doi">10.1109/12.844344</pub-id> </citation>
</ref>
<ref id="B19">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>D&#xfc;rr</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Nayak</surname>
<given-names>N. G.</given-names>
</name>
</person-group> (<year>2016</year>). &#x201c;<article-title>No-wait Packet Scheduling for IEEE Time-Sensitive Networks (TSN)</article-title>,&#x201d; in <conf-name>Proceedings of the 24th International Conference on Real-Time Networks and Systems</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>203</fpage>&#x2013;<lpage>212</lpage>. </citation>
</ref>
<ref id="B20">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ernst</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Kuntz</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Quinton</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Simons</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>The Logical Execution Time Paradigm: New Perspectives for Multicore Systems (Dagstuhl Seminar 18092)</article-title>. <source>Dagstuhl Rep.</source> <volume>8</volume>, <fpage>122</fpage>&#x2013;<lpage>149</lpage>. </citation>
</ref>
<ref id="B22">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Fohler</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>1994</year>). <source>Flexibility in Statically Scheduled Real-Time Systems. Ph.D. Thesis, Technisch- Naturwissenschaftliche Fakult&#xe4;t</source>. <publisher-loc>Vienna, Austria</publisher-loc>: <publisher-name>Technische Universit&#xe4;t Wien</publisher-name>. </citation>
</ref>
<ref id="B23">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Forget</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Boniol</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Pagetti</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2017</year>). &#x201c;<article-title>Verifying End-To-End Real-Time Constraints on Multi-Periodic Models</article-title>,&#x201d; in <conf-name>Proceedings IEEE Emerging Technology and Factory Automation</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>8</lpage>. <pub-id pub-id-type="doi">10.1109/etfa.2017.8247612</pub-id> </citation>
</ref>
<ref id="B24">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Forget</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Grolleau</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Pagetti</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Richard</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2011</year>). &#x201c;<article-title>Dynamic Priority Scheduling of Periodic Tasks with Extended Precedences</article-title>,&#x201d; in <conf-name>Proceedings IEEE Emerging Technology and Factory Automation</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>8</lpage>. <pub-id pub-id-type="doi">10.1109/etfa.2011.6059015</pub-id> </citation>
</ref>
<ref id="B25">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Garey</surname>
<given-names>M. R.</given-names>
</name>
<name>
<surname>Johnson</surname>
<given-names>D. S.</given-names>
</name>
</person-group> (<year>1979</year>). <source>Computers and Intractability: A Guide to the Theory of NP-Completeness</source>. <publisher-name>W. H. Freeman</publisher-name>. </citation>
</ref>
<ref id="B26">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Gietelink</surname>
<given-names>O.</given-names>
</name>
<name>
<surname>Ploeg</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Schutter</surname>
<given-names>B. D.</given-names>
</name>
<name>
<surname>Verhaegen</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2006</year>). <article-title>Development of Advanced Driver Assistance Systems with Vehicle Hardware-In-The-Loop Simulations</article-title>. <source>Vehicle Syst. Dyn.</source> <volume>44</volume>, <fpage>1</fpage>. <pub-id pub-id-type="doi">10.1080/00423110600563338</pub-id> </citation>
</ref>
<ref id="B27">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Goldberg</surname>
<given-names>D. E.</given-names>
</name>
<name>
<surname>Lingle</surname>
<given-names>R.</given-names>
<suffix>Jr</suffix>
</name>
</person-group> (<year>1987</year>). &#x201c;<article-title>A Study of Permutation Crossover Operators on the TSP</article-title>,&#x201d; in <conf-name>Proceeding of the Second International Conference on Genetic Algorithms and Their Applications</conf-name>. Editor <person-group person-group-type="editor">
<name>
<surname>Grefenstette</surname>
<given-names>J.&#x20;J.</given-names>
</name>
</person-group> (<publisher-loc>Hillsdale, New Jersey</publisher-loc>: <publisher-name>Lawrence Erlbaum</publisher-name>), <fpage>224</fpage>&#x2013;<lpage>230</lpage>. </citation>
</ref>
<ref id="B28">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Goldberg</surname>
<given-names>D. E.</given-names>
</name>
<name>
<surname>Lingle</surname>
<given-names>R.</given-names>
<suffix>Jr</suffix>
</name>
</person-group> (<year>1985</year>). &#x201c;<article-title>Alleles, Loci and the TSP</article-title>,&#x201d; in <conf-name>Proceeding of the First International Conference on Genetic Algorithms and Their Applications</conf-name>. Editor <person-group person-group-type="editor">
<name>
<surname>Grefenstette</surname>
<given-names>J.&#x20;J.</given-names>
</name>
</person-group> (<publisher-loc>Hillsdale, New Jersey</publisher-loc>: <publisher-name>Lawrence Erlbaum</publisher-name>), <fpage>154</fpage>&#x2013;<lpage>159</lpage>. </citation>
</ref>
<ref id="B29">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Hammond</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Qu</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Rawashdeh</surname>
<given-names>O. A.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>Deploying and Scheduling Vision Based Advanced Driver Assistance Systems (ADAS) on Heterogeneous Multicore Embedded Platform</article-title>,&#x201d; in <conf-name>2015 9th International Conference on Frontier of Computer Science and Technology</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>172</fpage>&#x2013;<lpage>177</lpage>. <pub-id pub-id-type="doi">10.1109/fcst.2015.69</pub-id> </citation>
</ref>
<ref id="B30">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Hansen</surname>
<given-names>E. A. J.</given-names>
</name>
</person-group> (<year>2020</year>). <source>Configuration of Computer-Platforms for Autonomous Driving ApplicationsMaster&#x2019;s Thesis</source>. <publisher-loc>Kongens Lyngby, Denmark</publisher-loc>: <publisher-name>Technical University of Denmark</publisher-name>. </citation>
</ref>
<ref id="B31">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Hutter</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Hoos</surname>
<given-names>H. H.</given-names>
</name>
<name>
<surname>Leyton-Brown</surname>
<given-names>K.</given-names>
</name>
</person-group> (<year>2012</year>). &#x201c;<article-title>Parallel Algorithm Configuration</article-title>,&#x201d; in <conf-name>International Conference on Learning and Intelligent Optimization</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>55</fpage>&#x2013;<lpage>70</lpage>. <pub-id pub-id-type="doi">10.1007/978-3-642-34413-8_5</pub-id> </citation>
</ref>
<ref id="B32">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hutter</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Hoos</surname>
<given-names>H. H.</given-names>
</name>
<name>
<surname>Leyton-Brown</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>St&#xfc;tzle</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2009</year>). <article-title>ParamILS: An Automatic Algorithm Configuration Framework</article-title>. <source>J. Artif. Intell. Res.</source> <volume>36</volume>, <fpage>267</fpage>&#x2013;<lpage>306</lpage>. </citation>
</ref>
<ref id="B33">
<citation citation-type="book">
<collab>IEEE</collab> (<year>2016a</year>). <source>802.1AS-Rev - Timing and Synchronization for Time-Sensitive Applications</source>. <publisher-name>IEEE</publisher-name>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://www.ieee802.org/1/pages/802.1as.html">https://www.ieee802.org/1/pages/802.1as.html</ext-link> (Accessed 08&#x20;19, 2021)</comment>. </citation>
</ref>
<ref id="B34">
<citation citation-type="book">
<collab>IEEE</collab> (<year>2015</year>). <source>802.1Qbv-2015 - IEEE Standard for Local and Metropolitan Area Networks &#x2013; Bridges and Bridged Networks - Amendment 25: Enhancements for Scheduled Traffic</source>. <publisher-name>IEEE</publisher-name>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://ieeexplore.ieee.org/servlet/opac?punumber=8613093">https://ieeexplore.ieee.org/servlet/opac?punumber&#x3d;8613093</ext-link> (Accessed 08&#x20;19, 2021)</comment>. </citation>
</ref>
<ref id="B35">
<citation citation-type="book">
<collab>IEEE</collab> (<year>2016b</year>). <source>Official Website of the 802.1 Time-Sensitive Networking Task Group</source>. <publisher-name>IEEE</publisher-name>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://1.ieee802.org/tsn/">https://1.ieee802.org/tsn/</ext-link>(Accessed 06&#x20;11, 2019)</comment>. </citation>
</ref>
<ref id="B36">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Isovi&#x107;</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Fohler</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2000</year>). &#x201c;<article-title>Efficient Scheduling of Sporadic, Aperiodic, and Periodic Tasks with Complex Constraints</article-title>,&#x201d; in <conf-name>Proceedings IEEE Real-Time Systems Symposium</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>207</fpage>&#x2013;<lpage>216</lpage>. </citation>
</ref>
<ref id="B37">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Larranaga</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Kuijpers</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Poza</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Murga</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>1997</year>). <article-title>Decomposing Bayesian Networks. Triangulation of the Moral Graph with Genetic Algorithms</article-title>. <source>Stat. Comput.</source> <volume>7</volume>, <fpage>19</fpage>&#x2013;<lpage>34</lpage>. </citation>
</ref>
<ref id="B38">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Leung</surname>
<given-names>J.&#x20;Y.-T.</given-names>
</name>
<name>
<surname>Merrill</surname>
<given-names>M. L.</given-names>
</name>
</person-group> (<year>1980</year>). <article-title>A Note on Preemptive Scheduling of Periodic, Real-Time Tasks</article-title>. <source>Inf. Process. Lett.</source> <volume>11</volume>, <fpage>115</fpage>&#x2013;<lpage>118</lpage>. <pub-id pub-id-type="doi">10.1016/0020-0190(80)90123-4</pub-id> </citation>
</ref>
<ref id="B39">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Liu</surname>
<given-names>C. L.</given-names>
</name>
<name>
<surname>Layland</surname>
<given-names>J.&#x20;W.</given-names>
</name>
</person-group> (<year>1973</year>). <article-title>Scheduling Algorithms for Multiprogramming in a Hard-Real-Time Environment</article-title>. <source>J.&#x20;Acm</source> <volume>20</volume>, <fpage>46</fpage>&#x2013;<lpage>61</lpage>. <pub-id pub-id-type="doi">10.1145/321738.321743</pub-id> </citation>
</ref>
<ref id="B40">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Lukasiewycz</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Schneider</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Goswami</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Chakraborty</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2012</year>). &#x201c;<article-title>Modular Scheduling of Distributed Heterogeneous Time-Triggered Automotive Systems</article-title>,&#x201d; in <conf-name>17th Asia and South Pacific Design Automation Conference</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>665</fpage>&#x2013;<lpage>670</lpage>. <pub-id pub-id-type="doi">10.1109/aspdac.2012.6165039</pub-id> </citation>
</ref>
<ref id="B41">
<citation citation-type="web">
<comment>Dataset</comment> <collab>Marija Sokcevic</collab> (<year>2020</year>). <article-title>Partitioned Complexity</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://www.tttech-auto.com/expert_insight/expert-insights-partitioned-complexity/">https://www.tttech-auto.com/expert_insight/expert-insights-partitioned-complexity/</ext-link>(Accessed 06&#x20;15, 2021)</comment>. </citation>
</ref>
<ref id="B42">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>McLean</surname>
<given-names>S. D.</given-names>
</name>
<name>
<surname>Craciunas</surname>
<given-names>S. S.</given-names>
</name>
<name>
<surname>Hansen</surname>
<given-names>E. A. J.</given-names>
</name>
<name>
<surname>Pop</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Mapping and Scheduling Automotive Applications on ADAS Platforms Using Metaheuristics</article-title>,&#x201d; in <conf-name>2020 25th IEEE International Conference on Emerging Technologies and Factory Automation</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>329</fpage>&#x2013;<lpage>336</lpage>. <pub-id pub-id-type="doi">10.1109/etfa46521.2020.9212029</pub-id> </citation>
</ref>
<ref id="B43">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>McLean</surname>
<given-names>S. D.</given-names>
</name>
</person-group> (<year>2019</year>). <source>Mapping and Scheduling of Real-Time Tasks on Multi-Core Autonomous Driving platformsMaster&#x2019;s Thesis</source>. <publisher-loc>Kongens Lyngby, Denmark</publisher-loc>: <publisher-name>Technical University of Denmark</publisher-name>. </citation>
</ref>
<ref id="B44">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>McLean</surname>
<given-names>S. D.</given-names>
</name>
<name>
<surname>Pop</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Craciunas</surname>
<given-names>S. S.</given-names>
</name>
</person-group> (<year>2019</year>). <source>Mapping and Scheduling of Real-Time Tasks on Multi-Core Autonomous Driving Platforms</source>. <publisher-loc>Kongens Lyngby, Denmark</publisher-loc>: <publisher-name>Tech. rep., Technical University of Denmark</publisher-name>. </citation>
</ref>
<ref id="B45">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Mehmed</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Steiner</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Rosenblattl</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2017</year>). &#x201c;<article-title>A Time-Triggered Middleware for Safety-Critical Automotive Applications</article-title>,&#x201d; in <conf-name>Presented at the 22nd International Conference on Reliable Software Technologies&#x2014;Ada-Europe</conf-name> (<publisher-name>IEEE</publisher-name>). </citation>
</ref>
<ref id="B46">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Mubeen</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Nolte</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>Applying End-To-End Path Delay Analysis to Multi-Rate Automotive Systems Developed Using Legacy Tools</article-title>,&#x201d; in <conf-name>2015 IEEE World Conference on Factory Communication Systems</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>4</lpage>. <pub-id pub-id-type="doi">10.1109/wfcs.2015.7160585</pub-id> </citation>
</ref>
<ref id="B47">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Niedrist</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Deterministic Architecture and Middleware for Domain Control Units and Simplified Integration Process Applied to ADAS</article-title>,&#x201d; in <source>Fahrerassistenzsysteme 2016</source> (<publisher-loc>Wiesbaden</publisher-loc>: <publisher-name>Springer Fachmedien Wiesbaden</publisher-name>), <fpage>235</fpage>&#x2013;<lpage>250</lpage>. <pub-id pub-id-type="doi">10.1007/978-3-658-21444-9_15</pub-id> </citation>
</ref>
<ref id="B48">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Peng</surname>
<given-names>D.-T.</given-names>
</name>
<name>
<surname>Shin</surname>
<given-names>K. G.</given-names>
</name>
<name>
<surname>Abdelzaher</surname>
<given-names>T. F.</given-names>
</name>
</person-group> (<year>1997</year>). <article-title>Assignment and&#x20;Scheduling Communicating Periodic Tasks in Distributed Real-Time Systems</article-title>. <source>IIEEE Trans. Softw. Eng.</source> <volume>23</volume>, <fpage>745</fpage>&#x2013;<lpage>758</lpage>. <pub-id pub-id-type="doi">10.1109/32.637388</pub-id> </citation>
</ref>
<ref id="B49">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Pop</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Raagaard</surname>
<given-names>M. L.</given-names>
</name>
<name>
<surname>Craciunas</surname>
<given-names>S. S.</given-names>
</name>
<name>
<surname>Steiner</surname>
<given-names>W.</given-names>
</name>
</person-group> (<year>2016</year>). <article-title>Design Optimisation of Cyber&#x2010;physical Distributed Systems Using IEEE Time&#x2010;sensitive Networks</article-title>. <source>IET Cyber-phys. Syst.</source> <volume>1</volume>, <fpage>86</fpage>&#x2013;<lpage>94</lpage>. <pub-id pub-id-type="doi">10.1049/iet-cps.2016.0021</pub-id> </citation>
</ref>
<ref id="B50">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Pop</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Eles</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Peng</surname>
<given-names>Z.</given-names>
</name>
</person-group> (<year>2003</year>). &#x201c;<article-title>Schedulability Analysis for Distributed Heterogeneous Time/event Triggered Real-Time Systems</article-title>,&#x201d; in <conf-name>15th Euromicro Conference on Real-Time Systems</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>257</fpage>&#x2013;<lpage>266</lpage>. </citation>
</ref>
<ref id="B51">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Raagaard</surname>
<given-names>M. L.</given-names>
</name>
<name>
<surname>Pop</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2017</year>). <source>Optimization Algorithms for the Scheduling of IEEE 802.1 Time-Sensitive Networking (TSN)</source>. <publisher-loc>Kongens Lyngby, Denmark</publisher-loc>: <publisher-name>Tech. rep., Technical University of Denmark</publisher-name>. </citation>
</ref>
<ref id="B52">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Rajeev</surname>
<given-names>A. C.</given-names>
</name>
<name>
<surname>Mohalik</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Dixit</surname>
<given-names>M. G.</given-names>
</name>
<name>
<surname>Chokshi</surname>
<given-names>D. B.</given-names>
</name>
<name>
<surname>Ramesh</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2010</year>). &#x201c;<article-title>Schedulability and End-To-End Latency in Distributed ECU Networks: Formal Modeling and Precise Estimation</article-title>,&#x201d; in <conf-name>Proceedings of the Tenth ACM International Conference on Embedded Software</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>129</fpage>&#x2013;<lpage>138</lpage>. </citation>
</ref>
<ref id="B53">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Sagstetter</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Andalam</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Waszecki</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Lukasiewycz</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>St&#xe4;hle</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Chakraborty</surname>
<given-names>S.</given-names>
</name>
<etal/>
</person-group> (<year>2014</year>). &#x201c;<article-title>Schedule Integration Framework for Time-Triggered Automotive Architectures</article-title>,&#x201d; in <conf-name>Proceedings of the 51st Annual Design Automation Conference</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>6</lpage>. <pub-id pub-id-type="doi">10.1145/2593069.2593211</pub-id> </citation>
</ref>
<ref id="B54">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Serna Oliver</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Craciunas</surname>
<given-names>S. S.</given-names>
</name>
<name>
<surname>Steiner</surname>
<given-names>W.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>IEEE 802.1Qbv Gate Control List Synthesis Using Array Theory Encoding</article-title>,&#x201d; in <conf-name>2018 IEEE Real-Time and Embedded Technology and Applications Symposium</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>13</fpage>&#x2013;<lpage>24</lpage>. <pub-id pub-id-type="doi">10.1109/rtas.2018.00008</pub-id> </citation>
</ref>
<ref id="B55">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Sinnen</surname>
<given-names>O.</given-names>
</name>
</person-group> (<year>2007</year>). <source>Task Scheduling for Parallel Systems</source>. <publisher-name>Wiley &#x26; Sons</publisher-name>. </citation>
</ref>
<ref id="B56">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Sommer</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Camek</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Becker</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Buckl</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Zirkler</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Fiege</surname>
<given-names>L.</given-names>
</name>
<etal/>
</person-group> (<year>2013</year>). &#x201c;<article-title>RACE: A Centralized Platform Computer Based Architecture for Automotive Applications</article-title>,&#x201d; in <conf-name>2013 IEEE International Electric Vehicle Conference (IEVC)</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>6</lpage>. <pub-id pub-id-type="doi">10.1109/ievc.2013.6681152</pub-id> </citation>
</ref>
<ref id="B57">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Steiner</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Bauer</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Hall</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Paulitsch</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2011</year>). &#x201c;<article-title>TTEthernet: Time-Triggered Ethernet</article-title>,&#x201d; in <source>Time-Triggered Communication</source> (<publisher-loc>Boca Raton, United States</publisher-loc>: <publisher-name>CRC</publisher-name>). </citation>
</ref>
<ref id="B58">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Syswerda</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>1991</year>). &#x201c;<article-title>Schedule Optimization Using Genetic Algorithms</article-title>,&#x201d; in <source>Handbook of Genetic Algorithms</source> (<publisher-loc>New York</publisher-loc>: <publisher-name>Van Nostrand Reinhold</publisher-name>), <fpage>332</fpage>&#x2013;<lpage>349</lpage>. </citation>
</ref>
<ref id="B59">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Tindell</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Clark</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>1994</year>). <article-title>Holistic Schedulability Analysis for Distributed Hard Real-Time Systems</article-title>. <source>Microprocess. Microprogram</source> <volume>40</volume>, <fpage>1</fpage>. <pub-id pub-id-type="doi">10.1016/0165-6074(94)90080-9</pub-id> </citation>
</ref>
<ref id="B60">
<citation citation-type="web">
<comment>Dataset</comment> <collab>TTTech Computertechnik AG</collab> (<year>2018</year>). <article-title>Automated Driving Offering</article-title>. <ext-link ext-link-type="uri" xlink:href="https://www.tttech-auto.com/products/automated-driving/">Available at: https://www.tttech-auto.com/products/automated-driving/</ext-link>. </citation>
</ref>
<ref id="B61">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Verucchi</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Theile</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Caccamo</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Bertogna</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Latency-aware Generation of Single-Rate Dags from Multi-Rate Task Sets</article-title>,&#x201d; in <conf-name>2020 IEEE Real-Time and Embedded Technology and Applications Symposium</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>226</fpage>&#x2013;<lpage>238</lpage>. <pub-id pub-id-type="doi">10.1109/rtas48715.2020.000-4</pub-id> </citation>
</ref>
<ref id="B62">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Zuepke</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Bommert</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Lohmann</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>AUTOBEST: a United AUTOSAR-OS and ARINC 653 Kernel</article-title>,&#x201d; in <conf-name>21st IEEE Real-Time and Embedded Technology and Applications Symposium</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>133</fpage>&#x2013;<lpage>144</lpage>. <pub-id pub-id-type="doi">10.1109/rtas.2015.7108435</pub-id> </citation>
</ref>
</ref-list>
</back>
</article>