Cgroup中各种命令

linux查询线程运行状态

adb shell watch -n 1 'cat /proc/15028/sched'

执行结果

以上数据的解释

进程基本信息

  • cgroup_test_top (15028, threads: 1): 进程名为”cgroup_test_top”,PID为15028,有1个线程

调度实体(Scheduling Entity)统计

  • se.exec_start: 1486296.186213: 最近一次开始在CPU上执行的时间戳(毫秒)
  • se.vruntime: 344688.395523: 虚拟运行时间(毫秒),CFS调度器用于公平调度的关键指标
  • se.sum_exec_runtime: 1389935.451169: 总CPU执行时间(毫秒) - 这是您程序监控的核心指标
  • se.nr_migrations: 84659: 进程在不同CPU核心间迁移的次数

睡眠和阻塞统计

  • sum_sleep_runtime: 10509.145946: 进程总睡眠时间(毫秒)
  • sum_block_runtime: 8.446094: 进程总阻塞时间(毫秒),通常是等待I/O
  • sleep_max: 3052.299905: 单次最长睡眠时间(毫秒)
  • block_max: 8.446094: 单次最长阻塞时间(毫秒)

执行时间统计

  • exec_max: 2.704012: 单次最长连续执行时间(毫秒)
  • slice_max: 32.037241: 最大时间片长度(毫秒)

等待统计

  • wait_max: 1468479.052032: 最长等待时间(毫秒)
  • wait_sum: 40090767.761165: 总等待时间(毫秒)
  • wait_count: 199206: 等待次数

I/O等待统计

  • iowait_sum: 0.000000: I/O等待总时间(毫秒)
  • iowait_count: 0: I/O等待次数

迁移统计

  • nr_migrations_cold: 0: 冷迁移次数(迁移到之前未运行过的CPU)
  • nr_failed_migrations_affine: 0: 亲和性迁移失败次数
  • nr_failed_migrations_running: 126: 运行时迁移失败次数

关键指标解读

对于您的程序来说,最重要的是:

  1. se.sum_exec_runtime: 这是进程在CPU上实际运行的累计时间,单位为毫秒
  2. se.nr_migrations: 迁移次数高(84659次)说明这个进程经常在不同CPU核心间切换
  3. wait_sum vs sum_exec_runtime: 等待时间(40090767ms)远大于执行时间(1389935ms),说明这是一个I/O密集型或经常被调度出去的进程

时间单位说明

虽然显示为毫秒格式,但实际上这些值是从内核的纳秒计数器转换而来的。您的程序正确地提取了se.sum_exec_runtime字段来监控CPU使用时间。