\chapter{Introduction}
\label{chapter:Introduction}

Embedded applications are increasingly required to provide real-time
performance \cite{hopkins2006debug}.  This means that the correct behavior of a
system is not only dependent on the logical results of a computation, but also
on the physical instant in which these are produced \cite{kopetz2011real}.  For
hard real-time applications violation of a deadline will result in damage of
the system or its environment \cite{tokuda1990real}.

Due to the pervasive nature of embedded systems and their use for critical
applications, e.g., medical devices or advanced driver assistance systems,
measures to ensure the correctness of time dependent functionality must be
taken \cite{konrad2005real}.  Therefore, debugging and validation are a
fundamental part of the development process of such applications
\cite{dixon2013advantages}.

Different techniques to debug embedded systems exist \cite{schneider2004ten}.
The simplest one is a classical \lstinline{printf} statement in C (or the
equivalent in another language).  More sophisticated debug technologies require
on-chip debug logic in the embedded processor.  On-chip debug generally
supports two different types of functionality: run-control debug and real-time
trace \cite{dixon2013advantages}.

The former allows it to stop and examine the state of a system at points of
interest, so called breakpoints.  This approach is intrusive, or in other words
changes the runtime behavior of an application.  This is not acceptable for
time critical applications, e.g., engine control units that require continuous
execution of the processor in order to control feedback loops and to maintain
mechanical stability \cite{dixon2013advantages}.

Real-time trace recording or tracing however, allows it to analyze and debug
a system without stopping the execution.  It works by recording processor
events such as function calls and data accesses.  The captured events can be
used to reconstruct and analyze the runtime behavior of an application.

Since timing is an integral part in the development of safe and secure
real-time applications, timing dependencies should be included in the software
interface specifications \cite{lutz1993analyzing}.  One way to specify these
dependencies are timing requirements, e.g., the maximum response time for a
certain task \cite{deubzer2011robust}.  Via tracing system engineers are
capable of validating those requirements on target.

\glsdesc{ta} (\gls{ta}) provides the \gls{ta} Tool Suite, a collection of tools
for the system design, simulation, automated optimization, and target
verification of embedded real-time multi-core and many-core systems
\cite{tatoolsuite}.  These features work on the basis of system models.
Consequently, requirements are defined for system entities such as tasks,
runnables, signals, and semaphores.

On the contrary, trace recording produces events on software level.  This means
a trace contains information about function entries and exits, and data read
and write accesses. As a consequence, the specified system requirements cannot
be evaluated.

However, by mapping software events to the corresponding system events it is
possible to transform a software to a system level trace.  \glsdesc{btf}
(\gls{btf}) is a trace format on system level and is used in this thesis
because of its native support for multi-core environments.  To the best of my
knowledge, the possibility of a software to system mapping has only been shown
for a small subset of all entities specified by \gls{btf}.

In this thesis the feasibility of mapping all event actions contained in the
\gls{btf} standard is discussed, evaluated and validated.  Furthermore,
different real-time trace techniques are discussed with respect to their
versatility for the timing analysis of embedded multi-core real-time
applications.

\section{Motivation}
\label{section:motivation}

Transformation of software events to system events is required for the timing
analysis of embedded real-time systems as discussed in the previous section.
Moreover, system traces can also be used for different other use cases which
are covered in the following.

\subsubsection{Simulation Validation}

A simulation can be executed for a timing model by the TA Simulator.  The
resulting simulated trace can be evaluated to validate the compliance of an
application with the specified requirements.

A simulated and a hardware based system trace will never be equal by
definition because a model is an abstraction of reality.  Nevertheless,
simulation supports engineers in validating system behavior in early design
stages.  It can abstract complex problems and analyze non-deterministic system
behavior \cite{sifakis2003building}.

However, a simulation is still a software which is vulnerable to bugs and can
potentially produce wrong results.  A deviation to reality due to the
abstraction cannot be classified as a wrong result, on the other hand an
implementation error can be.

Via tracing it is possible to validate the correctness of simulated traces.
This is especially useful if a new simulation feature is implemented.  In this
case a system trace recorded from hardware can provide valuable insights in the
actual behavior.

\subsubsection{OS Overhead Measurement}

