Validating the XANDAR SWC scheduling policies using HiL and CI/CD
In XANDAR project, a new toolchain is being developed that is able to handle embedded applications with diverse safety and security requirements. Considering the high complexity of such systems, the heterogeneity of the involved components (and their tolerance in errors), and the use of mechanisms that increase the trust to the final system even from design time becomes imperative. This is where Continuous Integration / Continuous Delivery techniques (CI/CD) come into play. Employing CI/CD within the XANDAR project ensures compatibility between the individual components of the toolchain and considerably improves the quality of the XANDAR toolchain.
At the heart of the XANDAR execution engine is the development of a two-level scheduling and mapping policy. At the low-level, a mapping algorithm works at the runnables level of each SWC. The target is to extract various mapping options for different system configuration i.e., by varying the number of processor cores and cache resources. At the higher level, a scheduling algorithm is responsible to coordinate the SWC (periodic tasks) scheduling policies by taking as input the various configurations of the previous step. Obviously, the above mentioned process includes a vast number of iterations and measurements at the target platform.
The CI/CD approach of XANDAR serves exactly this purpose. The CI/CD environment orchestrates the whole evaluation process of an application, starting from its modeling, down to its deployment on the target platform and the assessment of its output. In the meantime, the XANDAR toolchain takes care of glue code and XNG hypervisor integration.
The next step is the generation of a bootable system image with the supervision of the CI/CD environment. The system image includes both the SWC’s compiled code and the configuration including schedule and configuration channels.
This workflow is implemented as a pipeline in the Jenkins automation server to facilitate the automated and unsupervised execution and primary evaluation of applications running on a target platform.