S03-H3 CLOSED baseline

This commit is contained in:
2026-08-27 11:12:22 +02:00
commit 4b5fbb6c23
30 changed files with 10130 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
#!/usr/bin/env bash
# Determina la directory common indipendentemente dalla directory corrente.
MARTE_COMMON_DIR="$(
cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 &&
pwd
)"
# Carica i percorsi canonici della benchmark suite.
source "$MARTE_COMMON_DIR/paths.sh"
# Directory contenenti le librerie richieste dagli scenari S00, S01 e S02.
MARTE2_CORE_LIB_DIR="$MARTE2_ROOT/Build/$MARTE_TARGET/Core"
LINUX_TIMER_LIB_DIR="$MARTE2_COMPONENTS_ROOT/Build/$MARTE_TARGET/Components/DataSources/LinuxTimer"
LOGGER_DATA_SOURCE_LIB_DIR="$MARTE2_COMPONENTS_ROOT/Build/$MARTE_TARGET/Components/DataSources/LoggerDataSource"
FILE_DATA_SOURCE_LIB_DIR="$MARTE2_COMPONENTS_ROOT/Build/$MARTE_TARGET/Components/DataSources/FileDataSource"
IOGAM_LIB_DIR="$MARTE2_COMPONENTS_ROOT/Build/$MARTE_TARGET/Components/GAMs/IOGAM"
# Librerie che devono essere presenti.
MARTE2_CORE_LIB="$MARTE2_CORE_LIB_DIR/MARTe2.so"
LINUX_TIMER_LIB="$LINUX_TIMER_LIB_DIR/LinuxTimer.so"
LOGGER_DATA_SOURCE_LIB="$LOGGER_DATA_SOURCE_LIB_DIR/LoggerDataSource.so"
FILE_DATA_SOURCE_LIB="$FILE_DATA_SOURCE_LIB_DIR/FileDataSource.so"
IOGAM_LIB="$IOGAM_LIB_DIR/IOGAM.so"
# Verifica delle directory runtime.
for marte_runtime_dir in \
"$MARTE2_CORE_LIB_DIR" \
"$LINUX_TIMER_LIB_DIR" \
"$LOGGER_DATA_SOURCE_LIB_DIR" \
"$FILE_DATA_SOURCE_LIB_DIR" \
"$IOGAM_LIB_DIR"
do
if [ ! -d "$marte_runtime_dir" ]; then
printf "DIRECTORY RUNTIME ASSENTE: %s\n" "$marte_runtime_dir" >&2
return 2 2>/dev/null || exit 2
fi
done
# Verifica delle librerie runtime.
for marte_runtime_lib in \
"$MARTE2_CORE_LIB" \
"$LINUX_TIMER_LIB" \
"$LOGGER_DATA_SOURCE_LIB" \
"$FILE_DATA_SOURCE_LIB" \
"$IOGAM_LIB"
do
if [ ! -f "$marte_runtime_lib" ]; then
printf "LIBRERIA RUNTIME ASSENTE: %s\n" "$marte_runtime_lib" >&2
return 3 2>/dev/null || exit 3
fi
done
# Inserisce una directory allinizio di LD_LIBRARY_PATH solo se non è già presente.
marte_prepend_library_path() {
marte_directory="$1"
case ":${LD_LIBRARY_PATH-}:" in
*":${marte_directory}:"*)
;;
*)
if [ -n "${LD_LIBRARY_PATH-}" ]; then
LD_LIBRARY_PATH="${marte_directory}:${LD_LIBRARY_PATH}"
else
LD_LIBRARY_PATH="${marte_directory}"
fi
;;
esac
}
# Ordine inverso perché ogni voce viene inserita in testa.
marte_prepend_library_path "$FILE_DATA_SOURCE_LIB_DIR"
marte_prepend_library_path "$IOGAM_LIB_DIR"
marte_prepend_library_path "$LOGGER_DATA_SOURCE_LIB_DIR"
marte_prepend_library_path "$LINUX_TIMER_LIB_DIR"
marte_prepend_library_path "$MARTE2_CORE_LIB_DIR"
export MARTE2_CORE_LIB_DIR
export LINUX_TIMER_LIB_DIR
export LOGGER_DATA_SOURCE_LIB_DIR
export FILE_DATA_SOURCE_LIB_DIR
export IOGAM_LIB_DIR
export LD_LIBRARY_PATH
unset marte_runtime_dir
unset marte_runtime_lib
unset marte_directory
unset -f marte_prepend_library_path
+196
View File
@@ -0,0 +1,196 @@
#!/usr/bin/env bash
set -u
if [ "$#" -ne 4 ]; then
printf "Uso: %s <scenario-id> <configurazione> <stato> <durata-secondi>\n" \
"$0" >&2
exit 2
fi
SCENARIO_ID="$1"
CONFIG_FILE="$2"
REQUESTED_STATE="$3"
DURATION_SECONDS="$4"
COMMON_DIR="$(
cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 &&
pwd
)"
ENV_FILE="$COMMON_DIR/environment.sh"
PATHS_FILE="$COMMON_DIR/paths.sh"
if [ ! -f "$ENV_FILE" ]; then
printf "FILE AMBIENTE ASSENTE: %s\n" "$ENV_FILE" >&2
exit 3
fi
source "$ENV_FILE"
if [ ! -x "$MARTE_APP" ]; then
printf "MARTeApp ASSENTE O NON ESEGUIBILE: %s\n" "$MARTE_APP" >&2
exit 4
fi
if [ ! -f "$CONFIG_FILE" ]; then
printf "CONFIGURAZIONE ASSENTE: %s\n" "$CONFIG_FILE" >&2
exit 5
fi
case "$SCENARIO_ID" in
*[!A-Za-z0-9_-]*|"")
printf "IDENTIFICATORE SCENARIO NON VALIDO: %s\n" "$SCENARIO_ID" >&2
exit 6
;;
esac
case "$REQUESTED_STATE" in
*[!A-Za-z0-9_-]*|"")
printf "NOME STATO NON VALIDO: %s\n" "$REQUESTED_STATE" >&2
exit 7
;;
esac
case "$DURATION_SECONDS" in
*[!0-9]*|"")
printf "DURATA NON VALIDA: %s\n" "$DURATION_SECONDS" >&2
exit 8
;;
esac
if [ "$DURATION_SECONDS" -le 0 ]; then
printf "LA DURATA DEVE ESSERE MAGGIORE DI ZERO.\n" >&2
exit 8
fi
STAMP="$(date +%Y%m%d_%H%M%S)"
RUN_DIR="$RUNS_ROOT/${STAMP}_${SCENARIO_ID}"
RUN_CONFIG="$RUN_DIR/configuration.marte"
RUN_LOG="$RUN_DIR/run.log"
RUN_SUMMARY="$RUN_DIR/runner_summary.txt"
RUN_HASHES="$RUN_DIR/hashes.sha256"
RUN_COMMAND="$RUN_DIR/command.txt"
mkdir -p -- "$RUN_DIR"
cp --preserve=mode,timestamps -- "$CONFIG_FILE" "$RUN_CONFIG"
RUN_DIR_PLACEHOLDER="__MARTE_RUN_DIR__"
PLACEHOLDER_COUNT="$(
python3 - "$RUN_CONFIG" "$RUN_DIR_PLACEHOLDER" "$RUN_DIR" <<'PYRUNNER'
import sys
from pathlib import Path
config_path = Path(sys.argv[1])
placeholder = sys.argv[2]
run_dir = sys.argv[3]
text = config_path.read_text(encoding="utf-8")
count = text.count(placeholder)
if count > 0:
config_path.write_text(
text.replace(placeholder, run_dir),
encoding="utf-8"
)
remaining = config_path.read_text(
encoding="utf-8"
).count(placeholder)
if remaining != 0:
print(
f"PLACEHOLDER_RESIDUI={remaining}",
file=sys.stderr
)
sys.exit(1)
print(count)
PYRUNNER
)"
PLACEHOLDER_RC=$?
if [ "$PLACEHOLDER_RC" -ne 0 ]; then
printf "ERRORE DURANTE LA SOSTITUZIONE DEL PERCORSO RUN.\n" >&2
exit 9
fi
{
printf "%q " \
timeout \
--signal=INT \
--kill-after=2s \
"${DURATION_SECONDS}s" \
"$MARTE_APP" \
-l RealTimeLoader \
-f "$RUN_CONFIG" \
-s "$REQUESTED_STATE"
printf "\n"
} > "$RUN_COMMAND"
{
sha256sum -- "$CONFIG_FILE"
sha256sum -- "$RUN_CONFIG"
sha256sum -- "$PATHS_FILE"
sha256sum -- "$ENV_FILE"
sha256sum -- "${BASH_SOURCE[0]}"
} > "$RUN_HASHES"
printf "============================================================\n"
printf "MARTe2 COMMON RUNNER\n"
printf "============================================================\n"
printf "Scenario: %s\n" "$SCENARIO_ID"
printf "Configurazione: %s\n" "$RUN_CONFIG"
printf "Stato: %s\n" "$REQUESTED_STATE"
printf "Durata: %s secondi\n" "$DURATION_SECONDS"
printf "Run directory: %s\n" "$RUN_DIR"
printf "Placeholder: %s sostituzioni\n" "$PLACEHOLDER_COUNT"
printf "\n"
set +e
timeout \
--signal=INT \
--kill-after=2s \
"${DURATION_SECONDS}s" \
"$MARTE_APP" \
-l RealTimeLoader \
-f "$RUN_CONFIG" \
-s "$REQUESTED_STATE" \
2>&1 |
tee "$RUN_LOG"
PIPE_CODES=("${PIPESTATUS[@]}")
set -e
MARTE_EXIT_CODE="${PIPE_CODES[0]}"
TEE_EXIT_CODE="${PIPE_CODES[1]}"
{
printf "============================================================\n"
printf "RIEPILOGO COMMON RUNNER\n"
printf "============================================================\n"
printf "Data: %s\n" "$(date --iso-8601=seconds)"
printf "Scenario: %s\n" "$SCENARIO_ID"
printf "Configurazione fonte: %s\n" "$CONFIG_FILE"
printf "Configurazione usata: %s\n" "$RUN_CONFIG"
printf "Stato richiesto: %s\n" "$REQUESTED_STATE"
printf "Durata richiesta: %s secondi\n" "$DURATION_SECONDS"
printf "Placeholder sostituiti: %s\n" "$PLACEHOLDER_COUNT"
printf "Exit code MARTe: %s\n" "$MARTE_EXIT_CODE"
printf "Exit code tee: %s\n" "$TEE_EXIT_CODE"
printf "Run log: %s\n" "$RUN_LOG"
printf "Hash: %s\n" "$RUN_HASHES"
printf "Comando: %s\n" "$RUN_COMMAND"
} | tee "$RUN_SUMMARY"
printf "\nRUN_DIR=%s\n" "$RUN_DIR"
if [ "$TEE_EXIT_CODE" -ne 0 ]; then
printf "ERRORE DURANTE LA SCRITTURA DEL LOG.\n" >&2
exit 30
fi
exit 0
+36
View File
@@ -0,0 +1,36 @@
#!/usr/bin/env bash
# Percorso padre dei repository e della benchmark suite.
MARTE_ROOT="/home/dariodf/Scrivania/MARTE"
# Repository esterni usati dalla benchmark suite.
MARTE2_ROOT="$MARTE_ROOT/MARTe2"
MARTE2_COMPONENTS_ROOT="$MARTE_ROOT/MARTe2-components"
MARTE_DEBUG_ROOT="$MARTE_ROOT/marte-debug"
# Directory principale della nuova infrastruttura di test.
BENCHMARK_SUITE_ROOT="$MARTE_ROOT/marte-benchmark-suite"
# Target di compilazione attualmente utilizzato.
MARTE_TARGET="x86-linux"
# Eseguibile MARTe2.
MARTE_APP="$MARTE2_ROOT/Build/$MARTE_TARGET/App/MARTeApp.ex"
# Directory delle configurazioni.
CONFIGURATIONS_ROOT="$BENCHMARK_SUITE_ROOT/configurations"
BASELINES_ROOT="$CONFIGURATIONS_ROOT/baselines"
GENERATED_CONFIGURATIONS_ROOT="$CONFIGURATIONS_ROOT/generated"
# Configurazioni attualmente disponibili.
OFFICIAL_HELLOWORLD_CONFIG="$BASELINES_ROOT/RTApp-HelloWorld-2-solution.cfg"
S00_CONFIG="$GENERATED_CONFIGURATIONS_ROOT/S00/smoke_s0_core.marte"
S01_CONFIG="$GENERATED_CONFIGURATIONS_ROOT/S01/smoke_s1_timing.marte"
# Directory operative della suite.
SCENARIOS_ROOT="$BENCHMARK_SUITE_ROOT/scenarios"
PATCHERS_ROOT="$BENCHMARK_SUITE_ROOT/patchers"
RUNS_ROOT="$BENCHMARK_SUITE_ROOT/runs"
ANALYSIS_ROOT="$BENCHMARK_SUITE_ROOT/analysis"
LOGGING_ROOT="$BENCHMARK_SUITE_ROOT/logging"
ARCHIVE_ROOT="$BENCHMARK_SUITE_ROOT/archive"