Skip to content

澄清 trim 的异步完成语义并提供测量脚本 - #64

Merged
qiyinxi merged 3 commits into
ModAVD:mainfrom
jinghero:test/95-trim-completion
Nov 5, 2026
Merged

qiyinxi merged 3 commits into
ModAVD:mainfrom
jinghero:test/95-trim-completion

Conversation

@jinghero

@jinghero jinghero commented Nov 5, 2026 •

Copy link
Copy Markdown
Collaborator

sm idle-maint run 返回只表示触发请求已返回。GUI、自动 trim 日志和 MCP 说明现在明确区分请求返回与客体回收完成;CLI 原有“已触发磁盘回收”保持不变,异步行为、返回字段和退出码不变。

Refs ModAVD/ModAVD#95

只处理“trim 真正跑完的时机”这一项,#95 其它子项未处理。

改动

  • scripts/measure_trim.py 记录命令发出、返回与往返耗时;直接 sm 另有客体 uptime 边界。按 mountinfo 和 sysfs slaves 确认 /data 设备,保存 vold、dmesg 和设备 discard 采样。
  • 只有窗口内唯一、同进程同线程、顺序正确的 /data 开始与明确成功返回日志才报告 observed_fitrim_return。明确失败单列,缺失或歧义为 unknown。计数稳定、sm 退出 0、维护线程结束均不能单独证明完成。
  • 脚本检查两个私有 adb server 配置及整个端口段;TCP/UDP 占用只允许本根的指定 qemu/adb。识别有窗口和无头 qemu,并记录实际运行文件的哈希。流收尾超时会尝试 kill/reap,任何收尾错误都不会跳过文件描述符与锁文件释放。
  • logcat 经现有 su 通路仅读取 main,system。报告目录字段只保留名称,通用文档提醒原始命令输出和 dmesg 仍须公开前检查。
  • GUI 运行中显示“已进行”,返回后显示“触发请求用时”和“已触发”;说明改成“不等待安卓回收完成”。PR #66 的配套测试提交同步更新通知、活动行和运行中断言。
  • 通用语义及复跑步骤放在 internal/emu/TRIM.md。一次性 JSON 和测量章节已从仓库删除,移至 #95 原测量记录和审查修正后复测;README 不再链接维护步骤。

实机结果与限制

Windows 11 / WHPX / Android 14,已有正式 v0.37.1,独立物理复制的 SDK、新建测试实例 0,4 GiB / 4 核 / 16 GiB / 720p 无头、无执行桥,27400–27499 端口段。原包 ZIP 哈希和根内 308 个清单文件核对通过。只使用已有正式包、管理器源码和 adb,未下载或同步 AOSP。

/data 为 dm-40 (254:40),其唯一 slave 是 vdc (253:32),两层 discard 上限及计数为 0。修正后五轮各 100 次采样,两个工作量场景均在专用目录实际写入并删除 128 MiB,进行 fsync/sync。直接 sm 的工作量、空闲重复两轮分别往返 0.200341、0.225976、0.209869 秒,均退出 0,但 vold 明确报告不支持;CLI 的工作量、空闲场景分别为 0.205846、0.187964 秒,均在能力检查时退出 4。

本包仅切换 logcat 缓冲区仍会出现内核读取权限错误,经 su 读取后五轮原始日志均无该错误;实际无头 qemu 哈希匹配发版清单。采样期间只运行本任务 trim,没有 compact、安装、换包或关机;结束后专用实例与私有 adb server 已正常停止。

没有成功 discard 的实机验证或完成耗时。 成功日志分支仍只有合成夹具测试,需要支持 discard 的正式环境补跑工作量和空闲重复。不能用本次结果证明成功 discard 与命令返回的先后关系或宿主文件缩小。

验证

@qiyinxi

qiyinxi commented Nov 5, 2026

Copy link
Copy Markdown
Member

