\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}.