3

我一直在阅读三星 Galaxy (sgh-i897) 上的 cpuinfo 文件以检索 bogoMIPS 值。而现在正在学习如何解释这些信息。

最初,我在加载线程的主要活动下执行此操作,并且始终得到 997.59 的值。然后我将文件读取方法移动到服务中,因为直到很久以后我才需要它在 UI 中。一旦我这样做了,我读取的值就变得非常不同,并且似乎随着每个应用程序的启动而变化,总是慢得多,比如在 300 到 500 的范围内。

我的问题是:

  1. Android OS / Linux 是否会导致测量 bogoMIPS 值并定期修改 cpuinfo 文件?

  2. 如果是这样,是否有一种程序化的方式来强制它?

  3. 为什么它会根据我是否从服务读取文件而不是主活动线程而有所不同?

  4. 最终,如果想要最正确的数字,最好简单地编写我们自己的时序循环,以便在我们需要的时候自己得到它?(假设它一直在变化,由于cpu负载,无论如何?)

4

2 回答 2

6

简短的回答:如果您没有破解内核,请不要打扰 BogoMIPS。

这是什么 BogoMIPS 的东西?

操作系统内核执行的大多数任务都涉及等待硬件,或者最近,等待在其他处理器内核上运行的进程。内核有多种方法可以在不同的时间尺度上等待。在最短的时间内,它通常会简单地“绕圈跑”,在技术上更称为“忙等待循环”。

BogoMIPS 基准测试只是一个繁忙的等待循环。内核运行这样一个循环,使用一个非常可靠的挂钟对其计时,并确定它需要多长时间运行一个繁忙的等待循环来等待特定的时间。

为什么 BogoMIPS 值会发生变化?

当计算机(在这种情况下为智能手机)没有执行大量工作时,它很少需要非常快的处理器。当操作系统注意到它可以使用低于最大频率时,它可能会将处理器降低到较低的频率。这是操作系统可以减少能源使用(与电池供电的计算机相关)和热量产生(与几乎所有事物相关)的方法之一。

当然,当最大频率降低时,BogoMIPS 基准测试的结果不再相关,因为繁忙等待循环中的每次迭代都会花费更长的时间。内核将重新运行基准测试并更新 BogoMIPS 值,因此忙碌等待仍然是短时间等待的可靠方式。

当处理需求增加并且处理器需要再次加速时,类似的情况也成立。

我应该如何使用这个 BogoMIPS 值?

除非您正在破解内核中处理时序的某些部分,否则您不应该被 BogoMIPS 值所困扰。事实上,您应该使用BogoMIPS 值以外的任何值可能有一些方法可以使用 Android SDK 或使用/sys文件系统提供的信息来确定当前的 CPU 频率。

于 2012-07-13T03:18:16.320 回答
2

您不能强制更改 bogoMIP,因为在 Android 下,这在各种因素下是相当喜怒无常的,最初是在开始时(与任何其他 Linux 内核相同),jiffies在初始启动时(arch/arm/boot/smp.c以及arch/arm/boot/vmlinux.lds.S在内核源代码中)使用的是决定bogoMIPS(不要认为这是理所当然的,这就是其“虚假”本身的部分原因)。

影响 bogoMIPS 偏斜的因素归结为

  • 有多少服务/小部件/应用程序正在运行?
  • CPU 是否欠频/超频?什么频率?
  • 什么样的调度程序到位(其中有几个,截止日期/按需/交互式等等)
  • 内核是如何构建的?优化了吗?用于构建它的配置是什么?

用于“存储”cpu 信息值的数据存储在/proc文件系统内启动时创建的虚拟目录中,它在那里,可见,并且大多数(如果不是全部)文件都是零字节,但可以从中读取. 它是在引导时动态创建的。

于 2012-07-13T03:12:59.330 回答