首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定ARMv8 CPU的频率?

如何确定ARMv8 CPU的频率?
EN

Stack Overflow用户
提问于 2022-08-11 13:56:43
回答 2查看 279关注 0票数 0

我正在UbuntuforARMv8(Linuxaarch64)中使用QEMU仿真器运行一些基本测试。

我想得到当前CPU的频率(标称频率优先),但从lscpu或cat /proc/cpuinfo的输出,没有CPU频率信息。

类似的stackexchange中的问题的答案对我帮助不大。

perf stat sleep 1的输出如下,

代码语言:javascript
运行
复制
 Performance counter stats for 'sleep 1':

         36.845824      task-clock (msec)         #    0.034 CPUs utilized
                 1      context-switches          #    0.027 K/sec
                 0      cpu-migrations            #    0.000 K/sec
                49      page-faults               #    0.001 M/sec
        36,759,401      cycles                    #    0.998 GHz
   <not supported>      instructions
   <not supported>      branches
   <not supported>      branch-misses

       1.068524527 seconds time elapsed

我可以说CPU是1 1GHz吗?

cpupower的输出没有显示任何CPU频率,

代码语言:javascript
运行
复制
t@ubuntu:~/test/kermod$ sudo cpupower monitor
No HW Cstate monitors found

t@ubuntu:~/test/kermod$ sudo cpupower frequency-info
analyzing CPU 0:
  no or unknown cpufreq driver is active on this CPU
  CPUs which run at the same hardware frequency: Not Available
  CPUs which need to have their frequency coordinated by software: Not Available
  maximum transition latency:  Cannot determine or is not supported.
Not Available
  available cpufreq governors: Not Available
  Unable to determine current policy
  current CPU frequency: Unable to call hardware
  current CPU frequency:  Unable to call to kernel
t@ubuntu:~/test/kermod$ sudo cpupower info
System does not support Intel's performance bias setting
analyzing CPU 0:

dmidecode -t processor显示,

代码语言:javascript
运行
复制
t@ubuntu:~/test/kermod$ sudo dmidecode -t processor
# dmidecode 3.1
Getting SMBIOS data from sysfs.
SMBIOS 3.0.0 present.

Handle 0x0400, DMI type 4, 42 bytes
Processor Information
        Socket Designation: CPU 0
        Type: Central Processor
        Family: Other
        Manufacturer: QEMU
        ID: 00 00 00 00 00 00 00 00
        Version: virt-4.2
        Voltage: Unknown
        External Clock: Unknown
        Max Speed: 2000 MHz
        Current Speed: 2000 MHz
        Status: Populated, Enabled
        Upgrade: Other
        L1 Cache Handle: Not Provided
        L2 Cache Handle: Not Provided
        L3 Cache Handle: Not Provided
        Serial Number: Not Specified
        Asset Tag: Not Specified
        Part Number: Not Specified
        Core Count: 1
        Core Enabled: 1
        Thread Count: 1
        Characteristics: None

它说CPU是2 2GHz,但我不确定这是否正确。

我可以使用的另一种方法是睡觉几秒钟,读取CPU中循环计数器的差来计算频率。但我得到的CPU频率大约是1 1GHz。

或者有没有任何方法在软件或寄存器在硬件上可以告诉我ARM CPU的频率?

编辑**

我让我的同事用他的真正的perf stat sleep 1硬件运行ARMv8,我们得到了,

代码语言:javascript
运行
复制
 Performance counter stats for 'sleep 1':

              1.89 msec task-clock                #    0.002 CPUs utilized
                 1      context-switches          #    0.530 K/sec
                 0      cpu-migrations            #    0.000 K/sec
                43      page-faults               #    0.023 M/sec
           1859822      cycles                    #    0.985 GHz
            758842      instructions              #    0.41  insn per cycle
             91818      branches                  #   48.632 M/sec
             12077      branch-misses             #   13.15% of all branches

       1.003838600 seconds time elapsed

       0.004158000 seconds user
       0.000000000 seconds sys

他的ARMv8运行在1 1GHz,与perf stat的输出相匹配。

与QEMU仿真相比,仿真CPU也应该在1 1GHz上运行,对吗?

