Sto usando callgrind per creare il profilo di un'app multi-threaded di Linux e soprattutto funziona benissimo. Lo avvio con la strumentazione disattivata (--instr-atstart = no) e quindi una volta eseguita l'installazione, accendo lo strumento con callgrind_control -i su. Tuttavia, quando modifico determinate configurazioni per provare a profilare una parte diversa dell'app, inizia a funzionare estremamente lentamente anche prima di attivare la strumentazione. Fondamentalmente parte del codice che impiega alcuni secondi con il normale funzionamento impiega più di un'ora con callgrind (strumentazione disattivata). Qualche idea sul perché potrebbe essere e su come procedere nel debugging/risoluzione della lentezza?callgrind lento con strumentazione disattivata
risposta
Callgrind è uno strumento, costruito su valgrind. Valgrind è fondamentalmente un traduttore binario dinamico (libVEX, parte di valgrind). Decodificherà ogni istruzione e JIT-compili in flusso di alcune istruzioni della stessa CPU.
Come noto, non è possibile abilitare questa traduzione (nell'implementazione di valgrind) per il processo già in esecuzione, quindi la conversione dinamica è abilitata per tutto il tempo, dall'inizio del programma. Non può essere disattivato anche.
Gli strumenti sono costruiti su valgrind aggiungendo un codice di strumentazione. Lo strumento "Nul" (nulgrind) è lo strumento che non aggiunge strumentazione. Ma ogni strumento usa valgrind e la traduzione dinamica è attiva sempre. L'accensione e lo spegnimento di callgrind è solo l'accensione e lo spegnimento della strumentazione aggiuntiva.
CPU virtuale, implementata da Valgrind è limitata, c'è un elenco (incompleto) di limitazioni http://valgrind.org/docs/manual/manual-core.html#manual-core.limits La maggior parte delle limitazioni riguardano operazioni in virgola mobile e possono essere emulate in modo errato.
La modifica è collegata alle operazioni in virgola mobile? O con altre limitazioni elencate?
Inoltre, è necessario sapere che "Valgrind serializza l'esecuzione in modo che sia in esecuzione un solo thread alla volta". (dalla stessa pagina manual-core.html)
PS: overhead nulgrind (strumentazione base libVEX) è enorme. Nulgrind è stimato essere 2-10 volte più lento del codice nativo (ad esempio in http://os.inf.tu-dresden.de/papers_ps/vee08-pohle.pdf); qualsiasi altro strumento su vlagrind è più lento di nulgrind. Callgrind con la modalità spenta funzionerà alla velocità di zero; callgrind attivato verrà eseguito più volte più lentamente. – osgx
- 1. Strumentazione dinamica con Clang
- 2. Funzioni inline Callgrind
- 3. Interpretazione dei dati del callgrind
- 4. equivalente a callgrind per java?
- 5. Callgrind: profilo di una parte specifica del mio codice
- 6. test strumentazione con parametri su Android
- 7. Test di strumentazione Android con Mockito
- 8. dinamica bytecode strumentazione - problema
- 9. L'icona di notifica è disattivata
- 10. Come capire l'output di callgrind usando Kcachegrind
- 11. L'attività di sedano eta è disattivata, con rabbitmq
- 12. Alternative alla strumentazione bytecode Java
- 13. JAXB utilizza la strumentazione bytecode?
- 14. La finestra modale Bootstrap è disattivata
- 15. L'opzione di trasformazione Web.config è disattivata
- 16. PHP lento con mysqli
- 17. Avvio lento con Ionic
- 18. MVC con caricamento lento
- 19. io: opzione di sviluppo app ios disattivata
- 20. onTouchEvent da codice tramite Strumentazione
- 21. Cambia colore della casella combinata disattivata
- 22. Argomento incompatibile per funzionare con la strumentazione bytecode ASM
- 23. Test di strumentazione fallito in modo casuale con multidexing abilitato
- 24. NoClassDefFoundError durante l'esecuzione di test di strumentazione con la formica
- 25. MemoryMappedFile con molto lento CreateViewStream
- 26. PHP con MySQL è lento
- 27. Hai bisogno di aiuto in uscita callgrind lettura
- 28. Conteggi di lettura e scrittura diversi utilizzando cachegrind e callgrind
- 29. Xcode 7 lento e lento
- 30. Valgrind - callgrind Profiler: come sapere quale funzione richiede più tempo
Quali sono le "determinate configurazioni per provare a profilare una parte diversa dell'app"? – jpalecek
user779, puoi controllare una velocità di applicazione con lo strumento ["nul" di valgrind] (http://valgrind.org/docs/manual/nl-manual.html) e con [lo strumento Lackey di valgrind] (http: //valgrind.org/docs/manual/lk-manual.html)? – osgx
@jpalecek: tutto quello che voglio dire è che gli utenti possono abilitare/disabilitare le funzionalità di config e abilitando alcune delle funzionalità (in modo approfondito si approfondirà per avere maggiori dettagli su un insieme di oggetti e che si traducono in molti più calcoli) inizia a strisciare . – naumcho