userspace 'perf'도구를 실행하려면 루트 (관리자) 권한이 필요합니까? (perf 이벤트는 Linux 커널에서 사용 가능합니다)


25

perf시스템 관리자 (루트)로 사용자 공간 도구 를 실행해야합니까 , 아니면 일반 사용자로 도구 (또는 최소한 일부 하위 명령)를 실행할 수 있습니까?


2
권한이 부족하여 필요한 작업을 수행 할 수없는 Unix 프로그램은 일반적으로 작업을 수행 할 수없는 경우 오류를 발생시킵니다. 그것을 실행하고 참조하십시오!
Caleb

1
perf도구의 사용자 공간 부분 (일반적이지 않은 $ HOME)을 설치할 가치가 있는지 여부를 결정하기 위해이 질문을하고 있습니다 (사소하지 않을 수도 있음).
Jakub Narębski 12

Ubuntu의 FYI perflinux-tools패키지로 제공되므로 설치 perf가 간단합니다.
Jakub Narębski

1
@ JakubNarębski : 자신의 컴퓨터가 아니고 관리자가 패키지 설치를 꺼리는 경우를 제외하고.
마틴 Ueding

답변:


33

perf루트가 아닌 상태에서 할 수있는 작업 은 sysctl 설정 에 따라 다릅니다 .kernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2 : 측정 할 수 없습니다. perf유틸리티는 여전히 기존 기록을 분석하는 데 유용 할 수 있습니다 perf ls, perf report, perf timechart또는 perf trace.
  • kernel.perf_event_paranoid= 1 : perf stat또는 로 명령을 추적하고 perf record커널 프로파일 링 데이터를 얻을 수 있습니다.
  • kernel.perf_event_paranoid= 0 : perf stat또는 로 명령을 추적하고 perf recordCPU 이벤트 데이터를 가져올 수 있습니다.
  • kernel.perf_event_paranoid= -1 : 커널 추적 점에 대한 원시 액세스 권한을 얻습니다 (구체적으로 mmap파일을 만들 수 있습니다 perf_event_open.

1
좋은. cat /proc/sys/kernel/perf_event_paranoid1을 반환하므로 적어도 몇 가지 측정을 수행 할 수있을 것 같습니다 (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 이벤트"는 프로세스 / 스레드 대신 전체 코어에서 모든 것을 프로파일 링하는 것을 의미합니다. 즉 paranoid = 1 이상은 다른 사용자의 코드를 프로파일 링하지 못하게하고 1은 자신의 프로세스 (시스템 호출)에 의해 호출 된 커널 코드 만 프로파일 링 할 수 있습니다.
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.