EN

回答 2

Stack Overflow用户

发布于 2022-08-11 18:54:25

你查过什么工具来帮助这件事吗?Cpupower有一个手臂释放电力5.19-1。这应该会给你你想要的信息。cpupower monitor应该显示电流频率。根据您拥有的cpu,您需要验证核心集群类型。

需要注意的是,ARM cpu的频率并不总是与x86 cpu的频率相媲美。计算的处理方式是非常不同的。

**编辑

所以CPU频率是用赫兹测量的,它是每秒的周期。根据您的perf stat sleep 1模拟的 ARM cpu在这一秒内有36,759,401个周期。这相当于36.75Mhz,任务时钟结果反映了这一点。

票数 0
EN

Stack Overflow用户

发布于 2022-08-16 02:01:28

首先,问题是如何获得ARMv8的核心频率(标称或最大)。通过本文的讨论和我在QEMU仿真和实际ARMv8硬件中的测试,有两种典型的获得CPU核心频率的方法。

  1. perf stat sleep 1可以提供有关CPU频率的可靠数据(至少名义值)。

在QEMU中,它显示,

代码语言:javascript
运行
复制
t@ubuntu:~$ sudo /usr/lib/linux-tools/4.15.0-189-generic/perf stat sleep 1

 Performance counter stats for 'sleep 1':

         37.075376      task-clock (msec)         #    0.035 CPUs utilized
                 2      context-switches          #    0.054 K/sec
                 0      cpu-migrations            #    0.000 K/sec
                52      page-faults               #    0.001 M/sec
        37,039,955      cycles                    #    0.999 GHz
   <not supported>      instructions
   <not supported>      branches
   <not supported>      branch-misses

       1.055087406 seconds time elapsed

“周期”行显示模拟CPU在1 1GHz运行。

在实际的ARMv8硬件(标称频率为1 1GHz)中,它表明,

代码语言:javascript
运行
复制
:~# perf stat sleep 1

 Performance counter stats for 'sleep 1':

              1.93 msec task-clock                #    0.002 CPUs utilized
                 2      context-switches          #    0.001 M/sec
                 0      cpu-migrations            #    0.000 K/sec
                44      page-faults               #    0.023 M/sec
           1897778      cycles                    #    0.982 GHz
            779587      instructions              #    0.41  insn per cycle
             94295      branches                  #   48.782 M/sec
             12509      branch-misses             #   13.27% of all branches

       1.003847600 seconds time elapsed

       0.000000000 seconds user
       0.004177000 seconds sys

cycles的线路显示它运行在1 1GHz,这与CPU的标称频率相匹配。

  1. 软件可以读取pmccntr_el0来计算CPU的频率,而软件的设计需要强调CPU的100%使用,避免CPU功耗的管理。

QEMU模拟器的睡眠测试结果为。

代码语言:javascript
运行
复制
$ taskset -c 3 ./readpmc
Got pmccntr: 0x35dcdf412, 0x410b77476, diff: 0xb2e98064 (3001647204)
calculated CPU frequency: 1000549068

CPU频率为1 1GHz,与QEMU的仿真结果相匹配。

睡眠测试结果在实际硬件(1 1GHz作为标称频率)。

代码语言:javascript
运行
复制
:~/temp# taskset -c 3 ./a.out
Got pmccntr: 0xffffffff8311b937, 0xffffffff8357acf7, diff: 0x45f3c0 (4584384)
calculated CPU frequency: 1528128

它显示1.5MHz,与实际硬件的正常频率不匹配。

通过将代码从睡眠3秒更改为繁忙循环3秒,结果显示。

代码语言:javascript
运行
复制
:~/temp# taskset -c 3 ./b.out
Inside handler function
Got pmccntr: 0xffffffff8c6857c3, 0x3f39438b, diff: 0xb2d0ebc8 (3000036296)
calculated CPU frequency: 1000012098

它显示CPU运行在1 1GHz,匹配CPU的实际名义硬件频率。

得出的结论是,软件可以计算ARMv8中CPU的标称频率,就像在X86中所做的那样(通过tsc)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73321957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档