Another aspect that is relevant for the development of embedded applications is
the overhead caused by the operating system (\gls{os})
\cite{zeng2011mechanisms}.  Overheads are execution periods where the processor
is not used by the actual application but by the \gls{os}  for example,
context switches and inter-core communication mechanisms.

Especially for applications with a high processor utilization the additional
overhead caused by the \gls{os} plays a critical role.  Fulfillment of timing
requirements may be feasible or not depending on the overhead
\cite{maxmaster}.  In order to take this into consideration a good
understanding of the execution times required by \gls{os} routines is
necessary.  System traces recorded on hardware allow it to determine the exact
execution times for these overheads easily.

\subsubsection{Model Reconstruction}

The initial creation of a timing model for an existing application is a tedious
process if it must be done manually.  Model reconstruction can simplify this
task by creating a timing model automatically.  It works by analyzing a
system trace recorded from hardware.  By detecting common timing patterns in
the trace a model of the application can be created
\cite{sailer2014reconstruction}.


\section{Related Work}

The two main topics discussed in this thesis are tracing and hardware to system
mapping.  While the former has been an important topic in the literature over
the last three decades, the necessity for the latter has only become important
in recent years.

\subsubsection{Tracing}

Ferrari \cite{ferrari1978computer} gives an comprehensive overview of major
computer performance evaluation techniques and their application to various
types of performance problems.  In his book \emph{Computer Systems Performance
Evaluation} he distinguishes between three trace measurement techniques:
software, hybrid, and hardware based trace measurement.  It is important to
understand that these techniques do not directly relate to the trace
abstraction levels discussed in the previous sections.  The concepts described
in his book which was released in 1978 are still relevant today, the
implementation is outdated.

Mink et al.\ \cite{mink1989performance} discuss hardware based performance
measurement in more detail.  They argue that hardware tracing is the only
sufficient trace technique for recording resource utilization information
because of the high signal speeds involved and the fact that not all signals
are visible to software measurement techniques.  Resource utilization is
concerned with detailed information about the operation of the hardware such as
cache hit ratios and access delays.  Moreover, they mention that software based
tracing is intrusive and thus changes the runtime characteristics of an
application.

Kraft et al.\ \cite{kraft2010trace} discuss trace measurement in the context of
five industrial projects.  They argue that hardware trace solutions require
large, expensive equipment mainly intended for lab use.  Additionally, they
claim that software based trace solutions can also remain active in
applications post-release.  Based on this arguments they use a software based
trace measurement approach in their paper.  They introduce a software
instrumentation approach with a very low overhead according to their
measurement results.


\subsubsection{Hardware to System Mapping}

Lauterbach \cite{lauterbach2015third} provides a possibility to export task and
runnable system events for traces recorded via hardware tracing.  However,
their approach is limited to a subset of the existing task and runnable events.
For example, runnable preempt and resume, and task wait events are not covered
by the Lauterbach export even though this information is relevant for the
real-time analysis.  Lauterbach uses the information from the \glsdesc{orti}
(\gls{orti}) files and relies solely on function trace events for the export.

Kraft et al.\ \cite{kraft2010trace} also discuss how task events on system
level can be recorded.  They argue that it is difficult to detect which entity
blocks a task because the scheduling status of the \gls{os} only provides
information about the entity type blocking the task not the entity itself.
They suggest code instrumentation as a pragmatic solution to work around this
problem, admitting that this approach is problematic because the
instrumentation points have to be maintained by the developer.


\section{Interrogation}
\label{section:interrogation}

Timing analysis of embedded system requires a trace, i.e., a sequence of
events, with sufficient duration and timestamp accuracy.  The minimum trace
duration is dependent on the application and requirements that should be
validated.  Fundamentally, the longer the trace duration the more information
for the real-time analysis of the application are acquired.  However, more data
requires longer processing times.  Therefore, a trace duration of at least one
second is demanded in this thesis to provide a tradeoff between processing time
and sufficient length for the real-life use-cases discussed in
\autoref{section:motivation}.

Timestamp accuracy is important for the real-time analysis because if the
resolution is too low no meaningful analysis may be feasible.  For example, if
events can only be recorded in the range of milliseconds, the analysis of
requirements in the microseconds range is not feasible.

