跟踪自 PR #2154 review: #2154 (comment)
问题
DragonOS 的 tracepoint enable 文件(events/<sys>/<evt>/enable)是一个全局布尔开关——写 0 无条件重置 static key,会关闭所有消费者的事件。
TracePointEnableFile::write('0') → tracepoint.disable() → StaticFalseKey::disable(),直接翻转全局 static key,不维护 per-consumer 的启用计数。
场景
如果一个 perf fd 或另一个 debugfs 用户已经 enable 了某 tracepoint,后来的消费者写 enable=0 会禁用前一个消费者的事件。
建议修复方向
在 TracePoint 上实现 per-consumer enable 所有权 / 引用计数:
- 维护 enable 计数,仅在
0→1 时打开 static key、1→0 时关闭
- tracefs
enable 文件与 perf fd 各自持有独立引用
关联
跟踪自 PR #2154 review: #2154 (comment)
问题
DragonOS 的 tracepoint
enable文件(events/<sys>/<evt>/enable)是一个全局布尔开关——写0无条件重置 static key,会关闭所有消费者的事件。TracePointEnableFile::write('0')→tracepoint.disable()→StaticFalseKey::disable(),直接翻转全局 static key,不维护 per-consumer 的启用计数。场景
如果一个 perf fd 或另一个 debugfs 用户已经 enable 了某 tracepoint,后来的消费者写
enable=0会禁用前一个消费者的事件。建议修复方向
在
TracePoint上实现 per-consumer enable 所有权 / 引用计数:0→1时打开 static key、1→0时关闭enable文件与 perf fd 各自持有独立引用关联