Chạy perf mà không có quyền root


27

Tôi đang chạy thử nghiệm debian với kernel 4.1 và phiên bản 4.1 của perfcông cụ. Trong phiên bản này, họ dường như đã thêm một số loại bảo vệ để ngăn người dùng bình thường thu thập dữ liệu từ công cụ đó. Vì vậy, chạy perfnhư người dùng bình thường sẽ đưa ra lỗi này:

perf stat ls
Error:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
 -1 - Not paranoid at all
  0 - Disallow raw tracepoint access for unpriv
  1 - Disallow cpu events for unpriv
  2 - Disallow kernel profiling for unpriv

perf_event_paranoidchứa 3 trong cài đặt của tôi. Thật không may, tôi không thể thay đổi tập tin đó ngay cả khi root. Làm cách nào tôi có thể cho phép người dùng của mình sử dụng perfmà không có quyền sudo?

Tôi có một ứng dụng tôi muốn điểm chuẩn không cần root và tôi không muốn chạy nó với quyền root để đánh giá nó.


perf stat -e cycles:uhoạt động không? Giá trị "3" perf_event_paranoidđã được thêm vào năm 2016 lwn.net/Articles/696216 "Không cho phép perf_event_open ()" và đã được bật trong "Android và Debian" (cũng là lkml.org/lkml/2016/1/11/587 bug.launchpad . net / bug / 1612790 debian.org/security/2017/dsa-3791 )
osgx

1
@osgx: Đối với tôi với chứng hoang tưởng cấp 3, đề xuất của bạn không hoạt động, tôi vẫn không được phép sử dụng nó.
Martin Uting

Câu trả lời:


41

Các tệp trong /procđó có thể ghi thường được thay đổi bằng cách lặp lại một giá trị vào chúng. Bạn nên thử:

sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'

Các tệp bên dưới /proc/sys/cũng có lệnh sysctl để dễ dàng truy cập, vì vậy bạn có thể thay vào đó:

sudo sysctl -w kernel.perf_event_paranoid=1

(mặc dù -wcho ghi có vẻ là không bắt buộc). Để đảm bảo điều này được thực hiện khi khởi động, hãy tạo /etc/sysctl.d/99-mysettings.conftệp của riêng bạn với dòng

kernel.perf_event_paranoid=1

Chọn một tên tệp sẽ không ghi đè các tệp hiện có trong /run/sysctl.d//usr/lib/sysctl.d/. Xem người đàn ông sysctl.d .


12
Để tiếp tục khởi động lại:sudo sh -c 'echo kernel.perf_event_paranoid=1 > /etc/sysctl.d/local.conf'
Márcio

1
thêm bình luận vào câu trả lời, làm ơn
Leos313

1
@ Leos313 đã xong. cảm ơn đã nhắc nhở
meuh

@ Márcio: Bạn muốn thêm vào local.conf, chứ không phải cắt ngắn. Hoặc viết thư cho/etc/sysctl.d/perf.conf
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.