2013-06-07 19 views
6

Özeti: perf lock profil pthread_mutex mu?Perf kilit profili kullanıcı alanı muteksleri mi?

Detaylar:

bir seçenek perf lock sahiptir perf aracı.

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. 

Ama perf lock record çalışan çalıştığında ben belirten bir hata var: man sayfası diyor invalid or unsupported event: 'lock:lock_acquire'. Baktım ve benim çekirdek CONFIG_LOCKDEP veya CONFIG_LOCK_STAT ile derlenmiş olmadığından hata muhtemelen gibi görünüyor.

Sorum şu: (pthread_mutex gibi) kullanıcı uzay kilitler veya tek çekirdek kilitleri ile ilgili perf lock rapor olayları nedir? Daha çok kullanıcı alanında çalışan profil oluşturma uygulamasıyla daha çok ilgileniyorum. Bu seçeneğin, ilginç gözüktüğünü düşündüm, ama yeni bir çekirdeği derleme (veya alma) olmadan çalıştıramadığımdan, denemeden önce ne yaptığına dair daha iyi bir fikir edinmek istiyorum.

cevap

3

Özet: perf profil pthread_mutex kapatıyor mu?

Özet: no, çünkü pthread_mutex kullanıcı alanında tanımlanmış hiçbir iz yok.

(-e TRACEPOINT_NAME ile) perf record için çeşitli tracepoints tanımlar ve aynı zamanda perf report için seçenekleri -R -m 1024 -c 1 geçmesi __cmd_record aramaları cmd_lock kaynak dosyası tools/perf/builtin-lock.c (http://lxr.free-electrons.com/source/tools/perf/builtin-lock.c#L939) göre. tanımlanmış tracepoints listesi: 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 tanımlanmıştır. Ve trace_lock_acquire yalnızca çekirdek/kilitleme/lockdep.c tanımlanmıştır (debian kod temeli yeniden kontrol: http://codesearch.debian.net/search?q=trace_lock_acquire). Sadece CONFIG_LOCKDEP kernel/locking/Makefile göre Çekirdeğiniz eksik:. obj-$(CONFIG_LOCKDEP) += lockdep.o (tracepoints lockdep.c içinde koşulsuz tanımlanmıştır

https://www.kernel.org/doc/Documentation/trace/tracepoints.txt göre tüm tracepoints çekirdek sadece, bu yüzden perf lock profil olmaz kullanıcı uzay kilitler

bulunmaktadır. sen LTTng, (http://lttng.org/ust) kullanıcı uzay tracepoints beyan proje arasından tracepoints deneyebilirsiniz. Ancak hiçbir hazır kilit istatistikler, tracepoints sadece ham veri olacaktır. Ayrıca pthreads/glibc (makro tracef() ile tracepoints tanımlamak yeniden derlemek gerekir, ya da denemek pthread etrafında kendi sarmalayıcı oluşturmak için)

İlgili konular