versión corta basada en:Linux muestra el tiempo de perfiles
¿Hay un buen perfilador de muestreo basado en el tiempo para Linux?
versión larga:
Yo generalmente uso OProfile para optimizar mis aplicaciones. Recientemente encontré una deficiencia que me tiene preguntando.
El problema era un ciclo cerrado, desove C++ filt para exigir un nombre de C++. Solo me encontré con el código accidentalmente mientras buscaba otro cuello de botella. El OProfile no mostró nada inusual sobre el código, así que casi lo ignoré, pero mi sentido del código me indicó que optimice la llamada y vea qué sucedió. Cambié el popen
de C++ filt a abi::__cxa_demangle
. El tiempo de ejecución pasó de más de un minuto a un poco más de un segundo. Aproximadamente una velocidad de x60.
¿Hay alguna manera en que podría haber configurado OProfile para marcar la llamada popen
? Como los datos del perfil se encuentran ahora OProfile cree que el cuello de la botella fue el montón y std::string
llamadas (que BTW una vez optimizado redujo el tiempo de ejecución a menos de un segundo, más de x2 de velocidad).
Aquí está mi configuración Oprofile:
$ sudo opcontrol --status
Daemon not running
Event 0: CPU_CLK_UNHALTED:90000:0:1:1
Separate options: library
vmlinux file: none
Image filter: /path/to/executable
Call-graph depth: 7
Buffer size: 65536
¿Hay otro perfilador para Linux que podría haber encontrado el cuello de botella?
Sospecho que el problema es que OProfile solo registra sus muestras en el proceso en ejecución. Me gustaría que siempre registre sus muestras en el proceso que estoy perfilando. Entonces, si el proceso está actualmente desactivado (bloqueo en IO o una llamada popen
) OProfile simplemente colocaría su muestra en la llamada bloqueada.
Si no puedo solucionar esto, OProfile solo será útil cuando el ejecutable esté cerca del 100% de la CPU. No puede ayudar con ejecutables que tienen llamadas de bloqueo ineficientes.
Mike, su punto es muy válido, acepto la técnica con 100%. ¿Alguna idea sobre cómo habilitar el muestreo basado en el tiempo a través de OProfile o en un enfoque más automatizado que simplemente introducir el depurador? –
@Caspin: estoy en Windows, y no soy usuario de OProfile, pero este enlace (http://oprofile.sourceforge.net/doc/opreport.html) habla sobre su uso y presentación de datos de muestra de pila . También este enlace (http://oprofile.sourceforge.net/doc/detailed-parameters.html#timer) habla sobre interrupciones de temporizador. No puedo decir si tomará muestras durante E/S u otras llamadas de bloqueo. –
... tenga en cuenta que la frecuencia de muestreo no necesita ser rápida, pero debe poder muestrear durante el bloqueo de llamadas a menos que desee permanecer ciego. –