如何获得Android / Galaxy SIII上的每个核心CPU使用率

时间:2013-06-18 19:54:29

标签: android linux galaxy

我有三星Galaxy SIII与Android 4.1.2“扎根”。我需要测量一些我用C / C ++编写的多线程应用程序的CPU使用率,但是我需要以每个核心为基础来获取这些信息。

我知道(由于wikipedia,......)Galaxy有一个带有4个ARM Cortex A9的SoC但是当我执行cat /proc/cpuinfo时它没有显示任何有关可用内核数量的信息(像往常一样)在任何Linux中),这是正确的行为吗?

我已经阅读过某个地方,我可以使用cat /proc/stat来查看每个核心的平均负载,但是在我的设备中,此类“文件”的内容仅显示“core0”的信息,同样,这是正确还是我需要做些什么来启用所有核心?

我还尝试使用topps但没有成功。

EDITED:
----------------- cat /proc/cpuinfo
Processor   : ARMv7 Processor rev 0 (v7l)
processor   : 0
BogoMIPS    : 1592.52

Features    : swp half thumb fastmult vfp edsp neon vfpv3 tls 
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part    : 0xc09
CPU revision    : 0

Chip revision   : 0011
Hardware    : SMDK4x12
Revision    : 000c
Serial      : 11e16f694df1267e


----------------- cat /proc/stat

cpu  89515 1686 23283 464122 3835 2 376 0 0 0
cpu0 74214 457 16736 221609 1111 1 347 0 0 0
intr 1860068 0 0 0 0 0 0 0 0 0 0 .... (removed: a serie of numbers)
ctxt 3138146
btime 1371578546
processes 15904
procs_running 1
procs_blocked 0
softirq 1154788 12 403499 864 4501 12 12 444746 67202 576 233364

3 个答案:

答案 0 :(得分:4)

您可以通过检查热插拔设备/sys/devices/system/cpu/present/sys/devices/system/cpu/possible来获取有关内核数量的信息。另请参阅the hotplug docs

我不确定这对于获取CPU使用率有多大帮助。您可以粗略地了解线程在adb shell ps -x -t中使用的用户和系统时间,例如:

USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME
system    19598 19574 955672 57324 ffffffff 4012d9b8 S system_server (u:2186, s:1521)
system    19602 19598 955672 57324 c007f840 4012db84 S GC (u:79, s:6)

这表示system_server的主线程使用了2186个用户时间的滴答,而GC线程使用了79个滴答。

如果您可以检测应用程序,则可以使用带clock_gettime()的POSIX CLOCK_THREAD_CPUTIME_ID调用来测量给定线程使用的CPU时间量。 (Dalvik VM在为traceview生成结果时使用此方法。)

然而,这是每个线程。获取每个核心的使用信息要困难得多,尤其是在Android上:

  • hotplug机制可以在测试期间添加或删除核心。
  • 内核可以单独调整每个内核的CPU频率,因此在不同内核上执行X工作量可能需要不同的时间。
  • 线程可以在核心之间迁移(默认情况下,没有核心关联)。

答案 1 :(得分:0)

它应该包含不同的核心(显示Nexus 7):

$ adb shell cat /proc/cpuinfo
Processor   : ARMv7 Processor rev 9 (v7l)
processor   : 0
BogoMIPS    : 1993.93

processor   : 1
BogoMIPS    : 1993.93

processor   : 2
BogoMIPS    : 1993.93

processor   : 3
BogoMIPS    : 1993.93

和stat:

$ adb shell cat /proc/stat
cpu  1623573 112801 907626 32541158 125987 68 5952 0 0 0
cpu0 804181 45734 569092 7373416 43990 49 4990 0 0 0
cpu1 332438 26759 142892 8311267 31256 9 574 0 0 0
cpu2 332889 25551 130711 8319093 30900 7 218 0 0 0
cpu3 154065 14757 64931 8537382 19841 3 170 0 0 0

答案 2 :(得分:0)

您可以通过阅读文件

来检查核心是否在线/离线

/ sys / devices / system / cpu / CPUx / online(x是核心的数量,在三星S3中:0,1,2,3)

如果为“0”,则核心为离线;如果为“1”,则核心为在线。现在,您可以使用/ proc / stat来计算CPU使用率,但对于Samsung S3,它只会显示您在读取/ proc / stat时处于活动状态的核心。现在,要计算所有核心的CPU使用率,您必须强制所有核心在线。您可以使用Play商店提供的系统优化应用https://play.google.com/store/apps/details?id=ccc71.pmw&hl=en强制所有内核在线。安装应用程序,然后通过(CPU - >引导设置 - >强制所有CPU在线 - >在启动完成时)使内核联机,现在您可以重新启动设备并且所有内核都在线。现在阅读 / proc / stat 并计算所有核心的CPU使用率。如果您需要有关 / proc / stat http://www.linuxhowtos.org/System/procstat.htm的更多说明  可以帮忙。

我注意到负载在所有活动核心之间分配(必须是一些系统进程),我通过Wifi运行Skype并且没有强制所有核心在线,它使用2个核心:核心0和核心1在30%和分别为25%。在强制所有核心在线后,我再次测量相同用例(Skype over wifi)的CPU使用率,我注意到负载分布在所有活动核心之间(Core1:26%,Core 2:9%,Core 3:11%) ,核心4:10%)。

相关问题