微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何解释 simpleperf stat 产生的指令计数,同一线程上的记录不相同?

如何解决我如何解释 simpleperf stat 产生的指令计数,同一线程上的记录不相同?

我是一名在 Android 平台上开发东西的工程师,因此使用 simpleperf 只是评估线程性能的正常做法。不过最近我陷入了两难的境地,我在想我应该使用哪些统计数据,让我们看看下面的例子:

环境:threadID:27473 运行 while 循环在后台执行相同的事情

i) >>> simpleperf stat -e 指令 -t 27473 --duration 10 --use-devfreq-counters

Performance counter statistics:

#       count  event_name     # count / runtime,runtime / enabled_time
  421,117,470  instructions   # 1.349 G/sec  (61%)

Total test time: 10.001907 seconds.
simpleperf W cmd_stat.cpp:863] Percentages < 100% means some events only run a subset of enabled time,probably caused by hardware counter multiplexing (less counters than events).
Try --use-devfreq-counters if on a rooted device.

ii) >>># simpleperf record -g -t 27473 -e instructions --duration 10 -o /sdcard/perf.data -f 4000 -m 8192

Event: instructions (type 0,config 1)
Samples: 1688
Event count: 570506200

Overhead   Command    Pid  Tid
570506200  SomeThread  684  27473

在这里有两个问题:

  1. 为什么在相同的持续时间(10 秒)内监视相同的线程会得到完全不同的指令计数,即 421M 与 570M ?哪一个是正确的?
  2. 我注意到第一种方法有 61% 的百分比,所以我尝试通过这个“规范化”数据,不知道我是否做得对:421M / 0.61 = 688M,仍然远不符合第二种方法570M,我如何校准这两个统计数据?

谢谢你救了我

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。