2015-01-26 2 views
1

나는 프로젝트에서 일하고 있는데 나는 시스템 호출의 성능 카운터 (캐시, TLB 등) 값을 얻고 싶다. (예 : read()). 파일.시스템 호출 하드웨어 성능 카운터 우분투

우분투에서 perf를 사용하여이 작업을 시도했지만 어떤 결과도 얻을 수 없었습니다. perf 또는 어쩌면 다른 도구를 사용하여 작업을 수행 할 수 있습니까?

도움 주셔서 감사합니다.

3.329057 task-clock (msec)   # 0.714 CPUs utilized   
16 context-switches    # 0.005 M/sec     
0 cpu-migrations     # 0.000 K/sec     
257 page-faults     # 0.077 M/sec     
1,983,212 cycles     # 0.596 GHz      
1,352,902 stalled-cycles-frontend # 68.22% frontend cycles idle 
1,080,180 stalled-cycles-backend # 54.47% backend cycles idle 
1,336,919 instructions    # 0.67 insns per cycle   
            # 1.01 stalled cycles per insn 
     267,730 branches   # 80.422 M/sec     
     <not counted> branch-misses   

    0.004663489 seconds time elapsed 
+0

문제가있는 곳을 알려 주려고 시도한 코드를 게시하십시오. –

+0

1. sudo로 실행해야합니다. 2. 커널 디버그 정보로 perf를 설치해야합니다. 설치가 완료되지 않은 상태에서'[not supported]'를 볼 수 있습니다. 3.'sudo perf stat -p [pid]'를 시도하고 여기에 결과를 추가하십시오. – qqibrow

+0

위 코드를 코드로 편집했습니다. 'ls'에 대한 성능 카운터 통계입니다. – user782400

답변

2

(출력이 당신에 의해 인용되었다) 단지 perf stat에서 사용하는 것을 좋아 모드를 계산에 perf_event_open을위한 작은 랩퍼 라이브러리 https://github.com/castl/easyperf이 있습니다.

당신은 설정 HW 이벤트 (사용 계산 커널과 - easyperf에 PERFMON_EVENTSEL_OS 플래그)를 계산 할 수 있습니다 다음 새 읽고 다음 프로파일 링 할 다음 기능 (콜)를 실행, 래퍼에 카운터 perf_read_all의 현재 값을 읽고, 카운터 값. 이전 값과 새로운 값의 차이는 목표 함수 비용의 추정입니다. 이 테스트를 확인, 대상 기능 foo입니다 :

https://github.com/castl/easyperf/blob/master/test.c

perf_event_open에서 얼굴을 카운터를 판독하는 것은 여러 read 콜을 통해 이루어집니다 때문에 너무 작은 전화를 측정 할 수 없습니다. 그래서 몇 가지 유사한 syscall (100 또는 1000 루프)을 수행하거나 더 많은 작업을 수행하는 syscall을 수행하거나 hw 카운터를 얻기 위해 오버 헤드를 측정하려고 시도합니다 (비어있는 'foo'함수를 측정하여 오버 헤드를 얻은 다음 대상 short 함수를 측정합니다. 차이점을 비교하십시오.)