2013-06-07 7 views
6

요약 : perf lock 프로필 pthread_mutex?perf lock 프로필 사용자 공간 뮤텍스가 있습니까?

세부 :

옵션 perf lock있다 perf 도구.

You can analyze various lock behaviours and statistics with this perf lock command. 
    'perf lock record <command>' records lock events 
    between start and end <command>. And this command 
    produces the file "perf.data" which contains tracing 
    results of lock events. 

    'perf lock trace' shows raw lock events. 

    'perf lock report' reports statistical data. 

을하지만 perf lock record를 실행하려고 할 때 내가 말하는 오류 가지고 : 남자 페이지는 말한다 invalid or unsupported event: 'lock:lock_acquire'합니다. 나는 보았다. 아마 내 커널이 CONFIG_LOCKDEP 또는 CONFIG_LOCK_STAT으로 컴파일되지 않았기 때문에 오류가있는 것으로 보인다.

내 질문은 : perf lock 사용자 공간 잠금 (예 : pthread_mutex) 또는 커널 잠금과 관련된 이벤트를보고합니까? 나는 주로 사용자 공간에서 실행되는 프로파일 링 어플리케이션에 더 관심이 있습니다. 필자는 perf에서이 옵션이 재미 있다고 생각했지만, 새로운 커널을 컴파일 (또는 가져 오기)하지 않고는 실행할 수 없기 때문에 시도하기 전에 무엇을하는지 더 잘 이해하고 싶습니다.

답변

3

요약 : perf lock 프로필은 pthread_mutex입니까?

요약 : 사용자 공간 pthread_mutex에 정의 된 추적 점이 없으므로 no입니다.

(-e TRACEPOINT_NAME를 통해) perf record 여러 추적 점을 정의하고 또한 perf report에 옵션을 -R -m 1024 -c 1을 통과 __cmd_record를 호출 cmd_lock 소스 파일 tools/perf/builtin-lock.c (http://lxr.free-electrons.com/source/tools/perf/builtin-lock.c#L939)에 따르면. 정의 된 추적 점의 목록 : lock_tracepoints :

842 static const struct perf_evsel_str_handler lock_tracepoints[] = { 
843   { "lock:lock_acquire", perf_evsel__process_lock_acquire, }, /* CONFIG_LOCKDEP */ 
844   { "lock:lock_acquired", perf_evsel__process_lock_acquired, }, /* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */ 
845   { "lock:lock_contended", perf_evsel__process_lock_contended, }, /* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */ 
846   { "lock:lock_release", perf_evsel__process_lock_release, }, /* CONFIG_LOCKDEP */ 
847 }; 

TRACE_EVENT(lock_acquire,..trace/events/lock.h에 정의되어 있습니다. trace_lock_acquire은 kernel/locking/lockdep.c (debian 코드베이스 : http://codesearch.debian.net/search?q=trace_lock_acquire에서 다시 확인)에서만 정의됩니다. 만 CONFIG_LOCKDEP는 kernel/locking/Makefile에 따라 커널에서 누락되었습니다. obj-$(CONFIG_LOCKDEP) += lockdep.o은 (트레이스가 lockdep.c에 무조건 정의

https://www.kernel.org/doc/Documentation/trace/tracepoints.txt에 따르면 모든 추적 점 커널 전용, 그래서 perf lock 프로필하지 않습니다 사용자 공간 잠금

있습니다. 사용자 공간 트레이스 포인트 (http://lttng.org/ust)를 선언 한 프로젝트 인 LTTng에서 트레이스 포인트를 시도 할 수 있습니다.하지만 준비 잠금 통계는없고 트레이스 포인트에 원시 데이터 만 있습니다. 또한 tracef() 매크로로 추적 포인트를 정의해야합니다 (pthreads/glibc를 재 컴파일하거나 pthread 주위에 자신 만의 래퍼를 만들 수 있습니다.)