2015-09-12 15 views
51

Negli strumenti Xcode, esiste uno strumento chiamato Counters che espone informazioni di contatore di basso livello fornite dalla CPU, come il numero di istruzioni eseguite o il numero di cache miss:Registra i valori dei contatori di Performance Monitor (eventi PM) su OS X senza strumenti

screenshot of Counters tool in Instruments

Questo è simile alla chiamata di sistema Linux perf_event_open introdotto in Linux 2.6.32. Su Linux, posso usare perf_event_open quindi avviare/interrompere la profilazione intorno alla sezione del mio codice che mi interessa. Mi piacerebbe registrare lo stesso tipo di statistiche su OS X: contando le istruzioni (ecc.) Di un certo pezzo prende il codice e ottiene il risultato in modo automatico. (Non voglio utilizzare la GUI dello strumento per analizzare i dati.)

Esistono API che consentono questo (ad es. Utilizzando dtrace o simile)? Da un po 'di ricerca suona come il privato AppleProfileFamily.framework potrebbe avere i ganci necessari, ma non è chiaro come fare per il collegamento o l'utilizzo.

+1

Un potenziale la soluzione qui sarebbe utilizzare il kext Intel PMC che espone queste informazioni (http://www.campos.cc/blog/2014/03/15/using-intel-performance-monitor-on-mac-os-x), ma non sembra fornire informazioni per processo, solo totali, che sono meno utili per me. –

+4

L'ingegnere di Apple Kris Markel dice su Twitter: "Al momento non è disponibile nulla. Per favore invia una richiesta di miglioramento tramite bugreport.apple.com." (https://twitter.com/existopher/status/644943616889126912) –

+0

[PAPI può essere compilato su OS X] (http://icl.cs.utk.edu/papi/forum/viewtopic.php?f=2&t= 1274). Sfortunatamente, i contatori hardware non sono supportati su questa piattaforma, solo eventi software. Questo lo rende molto meno utile. – Sjlver

risposta

1

In GNU/Linux uso il PCM Intel per monitorare l'utilizzo della CPU. Non sono sicuro che funzioni correttamente su OSX, ma per quanto ne so il codice sorgente include la directory MacMSRDriver. Non ho alcun dispositivo OSX, mai testarlo comunque.

Nel caso in cui questa fonte compilato sul tuo dispositivo, basta eseguire:

pcm.x -r -- your_program your_program_parameter

o se si vuole di profilazione avanzata, utilizzare pcm-core.x invece o si può costruire il proprio codice in base pcm-core.cpp

+0

Ho notato nei commenti alla mia domanda iniziale che il kext di PMC non sembra fornire informazioni per processo. Fammi sapere se mi manca qualcosa. –

+0

Non uso mai PMC kext. A proposito, quello che cito qui non riguarda PMC ma il PCM di Intel. È possibile consultare la documentazione all'indirizzo https://software.intel.com/en-us/articles/intel-performance-counter-monitor –