Linux

超執行緒 cpu 的 /proc/cpuinfo 中的“cpu MHz”欄位是什麼意思?

  • July 12, 2016

CPU 是 i7-3770@3.40GHz。它有 4 個核心,每個核心有 2 個執行緒。這是dmidecode輸出:

# dmidecode -t 4
# dmidecode 2.9
SMBIOS 2.7 present.

Handle 0x0042, DMI type 4, 42 bytes
Processor Information
   Socket Designation: SOCKET 0
   Type: Central Processor
   Family: <OUT OF SPEC>
   Manufacturer: Intel(R) Corporation
   ID: A9 06 03 00 FF FB EB BF
   Version: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
   Voltage: 1.1 V
   External Clock: 100 MHz
   Max Speed: 3800 MHz
   Current Speed: 3400 MHz
   Status: Populated, Enabled
   Upgrade: <OUT OF SPEC>
   L1 Cache Handle: 0x003F
   L2 Cache Handle: 0x003E
   L3 Cache Handle: 0x0040
   Serial Number: Not Specified
   Asset Tag: Fill By OEM
   Part Number: Fill By OEM
   Core Count: 4
   Core Enabled: 4
   Thread Count: 8
   Characteristics:
       64-bit capable

它將是一個系統中的 8 個邏輯核心,如/proc/cpuinfo. 但是誰能說出為什麼cpu MHz一個核心的頻率是1600MHz?我猜一個核心有 2 個執行緒,所以硬體執行緒頻率可能大約是核心的一半?這個數字是如何計算的?

processor   : 7
vendor_id   : GenuineIntel
cpu family  : 6
model       : 58
model name  : Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
stepping    : 9
cpu MHz     : 1600.000
cache size  : 8192 KB
physical id : 0
siblings    : 8
core id     : 3
cpu cores   : 4
apicid      : 7
initial apicid  : 7
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 x2apic popcnt aes xsave avx lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid
bogomips    : 7013.49
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

此外,這裡是lshwlscpu命令的輸出。也有提到1600MHz。

lshw資訊:

#lshw -class processor
 *-cpu                   
      description: CPU
      product: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
      vendor: Intel Corp.
      physical id: 42
      bus info: cpu@0
      version: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
      slot: SOCKET 0
      size: 1600MHz
      capacity: 3800MHz
      width: 64 bits
      clock: 100MHz
      capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp x86-64 constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 x2apic popcnt aes xsave avx lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid cpufreq

lscpu資訊:

#lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
CPU(s):                8
Thread(s) per core:    2
Core(s) per socket:    4
CPU socket(s):         1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 58
Stepping:              9
CPU MHz:               1600.000
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K

現代 CPU 可以在負載要求下動態變化的幾個不同頻率下執行(參見維基百科)。英特爾將此稱為SpeedStep。當 CPU 無事可做時,它會以較低的頻率執行以降低功率(從而降低熱量和風扇噪音)。

所以你看到的 1600Mhz 可能是因為所有的 cpu 都沒有做太多,但它可以上升到某個最大值,比如 3400 Mhz,這取決於 cpu 和主機板架構以及溫度。

我不確定從哪裡/proc/cpuinfo獲得它的單個值,但您可以在 files 中看到單個 cpu 資訊/sys/devices/system/cpu/cpu*/cpufreq/,例如目前頻率:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq

並閱讀更多關於archlinux中的 Linux cpu 頻率縮放軟體。

引用自:https://unix.stackexchange.com/questions/295292