Skip to content
  • Glorhop's avatar
    refactor(bench): one directory per experiment + integrated cross-cell scenario · dd7d1df1
    Glorhop authored
    Layout — bench/ is now split by experiment instead of one flat pile of 25 files:
    - common/     membw, cpuhog, freq_probe, make-inmate-initramfs.sh (shared by all four)
    - rt-latency/ experiment 1 — RROS / Xenomai / PREEMPT_RT probes, same cell, same dtb
    - crosscell/  experiment 2 — ivshmem-v2 link, heartbeat, D1/D2 detect-isolate-recover
    - rt-demo/    experiment 3 — oob GPIO loop under a fully loaded rich Linux
    - integrated/ experiment 4 — the same loop, now driven and monitored across cells
    
    New in integrated/:
    - rt_shm.h      single source of truth for the telemetry/command layout; its first 24 B
                    are byte-compatible with crosscell's struct hb, so ivshmem-health keeps
                    detecting D2 with not a line changed
    - rt_ctrl.c     inmate side: oob GPIO loop + per-cycle telemetry publish + command poll
                    + fault injection; hot spin touches neither shared memory nor barriers
    - rt_console.c  root side: dash/get/set/sweep/inject-hang/clear-hang, each waiting for
                    cmd_ack within one telemetry snapshot rather than assuming write == sent
    - inmate-init-full, scenario_full.sh (T0–T8, every beat asserted, non-zero exit on any
      failure), tests/test_rt_shm.c
    Plus common/freq_probe.c and one README per experiment directory.
    
    Corrections folded in:
    - the stimulus is the DHO924S built-in generator G, not an external AFG; its 5.00 V /
      1.000 kHz power-on default is called out because pin31 is a 3.3 V logic input
    - hypervisor-enable is detected by the root-cell row, not by the exit code of
      `jailhouse cell list` — that exits 0 even when nothing is enabled, so enable was being
      skipped silently and cell create then failed with a near-undiagnosable EINVAL
    - make-inmate-initramfs.sh: INIT_SRC= for one-pass init injection (repacking outside
      fakeroot loses the mknod'd dev/console), dd and taskset in the default tool set, and a
      TARGET= default matching the new directory depth
    - the plaintext sshpass invocation is gone from scenario2_faultdemo.sh
    
    Conventions:
    - READMEs describe operations only — what each file is, how to build, deploy, wire and
      run it. Measured values and result analysis go in the competition document, not here.
    - build outputs stay out of the working tree: every build line writes to "$ART", which
      defaults to ../artifacts, a sibling of the repo
    dd7d1df1