Linux下如何用Bash查看CPU核心的最高睿频?
如何在Linux系统中通过Bash命令查看CPU核心的睿频时钟速度
如今的CPU支持动态睿频技术,时钟速度会根据当前工作负载动态调整。比如现代多线程游戏(尤其是AAA级大作)通常会用到6到8个核心,在决定应用是否要使用更多核心时,你需要权衡额外并行性带来的收益与单核时钟速度的损失。
步骤1:生成指定线程数的CPU负载
要测试不同负载下的睿频表现,可以用stress-ng工具生成CPU负载,比如让1个核心满载:
stress-ng --cpu 1
如果需要测试多核心满载,把数字改成对应核心数即可,比如stress-ng --cpu 8。
步骤2:查看CPU时钟速度信息
Linux的sysfs提供了CPU的详细信息,你可以通过以下方式查看:
方式1:查看/proc/cpuinfo
这个文件包含每个CPU核心的详细参数,其中cpu MHz字段显示当前核心的运行频率:
cat /proc/cpuinfo
示例输出(以AMD Ryzen Threadripper 1950X为例):
processor : 0 vendor_id : AuthenticAMD cpu family : 23 model : 1 model name : AMD Ryzen Threadripper 1950X 16核处理器 stepping : 1 microcode : 0x8001137 cpu MHz : 2200.000 cache size : 512 KB physical id : 0 siblings : 16 core id : 0 cpu cores : 16 apicid : 0 initial apicid : 0 fpu : 支持 fpu_exception : 支持 cpuid level : 13 wp : 支持 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid amd_dcm aperfmperf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb hw_pstate ssbd ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif overflow_recov succor smca sev bugs : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass retbleed smt_rsb srso div0 bogomips : 6799.35 TLB size : 2560个4K页 clflush size : 64 cache_alignment : 64 address sizes : 物理地址43位,虚拟地址48位 power management: ts ttp tm hwpstate eff_freq_ro [13] [14] [...]
注意:cpu MHz显示的是当前实时频率,你可以在运行stress-ng负载的同时,另开一个终端执行watch cat /proc/cpuinfo | grep "cpu MHz"来实时监控频率变化。
方式2:查看sysfs下的频率文件
每个核心的频率信息也存放在/sys/devices/system/cpu/cpu*/cpufreq/目录下,比如查看核心0的当前频率和最大睿频:
# 查看当前频率(单位:kHz) cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq # 查看最大可达到的频率(包括睿频,单位:kHz) cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
输出数值除以1000即可得到GHz单位,比如3400000表示3.4GHz。
总结
通过stress-ng模拟不同负载,结合/proc/cpuinfo或sysfs文件,就能直观看到CPU在不同核心负载下的睿频表现,帮助你评估应用多线程设计的权衡点。
内容的提问来源于stack exchange,提问作者Bengt
相关产品推荐
相关产品推荐

