Tôi có cần quyền root (quản trị viên) để chạy công cụ 'perf' không gian người dùng không? (sự kiện hoàn hảo được kích hoạt trong nhân Linux)


25

Tôi có cần phải chạy perfcông cụ không gian người dùng với tư cách quản trị viên hệ thống (root) hay tôi có thể chạy nó (hoặc ít nhất là một số tiểu ban) như một người dùng thông thường không?


2
Các chương trình Unix không thể làm những gì họ cần làm vì thiếu quyền thường sẽ gây ra lỗi nếu họ không thể thực hiện công việc của mình. Chạy nó và xem!
Caleb

1
Tôi đang đặt câu hỏi này để quyết định xem có đáng để thử cài đặt (như người dùng thông thường, trong $ HOME) phần không gian người dùng của perfcông cụ (có thể / không tầm thường).
Jakub Narębski

FYI trong Ubuntu perflinux-toolsgói, vì vậy việc cài đặt perfrất đơn giản.
Jakub Narębski

1
@ JakubNarębski: Ngoại trừ nếu đó không phải là máy của riêng bạn và quản trị viên không muốn cài đặt gói.
Martin Uting

Câu trả lời:


33

Những gì bạn có thể làm perfmà không cần root tùy thuộc vào cài đặt sysctl .kernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2: bạn không thể thực hiện bất kỳ phép đo nào. Các perftiện ích vẫn có thể có ích để phân tích hồ sơ hiện tại với perf ls, perf report, perf timecharthoặc perf trace.
  • kernel.perf_event_paranoid= 1: bạn có thể theo dõi một lệnh bằng perf stathoặc perf record, và lấy dữ liệu lược tả kernel.
  • kernel.perf_event_paranoid= 0: bạn có thể theo dõi một lệnh bằng perf stathoặc perf record, và lấy dữ liệu sự kiện CPU.
  • kernel.perf_event_paranoid= -1: bạn có quyền truy cập thô vào các tracepoint của kernel (cụ thể, bạn có thể mmaptạo tệp được tạo bởi perf_event_open, tôi không biết ý nghĩa của nó là gì).

1
Tốt đẹp. cat /proc/sys/kernel/perf_event_paranoidtrả về 1, vì vậy có vẻ như tôi sẽ có thể thực hiện ít nhất một số phép đo (BTW. sự khác biệt giữa "dữ liệu lược tả kernel" và "dữ liệu sự kiện CPU"? Tham khảo là đủ)
Jakub Narębski

2
@Jakub: Theo những gì tôi hiểu, các sự kiện kernel cho phép bạn xem các cuộc gọi đến các hàm kernel khác nhau. Các sự kiện CPU là các bộ đếm trong CPU cho bạn biết số lần một vị trí cụ thể trong bộ nhớ bị tấn công. Tôi chưa bao giờ sử dụng chúng, vì vậy tôi không thể nói cho bạn biết thêm về chúng; LWN có khá nhiều bài viết về chủ đề này và nó vẫn đang phát triển.
Gilles 'SO- ngừng trở nên xấu xa'

4
Với paranoid = 2, bạn vẫn có thể cấu hình mã của riêng mình trong không gian người dùng (ví dụ: perf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}'sẽ hiển thị số lượng lệnh và chu kỳ không gian chính xác của người dùng và thậm chí bạn có thể nhận được số đếm uops_issued.any , v.v.), nhưng bạn không được tính mã chạy trong các cuộc gọi / ngắt hệ thống. Vì vậy, tần số CPU được báo cáo (chu kỳ / thời gian) ít nhất thấp hơn một chút so với thực tế do thời gian dành cho kernel. Xem thêm Hạn chế nào là perf_event_paranoid == 1 thực sự đưa vào x86 perf?
Peter Cordes

"Sự kiện CPU" có nghĩa là cấu hình mọi thứ trên toàn bộ lõi, thay vì theo quy trình / luồng. tức là paranoid = 1 hoặc cao hơn ngăn bạn lập hồ sơ mã của người dùng khác và 1 chỉ cho phép bạn cấu hình mã hạt nhân được gọi bởi các quy trình của riêng bạn (các cuộc gọi hệ thống.)
Peter Cordes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.