Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android/Galaxy SIII上获得每核cpu使用率_Android_Linux_Galaxy - Fatal编程技术网

如何在Android/Galaxy SIII上获得每核cpu使用率

如何在Android/Galaxy SIII上获得每核cpu使用率,android,linux,galaxy,Android,Linux,Galaxy,我有一个三星Galaxy SIII,安卓4.1.2“根”。我需要测量我用C/C++编写的一些多线程应用程序的CPU使用率,但是我需要每个核心的这些信息 我知道(由于维基百科,…)Galaxy有一个4臂Cortex A9的SoC,但是当我执行cat/proc/cpuinfo时,它没有显示任何关于可用内核数量的信息(在任何Linux中都是如此),这是正确的行为吗 我在某个地方读到,我可以使用cat/proc/stat查看每个核心的平均负载,但是,在我的设备中,这样的“文件”的内容只显示“core0”

我有一个三星Galaxy SIII,安卓4.1.2“根”。我需要测量我用C/C++编写的一些多线程应用程序的CPU使用率,但是我需要每个核心的这些信息

我知道(由于维基百科,…)Galaxy有一个4臂Cortex A9的SoC,但是当我执行
cat/proc/cpuinfo
时,它没有显示任何关于可用内核数量的信息(在任何Linux中都是如此),这是正确的行为吗

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

我还尝试了
top
ps
,但没有成功

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

它应该包括不同的内核(显示Nexus 7):

和统计:

$ 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

它应该包括不同的内核(显示Nexus 7):

和统计:

$ 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

通过检查热插拔设备,
/sys/devices/system/cpu/present
/sys/devices/system/cpu/mably
可以获得有关内核数量的信息。另见

我不确定这对你的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_服务器的主线程使用了2186个用户时间刻度,而GC线程使用了79个刻度

如果可以为应用程序插入指令,则可以使用POSIX
clock\u gettime()
调用和
clock\u THREAD\u CPUTIME\u ID
来测量给定线程使用的CPU时间量。(Dalvik VM在为traceview生成结果时使用此选项。)

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

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

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

我不确定这对你的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_服务器的主线程使用了2186个用户时间刻度,而GC线程使用了79个刻度

如果可以为应用程序插入指令,则可以使用POSIX
clock\u gettime()
调用和
clock\u THREAD\u CPUTIME\u ID
来测量给定线程使用的CPU时间量。(Dalvik VM在为traceview生成结果时使用此选项。)

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

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

您可以通过读取文件来检查核心是否在线/离线

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

如果为“0”,则核心处于脱机状态,如果为“1”,则核心处于联机状态。现在,您可以使用/proc/stat计算CPU使用率,但对于三星S3,它将只显示在读取/proc/stat时处于活动状态的内核。现在,要计算所有内核的CPU使用率,您必须强制所有内核联机。您可以使用Play store:提供的系统调谐器应用程序强制所有核心联机。安装应用程序,然后通过(CPU->引导设置->强制所有CPU联机->引导完成)将内核联机,现在您可以重新启动设备,所有内核都联机。现在读取/proc/stat并计算所有内核的CPU使用率。如果您需要有关/proc/stat 我可以帮忙


我注意到负载分布在所有活动内核中(必须是一些系统进程),我在Wifi上运行Skype,在不强制所有内核联机的情况下,它使用了两个内核:分别为30%和25%的内核0和内核1。在强制所有内核联机后,我再次测量了同一用例(wifi上的Skype)的CPU使用率,并注意到负载分布在所有活动内核之间(Core1:26%、Core2:9%、Core3:11%、Core4:10%)。

您可以通过读取文件来检查内核是否联机/脱机

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

如果为“0”,则核心处于脱机状态,如果为“1”,则核心处于联机状态。现在,您可以使用/proc/stat计算CPU使用率,但对于三星S3,它将只显示在读取/proc/stat时处于活动状态的内核。现在,要计算所有内核的CPU使用率,您必须强制所有内核联机。您可以使用Play store:提供的系统调谐器应用程序强制所有核心联机。安装应用程序,然后通过(CPU->引导设置->强制所有CPU联机->引导完成)将内核联机,现在您可以重新启动设备,所有内核都联机。现在读取/proc/stat并计算所有内核的CPU使用率。如果您需要有关/proc/stat 我可以帮忙

我注意到负载分布在所有活动内核(必须是一些系统进程)之间,我在Wifi上运行Skype,在不强制所有内核联机的情况下,它使用了2个内核:核心0和核心1