bogoMIPS价值正在发生变化

时间:2012-07-13 02:43:10

标签: android performance linux-kernel arm cpu-speed

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

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

我的问题是:

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

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

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

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

2 个答案:

答案 0 :(得分:6)

简短的回答:如果你没有攻击内核,不要打扰BogoMIPS。

这个BogoMIPS是什么东西?

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

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

为什么BogoMIPS值会发生变化?

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

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

当处理需求上升时,类似的东西也会出现,处理器需要再次受到限制。

我应该如何使用此BogoMIPS值?

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

答案 1 :(得分:2)

你不能强迫改变bogoMIPs,因为在各种因素下,在Android下,这是相当不稳定的,最初在开始时(与任何其他Linux内核相同),初始启动时使用的jiffies({{1}和内核源代码中的arch/arm/boot/smp.c决定了bogoMIPS(它不是理所当然的,这部分是因为它的' bogus '本身)。

影响bogoMIPS偏差的因素是

  • 运行了多少服务/小部件/应用程序?
  • CPU是否超频/超时?什么频率?
  • 有哪种调度程序(有一些调度程序,截止日期/按需/交互式命名,但有几个)
  • 内核是如何构建的?它是否优化?用于构建它的配置是什么?

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