Skip to content

feat(process): 实现进程与线程CPU时间统计及clock_nanosleep支持#1517

Merged
fslongjin merged 2 commits intoDragonOS-Community:masterfrom
fslongjin:feat-add-cputime-clock-support
Dec 20, 2025
Merged

feat(process): 实现进程与线程CPU时间统计及clock_nanosleep支持#1517
fslongjin merged 2 commits intoDragonOS-Community:masterfrom
fslongjin:feat-add-cputime-clock-support

Conversation

@fslongjin
Copy link
Member

  • 新增ProcessCpuTime结构体,用于统计用户态、内核态及总执行时间
  • 为PCB添加cputime_wait_queue,支持CLOCK_PROCESS/THREAD_CPUTIME_ID的clock_nanosleep
  • 在调度器CPU时间统计中增加CPU-time等待队列唤醒逻辑
  • 扩展clock_gettime和clock_nanosleep系统调用,支持进程和线程CPU时间时钟
  • 添加PosixTimeSpec::from_ns方法,便于从纳秒创建时间规格
  • 更新测试白名单,添加clock_nanosleep_test

- 新增ProcessCpuTime结构体,用于统计用户态、内核态及总执行时间
- 为PCB添加cputime_wait_queue,支持CLOCK_PROCESS/THREAD_CPUTIME_ID的clock_nanosleep
- 在调度器CPU时间统计中增加CPU-time等待队列唤醒逻辑
- 扩展clock_gettime和clock_nanosleep系统调用,支持进程和线程CPU时间时钟
- 添加PosixTimeSpec::from_ns方法,便于从纳秒创建时间规格
- 更新测试白名单,添加clock_nanosleep_test

Signed-off-by: longjin <longjin@DragonOS.org>
@github-actions github-actions bot added the enhancement New feature or request label Dec 20, 2025
@fslongjin
Copy link
Member Author

@claude review this PR in Chinese

@dragonos-community-ai-pr-reviewer
Copy link

dragonos-community-ai-pr-reviewer bot commented Dec 20, 2025

Claude finished @fslongjin's task in 4m 19s —— View job


PR #1517 代码审查

待办事项:

  • 创建审查任务列表
  • 分析PR描述和变更文件
  • 读取新增的cputime.rs文件
  • 读取修改的process/mod.rs文件
  • 读取修改的sched/cputime.rs文件
  • 读取修改的time/syscall文件
  • 读取修改的time/mod.rs文件
  • 检查代码逻辑和潜在问题
  • 提供审查反馈和建议
  • 总结审查结果

审查总结

✅ 实现质量优秀

本PR实现了进程与线程CPU时间统计及clock_nanosleep系统调用对CLOCK_PROCESS_CPUTIME_IDCLOCK_THREAD_CPUTIME_ID的支持。代码设计合理,遵循Linux语义,考虑了实际使用场景(如主线程sleep时子线程仍应推进进程CPU时间)。

🔍 关键实现细节

  1. 数据结构设计:

    • ProcessCpuTime: 使用原子计数器统计用户态、内核态和总执行时间
    • PCB新增cputime_wait_queue: 专用于CPU时间时钟的等待队列,与常规wait_queue分离
    • PCB新增cpu_time: 每个PCB拥有独立的CPU时间统计
  2. 核心算法正确:

    • 线程CPU时间: 直接读取当前PCB的utime + stime
    • 进程CPU时间: 遍历线程组成员累加各线程CPU时间
    • 唤醒机制: 在调度器统计CPU时间时检查并唤醒相关等待队列
  3. 系统调用扩展:

    • clock_gettime: 支持进程/线程CPU时间时钟
    • clock_nanosleep: 支持基于CPU时间的睡眠,正确处理绝对/相对时间、信号打断和重启

⚠️ 注意事项

  1. 内存顺序: 当前使用Ordering::Relaxed,对时间统计可能足够,但跨架构可见性需确认
  2. 竞态条件: process_cputime_ns()遍历线程组时可能遇到并发修改,但被threads_read_irqsave()保护
  3. 错误恢复: 线程组关系异常时回退到当前PCB的策略可能掩盖配置问题

📋 建议

  1. 短期 (可选优化):

    • 考虑在thread_cputime_ns()中使用Ordering::Acquire确保读取最新值
    • 在回退逻辑触发时添加调试日志
  2. 长期:

    • 添加多线程CPU时间统计的单元测试
    • 考虑性能分析场景下的优化(频繁读取CPU时间)

🚀 推荐操作

批准合并。本PR实现了重要且正确的功能,代码质量高,潜在问题均在可控范围内。


审查完成时间: 2025-12-20
审查者: Claude
状态: ✅ 通过审查,建议合并

- 在`process_cputime_ns`中添加对无效线程组关系的防御性回退和日志记录
- 为`thread_cputime_ns`添加原子操作顺序的注释说明
- 新增多线程CPU时间测试程序,验证进程CPU时间累加线程时间的功能

Signed-off-by: longjin <longjin@DragonOS.org>
@fslongjin fslongjin merged commit f095a26 into DragonOS-Community:master Dec 20, 2025
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant