ขณะนี้ CPU ส่วนใหญ่มีความสามารถในการปรับความเร็วเพื่อช่วยในการประหยัดพลังงานแบตเตอรี่ โดยทั่วไปแล้วมันเรียกว่าความถี่ CPU ปรับ ความเร็วของ CPU แบบเรียลไทม์รายงานโดย:
$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
ความเร็ว CPU แบบสัมบูรณ์ (สูงสุด) กำลังถูกรายงานโดยสิ่งนี้:
$ cat /proc/cpuinfo
บรรทัดนี้โดยเฉพาะ:
model name : Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
บรรทัดที่แสดงcpu MHz
ไม่แสดงความเร็วสูงสุดของ CPU ของคุณ ค่านี้เป็นความเร็วปัจจุบันของคุณ บนระบบมัลติคอร์เช่น i7 หรือ i5 คุณสามารถเห็นสิ่งนี้ได้ด้วยคำสั่งนี้:
$ cat /proc/cpuinfo |grep MHz
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 2667.000
อย่างไรก็ตามคุณสามารถดูความเร็วสูงสุด (สูงสุด) ด้วยคำสั่งนี้:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 4
Thread(s) per core: 2
Core(s) per socket: 2
CPU socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Stepping: 5
CPU MHz: 2667.000
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
หมายเหตุ: จำนวนแกนที่มีNUMAS node0 CPU(s)
คือ 4 คือ 0,1,2 และ 3
การปรับซีพียูและการควบคุม
โหมดที่ระบบของคุณใช้อยู่เรียกว่าเครื่องปรับขนาด คล้ายกับผู้ว่าการรถ คุณสามารถดูว่าอันไหนใช้ได้กับคำสั่งนี้:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
powersave ondemand userspace performance
นอกจากนี้คุณยังสามารถดูว่าอันใดที่เปิดใช้งานอยู่ในปัจจุบัน:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand
หมายเหตุ:คำสั่งฉันแสดงเฉพาะ ได้แก่ ซีพียู cpu0
1, คุณสามารถแทนที่ใน*
ในเส้นทางเพื่อดูแกนทั้งหมดหรือคุณสามารถเลือกดูcpu1
เป็นต้น
คุณสามารถดูความเร็ว CPU สูงสุด & ต่ำสุดที่ใช้ได้สำหรับโปรไฟล์ของผู้ว่าการของคุณ:
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
2667000
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
1199000
รายละเอียดเพิ่มเติมมีอยู่ในบทความนี้หัวข้อ: การปรับความถี่ของ CPU ในลินุกซ์กับ cpufreq
แล้ว cpuinfo_cur_freq ล่ะ
พารามิเตอร์นี้เกี่ยวข้องกับสเปคของ CPU มากขึ้นและมีโปรไฟล์ใดบ้างในปัจจุบันมากกว่าสิ่งใดที่มีประโยชน์เกี่ยวกับการทำงานของ CPU ในปัจจุบัน สำหรับ telemetry ที่ใช้งานจริงฉันจะใช้scaling_*
เคอร์เนลที่ปรับได้
ตัวอย่าง
ฉันวางสคริปต์ต่อไปนี้เข้าด้วยกันเพื่อแสดงคอลัมน์ CPU Cores ดังนั้นมันจะง่ายกว่าที่จะดูว่า Kernel tunables ต่างๆนั้นมีลักษณะอย่างไร:
#!/bin/bash
nthCore=$(lscpu|grep node0|cut -d"-" -f2)
for i in /sys/devices/system/cpu/cpu0/cpufreq/{cpuinfo,scaling}_*; do
pname=$(basename $i)
[[ "$pname" == *available* ]] || [[ "$pname" == *transition* ]] || \
[[ "$pname" == *driver* ]] || [[ "$pname" == *setspeed* ]] && continue
echo "$pname: "
for j in `seq 0 $nthCore`;do
kparam=$(echo $i | sed "s/cpu0/cpu$j/")
sudo cat $kparam
done
done | paste - - - - - | column -t
เมื่อคุณรันมันคุณจะได้ผลลัพธ์ต่อไปนี้:
$ ./cpuinfo.bash
cpuinfo_cur_freq: 2667000 2667000 2667000 2667000
cpuinfo_max_freq: 2667000 2667000 2667000 2667000
cpuinfo_min_freq: 1199000 1199000 1199000 1199000
scaling_cur_freq: 2667000 2266000 1333000 2667000
scaling_governor: ondemand ondemand ondemand ondemand
scaling_max_freq: 2667000 2667000 2667000 2667000
scaling_min_freq: 1199000 1199000 1199000 1199000
คุณสามารถเห็นได้ว่าscaling_cur_freq
tunable กำลังแสดงการชะลอตัวใน core # 1 & 2
/proc/cpuinfo
รายงานเหมือนกันcpuinfo_cur_freq
หรือ มันไม่ชัดเจน! หัวใจของคำถามของฉันยังคงไม่ได้รับการแก้ไข ฉันได้เปิดเผยเครื่องมือนี้ซึ่งดูเหมือนว่าจะรายงาน "ความถี่ที่แท้จริง" อย่างใดอย่างหนึ่ง แต่ฉันไม่แน่ใจว่ามันทำงานได้อย่างถูกต้อง มันให้บางแหล่งที่มาสำหรับอัลกอริทึมของมัน แต่ไม่ได้ให้คำอธิบายที่ดีสำหรับความคลาดเคลื่อน