วิธีการปิดการใช้งานระบบย่อย perf ในเคอร์เนล Linux?


15

ฉันใช้การวัดประสิทธิภาพ เกณฑ์มาตรฐานนักวิ่งของฉันตรวจสอบบัฟเฟอร์ dmesg ระหว่างการทดลองค้นหาสิ่งที่อาจส่งผลกระทบต่อประสิทธิภาพ วันนี้มันโยนสิ่งนี้ขึ้น:

[2015-08-17 10:20:14 คำเตือน] ดูเหมือนว่า dmesg จะเปลี่ยนไป! ต่างดังนี้
--- 2015-08-17 09:55:00
+++ 2015-08-17 10:20:14
@@ -825,3 +825,4 @@
 [3.802206] [drm] การเปิดใช้งานสถานะ RC6: เปิด RC6, ปิด RC6p, ปิด RC6pp
 [7.900533] r8169 0000: 06: 00.0 eth0: เชื่อมโยง
 [7.900541] IPv6: ADDRCONF (NETDEV_CHANGE): eth0: ลิงก์พร้อมใช้งาน
+ [236832.221937] การขัดจังหวะแบบสมบูรณ์ใช้เวลานานเกินไป (2504> 2500) ลดเคอร์เนลส่วนต่อขยาย _event_max_sample_rate เป็น 50000

หลังจากการค้นหาบางอย่างตอนนี้ฉันรู้ว่าสิ่งนี้เกี่ยวข้องกับระบบย่อยการทำโปรไฟล์ในเคอร์เนลลินุกซ์ที่เรียกว่า "perf" ฉันไม่คิดว่าเราต้องการสิ่งนี้ดังนั้นฉันจึงต้องการปิดการใช้งานโดยสิ้นเชิง

ค้นหาอีกครั้งฉันพบว่า sysctl perf_cpu_time_max_percentสามารถช่วยได้ ที่นี่มีคนแนะนำให้ปิดการใช้งานโดยการตั้งค่าเป็น 0 อ่านเพิ่มเติมได้ที่นี่ :

perf_cpu_time_max_percent:

คำแนะนำเกี่ยวกับเคอร์เนลจำนวนเวลา CPU ที่ควรได้รับอนุญาตให้ใช้เพื่อจัดการเหตุการณ์การสุ่มตัวอย่างแบบสมบูรณ์ หากระบบย่อย perf ได้รับแจ้งว่าตัวอย่างมีค่าเกินขีด จำกัด นี้ระบบจะลดความถี่ในการสุ่มตัวอย่างเพื่อพยายามลดการใช้งาน CPU

การสุ่มตัวอย่างแบบสมบูรณ์เกิดขึ้นใน NMI หากตัวอย่างเหล่านี้ใช้เวลาดำเนินการนานเกินไปโดยไม่คาดคิด NMI สามารถซ้อนกันได้มากจนไม่มีอะไรได้รับอนุญาตให้ดำเนินการ

0: ปิดใช้งานกลไก อย่าตรวจสอบหรือแก้ไขอัตราการสุ่มตัวอย่างของ perf ไม่ว่าจะใช้เวลา CPU เท่าไหร่ก็ตาม

1-100: พยายามอัตราการส่งข้อมูลตัวอย่างของ throttle เป็นเปอร์เซ็นต์ของ CPU นี้ หมายเหตุ: เคอร์เนลคำนวณความยาว "ที่คาดหวัง" ของแต่ละตัวอย่างเหตุการณ์ 100 ตรงนี้หมายถึง 100% ของความยาวที่คาดหวัง แม้ว่าจะตั้งไว้ที่ 100 คุณอาจยังคงเห็นตัวอย่างการควบคุมปริมาณถ้าเกินความยาวนี้ ตั้งค่าเป็น 0 หากคุณไม่สนใจว่าจะใช้งาน CPU มากเพียงใด

เสียงนี้สำหรับฉันชอบ 0 หมายความว่าอัตราตัวอย่างการทำโปรไฟล์ไม่ได้ถูกตรวจสอบอีกต่อไป แต่ระบบย่อย freq ยังคงทำงานอยู่ (?)

ทุกคนสามารถอธิบายวิธีปิดการทำโปรไฟล์เคอร์เนลด้วย freq ได้อย่างสมบูรณ์หรือไม่

แก้ไข: มีคนแนะนำว่าฉันลองสร้างเคอร์เนลโดยไม่ทำให้สมบูรณ์ แต่ฉันไม่คิดว่ามันจะเป็นไปได้ ตัวเลือกดูเหมือนจะไม่สามารถสลับได้:

menuconfig

แก้ไข 2: หลังจากอ่านเพิ่มเติมฉันตัดสินใจฉันอาจตั้งค่าkernel.perf_event_max_sample_rateเป็นศูนย์ คือไม่มีตัวอย่างต่อวินาที อย่างไรก็ตามคุณไม่สามารถทำเช่นนี้ได้ (ที่มา ):

ส่งมอบ 02f98e3e36da106338b7c732fed516420fb20e2a
ผู้แต่ง: Knut Petersen 
วันที่: พุธ 25 กันยายน 14:29:37 2013 +0200

