| Package launch resolution | Cuttlefish packages are installed, but run_memstress_and_collect_logs.py fails with RuntimeError: no launchable activities found | Resolve launcher components through dumpsys package <pkg> Activity Resolver Table when pm resolve-activity / cmd package resolve-activity return no entry | resolve_activity(serial, pkg) returns components such as com.tencent.mm/.ui.LauncherUI and resolved_activities.json is non-empty | Inspect dumpsys package <pkg> manually and confirm the package has MAIN + LAUNCHER; otherwise drop that package from the manifest | branch to dumpsys parser fallback; do not treat this as package-install, kernel, or CVD boot failure |
| Synthetic workload build | CVD真实APK多数因架构/Google服务/ClassNotFound无法启动,压力不足 | Build/install scripts/build_mthp_synth_apks.py APK matrix; keep native libs embedded, uncompressed, and zipalign -P 16 aligned | p00 shows dlopen_ok=4; p14 shows first fork round; p21 starts main plus three worker processes | Read references/synthetic_mthp_apk_workload.md; do not fall back to extracted native libs because install-time strip can break linker section-header checks | branch to synthetic workload instead of expanding unusable app list |
| Synthetic APK install/collection | install loop advances one APK/process only, or maps collection only reports first process | Ensure every nested adb in while read loops uses </dev/null; install with adb install --no-incremental -r -g | Success/fail TSV records all expected APKs; p21 maps count covers main and three workers | Restart only the preload/collection worker; preserve CVD userdata | replace loop implementation |
| Synthetic APK install/collection | Need to preload the 60-APK synthetic matrix onto A/B CVD profiles | Use scripts/install_mthp_synth_apks_ab.sh run with APK_OUT=<synthetic output> and profile serials 127.0.0.1:16521/127.0.0.1:16522 | install-A/packages.txt and install-B/packages.txt list at least 60 com.zzhao.mthp.synth packages | If adb is offline, launch/fix the profile first through the A/B CVD workflow; do not let adb consume profile TSV input | continue to smoke or sampler |
| Synthetic long run | Running synthetic packages through run_memstress_and_collect_logs.py | Preserve the skill/default-manifest pressure knobs explicitly: --burst-size 4 --hold-ms 15 --launch-gap-ms 15 --cycle-sleep-ms 1000 --seed 20260617; passing only --package-file falls back to the script's lower-pressure built-in defaults | run_manifest.json records burst 4, hold 15, launch gap 15, and seed 20260617 | If these values are absent or differ unintentionally, discard the cell and rerun with explicit knobs or --from-manifest | replace command |
| Synthetic long run | CVD relaunch or image rotation leaves fewer than 60 synthetic packages installed, even after a previous 60/0 preload | After every active-profile relaunch, auto-run scripts/install_mthp_synth_apks_ab.sh run with APK_OUT=<synthetic output> if WORKLOAD_PACKAGE_FILE packages are missing, then wait on pm path package evidence | Package check against WORKLOAD_PACKAGE_FILE reaches 60 before sampler starts; early cycle_log.jsonl has zero launch errors; logcat has ZZMthpSynthNative, regions=, and COW fork_round= markers | If APK_OUT is unavailable or install fails, abort the cell early; do not wait forever or continue a 120-cycle run with stale package-count evidence | branch to post-relaunch installer |
| Synthetic workload calibration | Long run shows near-zero allocstall/direct reclaim or synthetic pressure is suspected too weak | Sample real device anonymous VMA size/RSS with scripts/sample_anon_vma_sizes.py, then compare against synthetic vma_size_kb, COW pages, and filemap size | anon_kind_summary.tsv and anon_process_summary.tsv separate virtual reservations from RSS-bearing VMAs | If only idle/system apps are sampled, launch representative heavy apps and resample before retuning | branch to workload retuning before rerunning A/B |
| Synthetic workload semantics | Need deterministic resident pressure rather than sparse/partial touches | Keep anonymous synthetic VMAs fully write-faulted at startup, keep pad .so and filemap paths full read-faulted, and record anon_full_fault_pages / anon_fault_mode in profiles.tsv | logcat shows anon_pages_written=...; profiles.tsv has anon_fault_mode=full_write, so_fault_mode=full_read, and filemap_fault_mode=full_read | If full-write OOMs immediately, retune vma_count/vma_size_kb in builder while preserving full-fault semantics; do not reintroduce sparse parent_touch_pages as the main pressure knob | replace sparse-touch workload model |