Intel i7-1065G7 ไม่ถึงความถี่เทอร์โบบูสต์สูงสุด
ฉันมีแล็ปท็อปที่ใช้ซีพียูIntel i7-1065G7 turbostat
รายงาน
35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores
(นี่คือ 4 คอร์เสมือนจริง / 8 คอร์) เมื่อฉันโยนโหลดเธรดเดี่ยวขนาดใหญ่ (คำนวณค่า pi ด้วยmpfr
) ที่ซีพียูฉันสังเกตว่าสองคอร์ (อาจเป็นหนึ่งคอร์ทางกายภาพ?) ทำงานที่ 3500 MHz ในขณะที่อีกแกนมีค่าต่ำกว่า ความถี่. แต่พวกเขาไม่เคยไปถึงความถี่บูสต์เทอร์โบที่สูงขึ้น
หากฉันปิดการใช้งานคอร์ซีพียูบางตัว (เช่นกับecho 0 > /sys/devices/system/cpu/cpu[2-7]*/online
) แล็ปท็อปจะไปถึงความถี่เทอร์โบบูสต์ที่สูงขึ้นซึ่งส่งผลให้ประสิทธิภาพเพิ่มขึ้น (งานที่ใช้เวลาโดยเฉลี่ย 18.5 วินาทีก่อนหน้านี้ใช้เวลา 16.8)
ฉันจะทำให้แล็ปท็อปเครื่องใหม่มีความเร็วสัญญาณนาฬิกาสูงสุดได้อย่างไรเมื่อไม่จำเป็นต้องใช้คอร์ทั้งหมด
ฉันใช้ Ubuntu 20.04 กับเคอร์เนล 5.4.0 บนแล็ปท็อป HP Envy x360
สิ่งที่ฉันคาดหวัง:บนแล็ปท็อปเครื่องเก่าที่มีi7-4712MQ turbostat
ให้
30 * 100.0 = 3000.0 MHz max turbo 4 active cores
30 * 100.0 = 3000.0 MHz max turbo 3 active cores
32 * 100.0 = 3200.0 MHz max turbo 2 active cores
33 * 100.0 = 3300.0 MHz max turbo 1 active cores
(นี่คือเครื่องแกน 4/8 ด้วย) บนเครื่องนี้โหลดคอร์เดียวทำให้หนึ่งคอร์เพิ่มขึ้นเป็นเกือบ 3.3 GHz ภายใต้โหลดสองคอร์สองนาฬิกาที่ 3.2 GHz เป็นต้น
ฉันไม่ได้ตรวจสอบความถี่ซีพียูแต่ละความถี่ใน Windows แต่บางครั้งตัวจัดการงานจะแสดงความถี่ที่สูงกว่า 3.7GHz
อัปเดต:ปัญหาจึงหายไป ... ฉันไม่รู้ว่าทำไม ฉันถอนการติดตั้งlinux-cloud-tools
แต่ไม่คิดว่าจะเป็นเหตุผล
คำตอบ
คุณเขียน...
เมื่อฉันโยนโหลดเธรดเดี่ยวขนาดใหญ่
หากโปรแกรมของคุณเป็นเธรดเดียวก็ไม่จำเป็นต้องไปที่ความถี่สูงสุดในเธรดอื่น ๆ
ลิงก์ของคุณมีไว้สำหรับโปรเซสเซอร์Intel® Core ™ i7-1065G7
เอกสาร Intel ที่คุณเชื่อมโยงระบุว่าสูงสุดคือ 3900 MHz ดูเหมือนว่าข้อมูลของคุณจะแสดงว่ามีคอร์ที่ 3900 MHz ดังนั้นฉันจึงไม่รู้ว่าทำไมคุณถึงคิดว่ามันไม่ถึงขีดสุด คุณโพสต์สิ่งนี้ ...
35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores
โดยทั่วไปถ้าการอ่านไม่ใช่ความถี่สูงสุดเป็นเพราะมันทำเช่นนั้นเป็นระยะ ๆ เท่านั้นดังนั้นการวัดจะแสดงให้เห็นเป็นระยะ ๆ เท่านั้นหรือไม่จำเป็นต้องอยู่ที่ความถี่สูงสุดเนื่องจากมีข้อ จำกัด บางอย่างเช่น IO อย่าเพิ่งกังวลไป หากคุณเขียนโปรแกรมที่ไม่มีข้อ จำกัด กล่าวอีกนัยหนึ่งก็คือมันเป็นเธรดที่มีข้อ จำกัด ในการคำนวณฉันรับประกันว่ามันจะไปที่ความถี่สูงสุด
เวลาที่ผ่านไป 18.5 วินาทีอาจไม่มีความหมายเนื่องจากเอฟเฟกต์แบบสุ่มที่คุณไม่ต้องการใช้เพื่อสรุปผล งานที่ทำงานเป็นเวลานาน 200 วินาทีขึ้นไปอาจให้ข้อมูลที่มีความหมายมากขึ้น
ฉันพบสิ่งที่คล้ายกันในการตั้งค่าที่คล้ายกัน (CPU i7-9700K, Ubuntu 18.04) และฉันคิดว่าการใช้งานเครื่องของฉันอาจจะคล้ายกัน: เป็นเครื่องเดสก์ท็อปที่ฉันใช้สำหรับการเรียกใช้แอปพลิเคชันที่เข้มข้น (แต่มีเธรดเดียว) ในขณะเดียวกันก็อาจมีเว็บเบราว์เซอร์และแอปส่งข้อความบางตัวเปิดอยู่ ฉันพบข้อเสนอแนะในความคิดเห็นใต้โพสต์เดิมที่ใช้งานได้ - การตั้งค่าความสัมพันธ์ของ CPU สำหรับกระบวนการ ฉันเคยtaskset
ทำมัน [1]
การทดสอบครั้งแรก (ไม่มีการเปลี่ยนแปลงการตั้งค่าความสัมพันธ์): ทั้ง 8 คอร์ 'ไม่ทำงาน' ที่การใช้ประโยชน์ ~ 10% ฉันเริ่มงานที่เน้น CPU แบบเธรดเดียว หนึ่งในแกนกระโดดถึง 100% ผมเห็น 3.6 GHz (สูงสุดโดยไม่ต้องเทอร์โบ) i7z
บนแกนทั้งหมดที่ใช้
การทดสอบที่สอง: จำกัด กระบวนการทำงานทั้งหมดเพื่อให้แกน CPU 0 & 1 กับ: ตอนนี้ 2 คอร์เหล่านั้นนั่งที่ 30-40% ส่วนที่เหลือเป็น 0% (แม้ว่าคอร์อื่น ๆ บางคอร์อาจเริ่มรับกิจกรรมเมื่อระบบปฏิบัติการเริ่มดำเนินการ) จากนั้นเริ่มงานแบบเร่งรัด CPU แบบเธรดเดียว หนึ่งคอร์กระโดดถึง 100% แต่ตอนนี้ฉันเห็นว่ามันไปถึงความถี่เทอร์โบสูงสุดที่ 4.9 GHz หลังจากนั้นฉันตั้งค่าความสัมพันธ์กลับไปใช้คอร์ทั้งหมดโดยแทนที่ช่วงด้วยในกรณีของฉันfor i in `sudo ps -aux | awk '{ print $2 }'`; do sudo taskset -a -p -c 0-1 $i; done
0-1
0-7
[1] http://manpages.ubuntu.com/manpages/focal/man1/taskset.1.html