2015-09-12 29 views
51

W Xcode's Instruments znajduje się narzędzie o nazwie Counters, które udostępnia informacje o niskim poziomie liczników dostarczone przez procesor, takie jak liczba wykonanych instrukcji lub liczba chybienia cache:Wartości rekordów liczników monitorowania wydajności (zdarzeń PM) na OS X bez instrumentów

screenshot of Counters tool in Instruments

ta jest podobna do syscall Linux perf_event_open wprowadzonym w systemie Linux 2.6.32. W Linuksie mogę użyć perf_event_open, a następnie uruchomić/zatrzymać profilowanie wokół sekcji mojego kodu, którą jestem zainteresowany. Chciałbym nagrać ten sam typ statystyk na OS X: licząc instrukcje (itp.), Że pewien kawałek kodu, a otrzymanie wyniku w sposób zautomatyzowany. (Nie chcę używać GUI Instruments do analizy danych.)

Czy są jakieś API, które na to pozwalają (np. Używając dtrace lub podobnego)? Z niektórych wyników wyszukiwania wynika, że ​​prywatna wersja AppleProfileFamily.framework może wymagać odpowiednich haczyków, ale nie jest jasne, w jaki sposób połączyć się z nią lub jej używać.

+1

jeden potencjalny rozwiązaniem byłoby użycie kodu Intel PMC, który ujawnia te informacje (http://www.campos.cc/blog/2014/03/15/using-intel-performance-monitor-on-mac-os-x), ale wydaje się, że nie dostarcza ona informacji o procesie, a jedynie sumy, które są mniej przydatne dla mnie. –

+4

Inżynier Apple Kris Markel mówi na Twitterze: "W tej chwili nic nie jest dostępne. Proszę złożyć wniosek o ulepszenie poprzez bugreport.apple.com." (https://twitter.com/existopher/status/644943616889126912) –

+0

[PAPI można skompilować na OS X] (http://icl.cs.utk.edu/papi/forum/viewtopic.php?f=2&t= 1274). Niestety, liczniki sprzętu nie są obsługiwane na tej platformie, a jedynie zdarzenia oprogramowania. To czyni go mniej użytecznym. – Sjlver

Odpowiedz

1

W systemie GNU/Linux używam Intel PCM do monitorowania wykorzystania procesora. Nie jestem pewien, czy działa to dobrze na OSX, ale o ile wiem, kod źródłowy zawiera katalog MacMSRDriver. Nie mam żadnego urządzenia OSX, nigdy go nie testuję.

W przypadku tego źródła kompilowane na swoim urządzeniu, wystarczy uruchomić:

pcm.x -r -- your_program your_program_parameter

lub jeśli chcesz Advanced Profiling, użyj pcm-core.x zamiast lub można zbudować swój własny kod na podstawie pcm-core.cpp

+0

Zauważyłem w komentarzach do mojego pierwotnego pytania, że ​​kext PMC nie wydaje się dostarczać informacji o procesach. Daj mi znać, jeśli czegoś brakuje. –

+0

Nigdy nie używam kextu PMC. Btw, o czym tu wspominam nie jest o PMC, ale o PCM Intela. Możesz zobaczyć dokumentację na https://software.intel.com/en-us/articles/intel-performance-counter-monitor –