Kraft et al. \cite{kraft2010trace} also state that a timestamp accuracy in the
milliseconds range is too coarse-grained for embedded systems timing analysis.
Especially for validation of simulation tools and model reconstruction cycle
accurate timestamps would provide enormous benefits.  From these requirements
the first hypothesis that should be evaluated in this thesis can be derived.

\begin{hyp}
\label{hyp:1}
There exists a trace technique that allows recording of cycle accurate traces
for embedded multi-core real-time system with a duration of at least one
second.
\end{hyp}

Trace techniques output a trace on software level, i.e., a sequence of software
events.  These events provide information about the code segments executed by
an application and the memory regions accessed.  This information allows deep
insights into the runtime behavior of an embedded system, but is not sufficient
for its real-time analysis.

Traces on system level or in other words, sequences of system events are
required for the real-time analysis of embedded multi-core applications.  In
the context of this thesis system events are defined as all events that are
contained in the \gls{btf} specification and not explicitly excluded in
\autoref{subsection:btf_entity_types}.  With an understanding of the underlying
\gls{os} mechanisms it may be possible to map software to system events.

\gls{osek} and \gls{autosar} are common standards for the development of
applications in the automotive industry.  These standards are discussed in more
detail later.  \gls{osek} compliant operating systems feature a so-called
\gls{orti} file.

The aim of \gls{orti} is to make \gls{os} internal data visible to external
tools \cite{osekortia}.  This means it is possible via \gls{orti} to relate
software level entities to their respective interpretation on system level.  It
must be examined if a mapping for all \gls{btf} entities is feasible.

\begin{hyp}
\label{hyp:2}
A complete mapping from software to system entities is feasible based on the
information included in the \gls{orti} file for an \gls{osek} compliant
\glsdesc{os}.
\end{hyp}

If Hypothesis~\ref{hyp:2} does not hold other ways to achieve a complete
software to system mapping must be found.  An \gls{os} must keep track of the
states of all relevant system objects internally.  Otherwise, it would not be
possible to execute appropriate actions if required.  For example, if one task
activates another one the \gls{os} must determine whether the corresponding
task is allowed to be activated or if the maximum number of activations has
already been exceeded.

By analyzing the internal data structures of an \gls{os} it may be possible to
construct a mapping from software to system entities.  Considering the previous
example, there might be an \gls{os} data structure that keeps track of the
remaining activations for each task entity.  If the field for a task is
incremented, an entity of the corresponding task terminates. If it is
decremented a new task instance is activated.

\begin{hyp}
\label{hyp:3}
A complete mapping from software to system entities is feasible for an
\gls{osek} compliant \glsdesc{os}.
\end{hyp}


\section{Outline}

In oder to transform a trace recorded from hardware to a trace on system level
an understanding of the underlying operating system mechanisms is required.  An
\gls{os} standard commonly used in the automotive industry is \gls{osekos}.  It
is discussed in \autoref{section:osekvdxos}.

The real-time behavior of an embedded multi-core application can be represented
by a system trace.  Based on a system trace an application can be examined and
specified timing requirements can be validated.  \gls{btf} is a system level
trace format and used in this thesis.  It is discussed in
\autoref{chapter:btf}.

There exist different techniques to record traces of embedded applications.  In
\autoref{section:trace_measurement} an overview of these techniques is
provided.  It is then argued why hardware tracing is the only technique
sufficient for the validation of embedded real-time applications.  Accordingly,
hardware tracing is then discussed in more detail.

On the basis of the information in \autoref{chapter:fundamentals} the mapping
between software entities and system entities is described in
\autoref{chapter:mapping}.  Mapping is done for all \gls{btf} entities that are
relevant for the analysis of embedded multi-core applications as discussed in
\autoref{subsection:btf_entity_types}.

In \autoref{chapter:validation} the mapping is validated.  For that reason
criteria to compare \gls{btf} traces are established in
\autoref{subsection:validation_techniques}.  Based on these criteria simulated
traces and traces recorded hardware are compared and evaluated.  This is done
in two steps.  Firstly, test applications are created manually to cover all
possible \gls{btf} actions in \autoref{subsection:systematic_tests}.  Secondly,
applications are created randomly to avoid selection bias in the creation of
test cases in \autoref{subsection:randomized_tests}.

Finally, the results of this thesis are discussed in
\autoref{chapter:conclusion} and possible topics for future work are outlined
in \autoref{chapter:future_work}.
