① 依赖安装(kit-init)② 门禁预检(kit-preflight)
检查进度:检查完成(rc=0)(100%)
实现细节(状态源与刷新)
状态源
/ctl/prep.state (单行 state=… rc=… ts=… step=…);每个步骤边界重生成本页,进行中附加 meta refresh 3 秒自刷新。测试项启用(控制面:保存后下一轮生效)
勾选要跑的阶段、按需改「时长(秒)」;改完点下方「保存配置(勾选与时长)」。改动下一轮生效。
实现细节(校验 / 备份 / 原子替换)
阶段枚举取自本 conf 的
[phase:*] 定义节,勾选态=当前 [runner] phases;时长值=该阶段现 conf 的 duration(留空=不改,非负整数);perf-baseline 按项数运行、无总时长键。保存=整份校验通过后原子替换 kit.conf 并留存 kit.conf.bak-时间戳,失败原文件一字不动。门禁与预检结果(preflight)
取 log-dir 下最新一份 preflight-*.log(kit-preflight.sh 输出,三列:状态/检查项/说明)。硬门禁 FAIL 不可 override,软项 WARN 可带 -f 放行——以 kit-preflight 退出码为准。
来源:/home/vm-embedded/vlab/kitweb-demo/sandbox/run/log/preflight-20260917-145501.log(当前 log-dir 最新,非当前报告轮——重放归档轮时原轮日志不在本机)
| 状态 | 检查项 | 说明 |
|---|---|---|
| PASS | ID-01 | sandbox 演示桩(真实内核比对见 VM/真板轮:results/28-vm-test/) |
| PASS | ID-02 | sandbox 演示桩(PREEMPT_RT 在 VM/真板轮核验) |
| PASS | CD-01 | sandbox 演示桩(coredump 组件) |
| WARN | BK-01 | sandbox 演示桩(无破坏性步骤,快照由编排方负责) |
| 汇总:PASS=3 WARN=1 FAIL=0 其他行=3 | ||
离线依赖清单(dependencies.list:包 / 版本 / deb 文件)
套件零外网依赖闭包(deb 内嵌随包);各工具实装与否以预检 KIT-02 行为准(缺失工具的用例将按 N/A 登记)——guest 侧逐包实装版本采集为产出侧扩展项(候批)。
| 包名 | 版本 | 离线 deb |
|---|---|---|
| can-utils | 2020.11.0-1 | can-utils_2020.11.0-1_arm64.deb |
| ethtool | 1%3a5.9-1 | ethtool_1%3a5.9-1_arm64.deb |
| fio | 3.25-2 | fio_3.25-2_arm64.deb |
| htop | 3.0.5-7 | htop_3.0.5-7_arm64.deb |
| iperf3 | 3.9-1+deb11u3 | iperf3_3.9-1+deb11u3_arm64.deb |
| kexec-tools | 1%3a2.0.20-2.1 | kexec-tools_1%3a2.0.20-2.1_arm64.deb |
| rt-tests | 1.5-2 | rt-tests_1.5-2_arm64.deb |
| stress-ng | 0.12.06-1 | stress-ng_0.12.06-1_arm64.deb |
| systemd-coredump | 247.3-7+deb11u8 | systemd-coredump_247.3-7+deb11u8_arm64.deb |
原始文件:(文件不在可访问路径,路径:/home/vm-embedded/vlab/kitweb-demo/sandbox/kit/etc/dependencies.list)
环境基线(kernel.env:内核期望 / RT 要求 / 串口)
test-env.conf 为动态 shell 逻辑(source 形态)不直读——其消费的基线键在 kernel.env;实际内核与期望的比对结果见预检 ID-01/ID-02 行。
| 键 | 值 |
|---|---|
| KERNEL_EXPECT | 5.10.264-rt160 |
| KERNEL_BUILD_TAG_EXPECT | "#1 SMP PREEMPT_RT Sat Sep 5 07:17:40 UTC 2026" |
| REQUIRE_RT | yes |
| CONSOLE_DEVICE | ttyAMA0 |
kit.conf 全配置(按节折叠;控制面:键名/值可编辑 + 可删键 + 可新增键 + 可新增节 + 可删除节 + 草稿编辑)
来源:/home/vm-embedded/vlab/kitweb-demo/sandbox/kit/kit.conf;键值与文件逐字一致(注释不进页,原文见下方链接)。
新增节
原文(含注释):(文件不在可访问路径,路径:/home/vm-embedded/vlab/kitweb-demo/sandbox/kit/kit.conf)
开测前建议检查清单(行业惯例折入,候自动化覆盖)
清单来源=行业惯例调研(T25,2026-09-12 转存 evidence);「候自动化」项的 guest 侧采集为产出侧扩展(候批),当前由测试执行者开测前手动核对。来源不硬编码 URL,链接指向证据树路径:targets/<芯片>/results/25-prepare-page/evidence/t25-industry-preflight-checklist-report.md(证据树,未随包分发)。
① 已被预检自动覆盖的(跑 kit-preflight 即已覆盖)
下列基线项由 kit-preflight.sh 自动核对,结论见上方第一区;开测前无需人工重复,例外之处在第二组给出复核命令。
| 检查项 | 预检 ID | 覆盖说明 |
|---|---|---|
| 内核版本与构建指纹 | ID-01 / ID-04 | 版本号逐字比对 + uname -v 构建指纹子串核验(硬门禁) |
| PREEMPT_RT 实时状态 | ID-02 | /sys/kernel/realtime=1 核验(RT 轮硬门禁) |
| 主机名身份 | ID-03 | 与期望主机名比对,身份漂移提示 |
| 内核 panic 触发后行为 | SYS-kernel.panic | kernel.panic 值级比对(重启延迟秒数) |
| SysRq 已启用 | SYS-kernel.sysrq | kernel.sysrq 值级比对 |
| 内存 overcommit 策略 | SYS-vm.overcommit_memory | vm.overcommit_memory 值级比对 |
| coredump 链路 | CD-01 ~ CD-04 | coredumpctl 在位、core_pattern 管道、DefaultLimitCORE、目录可写 |
| journald 持久化 | JR-01 / JR-02 | Storage 配置核验 + /var/log/journal 实际在档 |
| pstore/ramoops 崩溃留证 | PS-01 / PS-02 / PS-03 | 后端注册(硬门禁)、pstorefs 挂载、陈旧残留扫描 |
| cgroup 版本 | CG-01 | cgroup2fs / tmpfs 判定 |
| 根分区磁盘余量 | DSK-01 | 可用 MB 与阈值比对(core/journal 预算) |
| 时钟年份合理性 | CLK-01 | UTC 年份落在 202x(粗检;同步状态见第二组) |
| 串口 console 与 getty | SER-01 / SER-02 | cmdline console= 核验 + serial-getty 活跃状态 |
| failed 单元与残留崩溃进程 | SVC-01 / SVC-02 | 基线是否干净(failed 单元 / core-dump 残留扫描) |
| 阶段所需工具在位 | KIT-02 | 按已配置阶段聚合核验;缺失由 kit-init 补装、用例按 N/A 登记 |
| results/log 目录在位 | KIT-01 | kit-init 前置检查 |
| 备份在档(board) | BK-01 | 原系统备份 + 当前配置快照须在档(board 硬门禁) |
| CAN 接口在位与波特率 | CAN-01 | 接口存在性与波特率核验 |
| 监控物料与只读试跑 | MAT-01 / MAT-02 | targets 清单 + 监控器 dry-run |
| 语言环境 traceback 变量 | ENV-PYTHONFAULTHANDLER 等 | DefaultEnvironment 三变量核验(现场 traceback 完整性) |
② 建议手动检查(候产出侧自动化)
以下按 T25 报告主表逐项转写:查什么 / 为什么开测前要查 / 参考命令。命令为 root 可跑单行形态,优先 coreutils/procfs/sysfs;带 systemd 的命令在离线板上失败可静默跳过。
| 检查什么 | 为什么开测前要查 | 参考命令 |
|---|---|---|
| 时钟是否已同步(NTP/chrony) | 时间戳、日志排序、超时判定与多机因果都依赖墙钟;时钟未同步会让「超时/抖动」结论失去意义 | timedatectl show -p NTPSynchronized -p NTP; chronyc tracking |
| RTC 与时区 | RTC 用本地时间会在时区/夏令时切换时跳变,跨天测试与趋势比对受影响 | timedatectl show -p LocalRTC -p Timezone |
| CPU governor 调频策略 | powersave/ondemand 动态调频直接改变性能与延迟测量,是台架受控变量 | for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do printf '%s=%s\n' "$f" "$(cat "$f")"; done |
| CPU 隔离与低抖动参数 | 若不隔离,调度 tick、RCU 回调、IRQ 都会注入抖动,实时/延迟结果不可比 | grep -Eo 'isolcpus=[^ ]*|nohz=[^ ]*|nohz_full=[^ ]*|rcu_nocbs=[^ ]*|irqaffinity=[^ ]*' /proc/cmdline |
| irqbalance 与 IRQ 亲和 | 实时部署中 irqbalance 周期性搬移中断,打破核绑定设计并引入抖动 | systemctl is-enabled irqbalance; cat /proc/irq/default_smp_affinity |
| CPU idle states(深 C-state) | 深 C-state 退出延迟影响唤醒延迟与功耗测试的可重复性 | cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name |
| swap 与换页活动 | 换页引入额外延迟并污染内存/延迟类结果;vmstat 的 si/so 应尽量为 0 | cat /proc/swaps /proc/sys/vm/swappiness; grep pswpin /proc/vmstat; grep pswpout /proc/vmstat |
| vm.overcommit_memory(现场复核) | 策略决定稀疏分配是失败还是「假成功」,影响 OOM 时机与可复现性(预检 SYS 已比对基线) | cat /proc/sys/vm/overcommit_memory /proc/sys/vm/overcommit_ratio |
| vm.panic_on_oom | OOM 时 panic 还是 oom_killer 杀进程,决定失败形态是否可归因 | cat /proc/sys/vm/panic_on_oom |
| panic_on_oops 语义基线 | oops 后继续还是立即 panic(且 panic 非零才重启),决定整轮判定口径,跑前必须记录对齐 | cat /proc/sys/kernel/panic_on_oops /proc/sys/kernel/panic |
| soft/hard lockup 检测 | 软锁阈值=2×watchdog_thresh;KVM guest 默认关 nmi_watchdog,需显式核对 | cat /proc/sys/kernel/softlockup_panic /proc/sys/kernel/watchdog_thresh /proc/sys/kernel/nmi_watchdog |
| hung_task 检测 | D 状态挂起默认只告警;存储/驱动问题常先以此出现,设 panic 需配 kdump 留现场 | cat /proc/sys/kernel/hung_task_panic /proc/sys/kernel/hung_task_timeout_secs |
| kernel.tainted 基线 | 非零 taint 表示已加载树外模块或发生过告警/崩溃,影响结果可信与缺陷归因 | cat /proc/sys/kernel/tainted |
| panic_on_warn / warn_limit | 决定 WARN 是否触发 panic 抓现场;开太早会被已知良性 WARN 打断长测 | cat /proc/sys/kernel/panic_on_warn /proc/sys/kernel/warn_limit |
| coredump ulimit 与 core_pattern | ulimit -c 为 0 基本可判不会产生 core;管道模式把 core 交给用户态收集器(预检 CD 已核链路,此处核测试进程) | ulimit -c; cat /proc/sys/kernel/core_pattern |
| kdump 崩溃转储 | 内核 panic 场景只有 kdump 能给出完整内存转储;小于 4GB 内存需手工预留 crashkernel | grep -o 'crashkernel=[^ ]*' /proc/cmdline; systemctl is-active kdump |
| nofile 资源限制 | fd 密集型用例触顶会以 EMFILE 假失败;nr_open 是进程级上限、file-max 是系统级上限 | ulimit -n; cat /proc/sys/fs/nr_open /proc/sys/fs/file-max |
| threads-max / pid_max | fork/线程密集型测试的硬上限;pid_max 决定 PID 回绕 | cat /proc/sys/kernel/threads-max /proc/sys/kernel/pid_max |
| aio-max-nr | aio-nr 触顶后 io_setup 直接 EAGAIN,AIO/io_uring 用例会假失败 | cat /proc/sys/fs/aio-nr /proc/sys/fs/aio-max-nr |
| 熵池可用性 | VM/无 RTC 板卡熵积累慢,加密类用例可能阻塞或失败;5.6+ 内核熵语义已变,作基线记录 | cat /proc/sys/kernel/random/entropy_avail /proc/sys/kernel/random/poolsize |
| 文件系统类型与挂载选项 | 日志型 fs 的 journal 重排引入延迟;至少 noatime/nodiratime 减少额外写 | grep ' / ' /proc/mounts; grep -E 'noatime|relatime' /proc/mounts |
| 磁盘余量与 inode | 写满磁盘/耗尽 inode 会丢结果并产生 ENOSPC 假失败;journal/core 容量也依赖剩余空间(预检 DSK 仅核可用 MB) | df -h / /tmp /var; df -i / /tmp /var |
| journald 容量策略 | 长测期间容量策略决定日志是否被挤掉(默认 SystemMaxUse 10%、SystemKeepFree 15%;预检 JR 核持久化) | grep -E '^#?System(MaxUse|KeepFree)' /etc/systemd/journald.conf |
| 日志转发与限流 | 转发批量不当造成 I/O 尖峰;审计日志上限防止日志区被撑满 | grep -E '^[^#].*@' /etc/rsyslog.conf; grep -E '^max_log_file' /etc/audit/auditd.conf |
| cron/at/timers 干扰 | 测试窗口内的定时任务是典型的抖动与随机失败来源 | ls /etc/cron.d /etc/cron.daily; systemctl list-timers --all |
| 多余服务与图形界面 | 图形界面与 MTA/RPC/NFS 等既是噪声源,也影响最长尾延迟 | systemctl get-default; systemctl list-units --type=service --state=running |
| SELinux 模式 | enforcing 策略拒绝会表现为「功能正常但被拦下」的假失败,须记录并与套件预期对齐 | getenforce; cat /sys/fs/selinux/enforce |
| AppArmor 状态 | enforce 的 profile 拒绝会表现为随机失败;complain 模式只记录不拦截 | aa-status --enabled; cat /sys/module/apparmor/parameters/enabled |
| 观测采集前提(/proc 与 sysstat) | sar 要求 /proc 已挂载;不核对采样器(sa1)事后就没有基线数据 | grep '^/proc ' /proc/mounts; ls /var/log/sa |
| 内核 config 前置校验 | 主流测试框架开跑前校验内核 config 前提(如 LTP 的 KCONFIG_PATH);前提不满足应显式标记而非带病开跑 | ls -l /boot/config-$(uname -r) /proc/config.gz |