Repository navigation
v0.5.1
mindie-profiler 0.5.1:流式原生库 SHA256 校验、SQLite 锁超时收敛与 CLI 根命令契约补齐
mindie-profiler 0.5.1 完成流式原生库 SHA256 校验(消除全文件 read_bytes() 内存峰值)、SQLite 读写锁 busy_timeout >= 3000ms 统一收敛、TimeoutError 显式透传(禁止被 except OSError: 静默吞没)以及 CLI 根命令 -h/--help 与未知子命令退出码契约补齐。
一、核心特性与行为变更
1. 流式原生库 SHA256 摘要校验(mindie_profiler/vllm_online_evidence.py,PR #5)
- 在线证据采集在计算大型原生动态库(
.so)SHA256 摘要时,改用二进制流式hashlib.file_digest(fh, "sha256"),不再通过Path.read_bytes()将整个共享库文件一次性读入进程内存,严格遵循有界工作集(<= 512 MiB控制面内存上限)约束。
2. SQLite busy_timeout >= 3s、TimeoutError 透传与测试宿主机隔离(PR #6)
- SQLite 并发锁等待收敛:在
memory_db.py、sources_db.py、sql.py等 SQLite 连接入口统一配置timeout=5.0与PRAGMA busy_timeout=5000(读写连接启用PRAGMA journal_mode=WAL),避免多进程并发读取/写入 Profiling 证据库时因瞬时锁竞争立即抛错。 TimeoutError显式透传:由于 Python 3.11+ 中TimeoutError是OSError的子类,全面梳理analyze.py、collect.py、compare_acceptance.py、framework_capture.py、inventory.py、memory_evidence.py、memory_sampler.py、segment.py、sources_csv.py、sources_trace.py、tensor_cast_provider.py、theoretical_model.py、thermal_guard.py、vllm_online_evidence.py、vllm_online_memory.py与weight_inspector.py中的except OSError:分支,显式前置except TimeoutError: raise,严禁将超时信号静默降级为空结果或普通文件缺失。- 测试子进程超时与环境隔离:为
tests/test_profiler_provider.py中的git子进程调用补齐显式timeout=5,并在tests/conftest.py中隔离宿主机环境变量,确保 Tier 0/Tier 1 测试可重入、无残留副作用。
3. CLI 根命令帮助输出与未知子命令诊断契约(mindie_profiler/__main__.py,PR #6)
- 新增
_root_parser()处理顶层mindie-profiler -h/--help,清晰展示支持的全部子命令(inventory、analyze、correlate、compare、sql、collect)及默认analyze行为说明。 - 当传入未知非选项子命令(如
mindie-profiler unknown-cmd)时,不再将其误转发给默认analyze解析器产生令人困惑的参数报错,而是直接向stderr输出mindie_profiler: unknown command ... (choose from ...)并以退出码2终止。
二、验证结果与证据边界
- 自动化测试结果:全量非在网单测(
pytest -q -m "not live_npu",包含新增的tests/test_profiler_cli_root.py)全部通过。 - 证据边界说明:本版本聚焦于
mindie-profiler本地分析引擎、在线证据采集流式内存边界、SQLite 锁超时与 CLI 入口契约收敛,不改变 C7mindie-profile-summary/1报告 Schema 结构。