我正在UbuntuforARMv8(Linuxaarch64)中使用QEMU仿真器运行一些基本测试。
我想得到当前CPU的频率(标称频率优先),但从lscpu或cat /proc/cpuinfo的输出,没有CPU频率信息。
类似的stackexchange中的问题的答案对我帮助不大。
perf stat sleep 1
的输出如下,
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频率,
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
显示,
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,我们得到了,
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上运行,对吗?
发布于 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,任务时钟结果反映了这一点。
发布于 2022-08-16 02:01:28
首先,问题是如何获得ARMv8的核心频率(标称或最大)。通过本文的讨论和我在QEMU仿真和实际ARMv8硬件中的测试,有两种典型的获得CPU核心频率的方法。
perf stat sleep 1
可以提供有关CPU频率的可靠数据(至少名义值)。在QEMU中,它显示,
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)中,它表明,
:~# 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的标称频率相匹配。
QEMU模拟器的睡眠测试结果为。
$ taskset -c 3 ./readpmc
Got pmccntr: 0x35dcdf412, 0x410b77476, diff: 0xb2e98064 (3001647204)
calculated CPU frequency: 1000549068
CPU频率为1 1GHz,与QEMU的仿真结果相匹配。
睡眠测试结果在实际硬件(1 1GHz作为标称频率)。
:~/temp# taskset -c 3 ./a.out
Got pmccntr: 0xffffffff8311b937, 0xffffffff8357acf7, diff: 0x45f3c0 (4584384)
calculated CPU frequency: 1528128
它显示1.5MHz,与实际硬件的正常频率不匹配。
通过将代码从睡眠3秒更改为繁忙循环3秒,结果显示。
:~/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)。
https://stackoverflow.com/questions/73321957
复制相似问题