perf: บังคับให้ 1 เป็นขีด จำกัด ที่ต่ำกว่าสำหรับ perf_event_max_sample_rate

แก้ไข 3: FWIW perf_cpu_time_max_percentตั้งไว้ที่ 25 ซึ่งหมายความว่าเคอร์เนลใช้เวลามากกว่า 25% ของเวลาลงทะเบียนฮาร์ดแวร์ตัวอย่าง นี่เป็นสิ่งที่ยอมรับไม่ได้สำหรับเครื่องเปรียบเทียบ

ตอนนี้ฉันมั่นใจว่าการตั้งค่าperf_cpu_time_max_percentเป็นศูนย์จะยิ่งทำให้สถานการณ์แย่ลงเท่านั้นเนื่องจากเคอร์เนลจะยังคงใช้งานต่อไปมากกว่า 25% ของเวลาที่อ่านการลงทะเบียนฮาร์ดแวร์ ข้อผิดพลาดเกิดขึ้นเพื่อปรับอัตราตัวอย่างดังนั้นพยายามตรวจสอบให้แน่ใจว่าเคอร์เนลตรงตามโควต้าการใช้ <25% ของเวลาได้อย่างสมบูรณ์ 25% ยังสูงเกินไป IMHO

หากฉันไม่สามารถปิดการใช้งาน perf จริง ๆ ได้การประนีประนอมที่ดีที่สุดน่าจะเป็นperf_event_max_sample_rate1

EDIT4: เพื่อนแนะนำว่าฉันอาจตีความความหมายที่ผิดperf_cpu_time_max_percentดังนั้นข้อความข้างต้นอาจไม่ถูกต้อง ค่า 25 บ่งชี้ว่าเคอร์เนลใช้มากกว่า 25% ของความยาวโดยพลการบางส่วนที่สงวนไว้สำหรับการบริการอินเตอร์รัปต์ perf

EDIT5:

ตามที่ระบุไว้ในความคิดเห็น-*-ตัวเลือกที่สมบูรณ์แบบแสดงให้เห็นว่าคุณลักษณะถูกบังคับใช้โดยคุณลักษณะที่เปิดใช้งานอื่น ถ้าฉันดูhelpมันบอกว่าคุณสมบัติเหล่านี้คือ:

ช่วยด้วย

ฉันไม่คิดว่าฉันจะชนะได้ที่นี่ สูตรบูลีนselected byบอกว่า

หากคุณกำหนดเป้าหมาย X86 หรือ ...

ฉันเพิ่งตรวจสอบว่าการกำหนดเป้าหมาย X86_64 เปิดใช้งานจริง ๆCONFIG_X86แล้ว ดังนั้นดูเหมือนว่าเมื่อคุณกำหนดเป้าหมายเป็น X86 หรือ X86_64 คุณจะได้รับความสมบูรณ์แบบ

ดังนั้นฉันต้องการเปลี่ยนคำถามของฉันเป็น:

ฉันสามารถใช้การตั้งค่า perf ใดเพื่อลดเวลาที่เคอร์เนลใช้ในรูทีน perf

โปรดทราบว่าจุดมุ่งหมายโดยรวมคือการควบคุมแหล่งที่มาของการเปลี่ยนแปลงแบบสุ่มสำหรับการเปรียบเทียบ หากฉันไม่สามารถปิดใช้งาน perf ได้ฉันจะลดผลกระทบของการทดสอบได้อย่างไร


1
คุณควรจะสามารถปิดการใช้งาน perf ในหน้าจอก่อนหน้า
Michael Hampton

1
คุณหมายถึง "Profiling support" หรือไม่ หากฉันปิดใช้งานสิ่งนี้ฉันยังคงไม่สามารถยกเลิกการเลือกตัวเลือกดังภาพด้านบน นอกจากนี้ถ้าผมตรวจสอบ .config ฉันมีและCONFIG_HAVE_PERF_EVENTS=y CONFIG_PERF_EVENTS=yฉันไม่คิดว่าสิ่งนี้สมบูรณ์แบบสำหรับผู้พิการ
Edd Barrett

2
ข้อความนี้เป็นข้อมูล เคอร์เนลจะกำหนดอัตราตัวอย่างโดยอัตโนมัติที่สามารถใช้ได้โดยไม่ส่งผลกระทบต่อประสิทธิภาพของระบบและจะบันทึกแม้ในขณะที่ perf ไม่ทำงานหรือติดตั้ง เมื่อโหลดระบบสูงขึ้นหรือมีการปรับความถี่บ่อยครั้งที่คุณจะได้รับข้อความเหล่านั้น
ไบรอัน

1
สัญลักษณ์-*-นี้หมายความว่าระบบย่อยบางระบบขึ้นอยู่กับโมดูล perf Helpแสดงให้เห็นว่าต้นไม้แห่งการอ้างอิงที่คุณจำเป็นต้องปิดการใช้งานในการเปลี่ยนแปลงตัวเลือกในการหรือ[*] [M]
Rufo El Magufo

4
ฉันได้แก้ไขคำถามเพื่อพิจารณาเรื่องนี้แล้ว ในระยะสั้น perf ดูเหมือนว่าจะมีผลบังคับใช้ใน X86_64
Edd Barrett

คำตอบ:


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.