Linux
超執行緒 cpu 的 /proc/cpuinfo 中的“cpu MHz”欄位是什麼意思?
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:
此外,這裡是
lshw
和lscpu
命令的輸出。也有提到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 頻率縮放軟體。