ฉันต้องมีสิทธิ์รูท (admin) เพื่อเรียกใช้เครื่องมือ 'perf' userspace หรือไม่ (เหตุการณ์ perf ถูกเปิดใช้งานในเคอร์เนล Linux)


25

ฉันจำเป็นต้องเรียกใช้perfเครื่องมือ userspace ในฐานะผู้ดูแลระบบ (รูท) หรือฉันสามารถรัน (หรืออย่างน้อยคำสั่งย่อยบางอย่าง) ในฐานะผู้ใช้ธรรมดาได้หรือไม่?


2
โปรแกรม Unix ที่ไม่สามารถทำสิ่งที่พวกเขาต้องทำหากขาดการอนุญาตมักจะเกิดข้อผิดพลาดหากพวกเขาไม่สามารถทำงานได้ เรียกใช้และดู!
Caleb

1
ฉันถามคำถามนี้เพื่อตัดสินใจว่าควรลองติดตั้ง (ในฐานะผู้ใช้ทั่วไปใน $ HOME) เป็นส่วนใดส่วนหนึ่งของperfเครื่องมือ (ซึ่งเป็น / อาจไม่ไร้สาระ)
Jakub Narębski

FYI ใน Ubuntu perfอยู่ในlinux-toolsแพ็คเกจดังนั้นการติดตั้งperfจึงง่าย
Jakub Narębski

1
@ JakubNarębski: ยกเว้นในกรณีที่ไม่ใช่เครื่องของคุณเองและผู้ดูแลระบบไม่เต็มใจที่จะติดตั้งแพคเกจ
Martin Ueding

คำตอบ:


33

คุณสามารถทำอะไรด้วยperfโดยไม่ต้องรากขึ้นอยู่กับการตั้งค่า sysctlkernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2: คุณไม่สามารถทำการวัดใด ๆ perfยูทิลิตี้ยังคงอาจจะมีประโยชน์ในการวิเคราะห์ระเบียนที่มีอยู่กับperf ls, perf report, หรือperf timechartperf trace
  • kernel.perf_event_paranoid= 1: คุณสามารถติดตามคำสั่งด้วยperf statหรือperf recordและรับข้อมูลการทำโปรไฟล์เคอร์เนล
  • kernel.perf_event_paranoid= 0: คุณสามารถติดตามคำสั่งด้วยperf statหรือperf recordและรับข้อมูลเหตุการณ์ CPU
  • kernel.perf_event_paranoid= -1: คุณได้รับสิทธิ์เข้าถึง raw tracepoints ของเคอร์เนล (โดยเฉพาะคุณสามารถmmapสร้างไฟล์โดยperf_event_openฉันไม่รู้ว่าความหมายของมันคืออะไร)

1
ดี cat /proc/sys/kernel/perf_event_paranoidส่งคืน 1 ดังนั้นดูเหมือนว่าฉันจะสามารถทำการวัดอย่างน้อย (BTW. ความแตกต่างระหว่าง "ข้อมูลโปรไฟล์เคอร์เนล" และ "ข้อมูลเหตุการณ์ CPU" คืออะไรอ้างอิงเพียงพอ)
Jakub Narębski

2
@Jakub: จากสิ่งที่ฉันเข้าใจเหตุการณ์เคอร์เนลช่วยให้คุณเห็นการเรียกไปยังฟังก์ชั่นเคอร์เนลต่างๆ เหตุการณ์ของ CPU เป็นตัวนับใน CPU ที่บอกจำนวนครั้งของตำแหน่งเฉพาะในหน่วยความจำ ฉันไม่เคยใช้มันดังนั้นฉันจึงไม่สามารถบอกคุณเกี่ยวกับพวกเขาได้อีก LWNมีบทความเกี่ยวกับหัวข้อค่อนข้างน้อยและยังคงพัฒนาอยู่
Gilles 'SO- หยุดความชั่วร้าย'

4
ด้วย paranoid = 2 คุณยังสามารถโปรไฟล์รหัสของคุณเองในพื้นที่ผู้ใช้ (เช่นperf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}'จะแสดงรอบผู้ใช้พื้นที่และการนับการเรียนการสอนที่ถูกต้องและคุณสามารถได้รับการนับuops_issued.any และอื่น ๆ ) แต่คุณไม่ได้รับการนับรหัส ที่รันระหว่างการเรียก / การขัดจังหวะระบบ ดังนั้นความถี่ของ CPU ที่รายงาน (รอบ / เวลา) นั้นต่ำกว่าค่าจริงเล็กน้อยอย่างน้อยเพราะเวลาที่ใช้ในเคอร์เนล ดูเพิ่มเติมข้อ จำกัด คืออะไร perf_event_paranoid == 1 จริง ๆ แล้ววางบน x86 perf?
Peter Cordes

"เหตุการณ์ CPU" หมายถึงการทำโปรไฟล์ทุกอย่างบนคอร์ทั้งหมดแทนที่จะเป็นแบบต่อกระบวนการ / เธรด ie paranoid = 1 หรือสูงกว่าหยุดคุณจากการทำโปรไฟล์รหัสของผู้ใช้รายอื่นและ 1 ช่วยให้คุณโปรไฟล์รหัสเคอร์เนลที่เรียกใช้โดยกระบวนการของคุณเอง (ระบบเรียก)
Peter Cordes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.