谢谢!文案改得清楚,Go 代码只动了注释和日志,DiskTrimResult 的字段、MCP 的工具定义和 CLI 的输出、退出码都没变;workflow 只是在最后加了一步跑 test_measure_trim.py,触发方式、权限都没动,这些我们都看过没问题。合之前想请你改一处:docs/trim-20261105.json 和 trim-completion.md 里「2026-11-05 实测」那一节是一次具体测量的整理结果(而且是「这个包不支持 discard」的负结果,绑定在 0.37.1 上,很快会过时),仓库里原来也没有 docs/ 目录,建议把 JSON 和这一节贴到 ModAVD/ModAVD#95 的评论里,仓库里只留语义对照表和复跑步骤,放到 internal/emu/TRIM.md(和 #65 的 COMPACT.md 放一起);README 也就不用链到维护用的测量步骤,英文 README 现在链的是只有中文的文档。顺手可以改的小地方:measure_trim.py 里 p.wait(timeout=5) 超时抛异常时会跳过关文件和删锁文件,残留的锁会挡住下一次运行,放进 finally 更稳;端口检查除了 adbServerPort,scriptAdbServerPort 和整个 portBase 段也查一下;原始输出里存了根目录的完整路径,放在用户目录下时会带出用户名,文档里提醒一句或者只存目录名;logcat 用 -b all 没有 root 读不了内核缓冲区,改成 -b main,system 就没有那行报错;界面上 trim 还在跑时显示的是「触发请求用时」,改成「已进行」更准;「尚未确认安卓回收完成」容易读成以后会确认,可以改成「不等待安卓回收完成」(#66 的 JS 测试断言了这句,改了要一起改)。另外 #64 和 #63、#65 在 README.md、internal/ui/API.md、actions.js 有文本冲突,等前面的合了再请你 rebase。

@jinghero

jinghero commented Nov 5, 2026

Copy link
Copy Markdown
Collaborator Author

已按这条审查意见修正,提交 e2a07a7。

  • JSON 和具体测量章节已迁到 #95 原记录,本次修正后的五轮结果另见复测记录。仓库只保留 internal/emu/TRIM.md 的通用语义、步骤及验证入口,README 的维护文档链接已移除。
  • 流结束超时会 kill/reap,锁和文件描述符由独立 finally 保证释放;回归覆盖收尾异常后重新取锁、继续收尾其它流。检查两个私有 adb 配置、完整 100 端口段及 TCP/UDP 占用,核实本根实际 qemu/adb 路径。目录字段只保留名称,文档提醒命令输出和 dmesg 仍须公开前检查。
  • 本包仅使用 -b main,system 仍有 dmesg: klogctl: Permission denied。现在经已有 su 通路读取所需缓冲区,最终五轮原始日志均无该错误。原生检查补齐有窗口/无头 qemu 区别,并核对实际无头二进制哈希匹配清单;早期 JSON 的 qemu 文件选择已在 macOS:开放 ARM64 实例生命周期(阶段 7) #95 注明。
  • GUI 运行中恢复“已进行”,说明改为“不等待安卓回收完成”。test(disk): 增加六项磁盘改动的组合回归工具 #66 已同步 7aff880,并补运行中断言。2 项组合 JS 测试通过,恢复旧文案或旧耗时显示分别使测试失败。

12 项 Python 测试、相关 Go 定向测试、本机构建和 4 项新增故障注入通过。五轮实机各 100 次采样,包含实际写入/删除 128 MiB 及空闲重复;结果仍是直接 sm 返回 0 但客体明确失败、CLI 返回不支持,成功 discard 及其耗时仍未验证。专用实例及私有 adb server 已正常关闭。

最新 #64 CI 全绿,Windows 完整测试/构建/脚本检查和 macOS、Ubuntu 完整测试均通过;#66 CI 也已通过。#63、#65 目前仍未合并,按你的要求等前序合入后再 rebase,当前 main 仍为 dc6501a。

@jinghero
jinghero force-pushed the test/95-trim-completion branch from e2a07a7 to b81fd16 Compare November 5, 2026 13:49
@qiyinxi
qiyinxi merged commit e846a66 into ModAVD:main Nov 5, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants