🟡 [M18] reset_vm_hwm 非权限错误被吞导致内存峰值污染无提示 #38

Closed
opened 2026-06-05 11:54:14 +08:00 by dailz · 1 comment
Owner

问题

warn_reset_hwm() 只在 PermissionDenied 时打印 warning,其他 I/O 错误被静默忽略。

影响

/proc 不可用、容器限制或内核不支持相关接口时,VmHWM 无法重置,但用户不知道,跨 suite 的峰值内存数据可能被污染。

位置

  • crates/bench/src/runner.rs:11

建议

对所有 reset_vm_hwm() 错误输出 warning;权限错误可保留专门文案,其他错误输出通用失败原因。

## 问题 `warn_reset_hwm()` 只在 `PermissionDenied` 时打印 warning,其他 I/O 错误被静默忽略。 ## 影响 当 `/proc` 不可用、容器限制或内核不支持相关接口时,VmHWM 无法重置,但用户不知道,跨 suite 的峰值内存数据可能被污染。 ## 位置 - `crates/bench/src/runner.rs:11` ## 建议 对所有 `reset_vm_hwm()` 错误输出 warning;权限错误可保留专门文案,其他错误输出通用失败原因。
Author
Owner

修复方案

commit e945a35

变更内容

runner.rs

  • 所有 reset_vm_hwm() 错误现在都会输出 warning(不再仅限 PermissionDenied
  • PermissionDenied 保留 "Try running as root" 专属提示
  • 其他错误输出具体失败原因 + 内存数据污染警告
  • 新增 AtomicBool warn-once 机制,7 次 suite 调用只打印 1 次警告
  • warn_reset_hwm() 改为 pub,供 main.rs 预检共享使用

main.rs

  • 预检从 can_reset_vm_hwm() (笼统 "no root") 改为调用 warn_reset_hwm()
  • 错误信息现在包含具体原因,与 runner 共享 warn-once 去重

metrics.rs

  • 移除无调用者的 can_reset_vm_hwm() 死代码

测试

  • hwm_warned_flag_prevents_reentry — 验证 flag 去重逻辑
  • warn_reset_hwm_does_not_panic — 验证多次调用安全性

验证

  • cargo check
  • cargo test (53 tests)
  • cargo clippy 无新增 warning
## 修复方案 commit e945a35 ### 变更内容 **runner.rs** - 所有 `reset_vm_hwm()` 错误现在都会输出 warning(不再仅限 `PermissionDenied`) - `PermissionDenied` 保留 "Try running as root" 专属提示 - 其他错误输出具体失败原因 + 内存数据污染警告 - 新增 `AtomicBool` warn-once 机制,7 次 suite 调用只打印 1 次警告 - `warn_reset_hwm()` 改为 `pub`,供 main.rs 预检共享使用 **main.rs** - 预检从 `can_reset_vm_hwm()` (笼统 "no root") 改为调用 `warn_reset_hwm()` - 错误信息现在包含具体原因,与 runner 共享 warn-once 去重 **metrics.rs** - 移除无调用者的 `can_reset_vm_hwm()` 死代码 **测试** - `hwm_warned_flag_prevents_reentry` — 验证 flag 去重逻辑 - `warn_reset_hwm_does_not_panic` — 验证多次调用安全性 ### 验证 - `cargo check` ✅ - `cargo test` (53 tests) ✅ - `cargo clippy` 无新增 warning ✅
dailz closed this issue 2026-06-05 15:52:31 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dailz/logViewer#38