¿Tiene Android (en ARM) los contadores de rendimiento de hardware?
Así como en Linux en el procesador Intel, tenemos una gran cantidad de contadores de rendimiento de hardware para acceder. Al igual que anteriormente, utilizando un software de espacio de usuario llamado perfmon2 , podría obtener los valores de la tasa de falta de memoria caché, ciclos de bloqueo de la CPU debido a alguna razón (por ejemplo, L1 caché falta) y etc
Mi pregunta es, ¿tenemos esas cosas en Android? Dado que se basa en ARM, no creo que tengamos un soporte de contador de monitor de rendimiento tan fuerte como lo tenemos en x86, ¿verdad?
- HttpClient ejecución de HttpPost significativamente más lento en Android 3.2 que 2.3.3
- ¿Por qué llamar a setScaleX durante el gesto de pinch zoom causa parpadeo?
- Android - GC_FOR_ALLOC liberado 6346K, 7% gratis, pausado 143ms, total 143ms
- ¿Cómo probar el rendimiento de una aplicación de Android?
- Android - Prevenga la pantalla blanca al inicio
- Android: nesting FrameLayouts - ¿cuál es la sobrecarga de rendimiento exacto?
- ¿Por qué el perro String.format de android es lento?
- Enviar eficientemente int a través de sockets en Java
- Recuperar mediante programación los datos de uso de la red de etiquetas en Android
- Fondo animado con Libgdx
- Rendimiento en tiempo real de la galería de lienzo de Android
- Android ORMLite crear objeto lento
- ¿Hay alguna sobrecarga significativa en el uso de FragmentActivity sobre la actividad normal en Android?
ARM11 y Cortex-A / R tienen contadores de rendimiento de hardware. Puedes consultarlo en el sitio oficial de ARM en esta página: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka4237.html
Dado que Android también se ejecuta en la parte superior de Linux, puede acceder a contadores de rendimiento a través de software de espacio de usuario a través del subsistema "Perf Events". Sin embargo, necesitará escribir código nativo C, que incluye "perf_event.h" y crearlo usando el NDK de Android. Antes de empezar a escribir código, sugiero que eche un vistazo a este proyecto: platform / external / linux-tools-perf ( https://android.googlesource.com/platform/external/linux-tools-perf/ ), que puede ser exactamente lo que usted está buscando. No sé sobre ninguna alternativa que permita hacer esto directamente del código de Java.
Además de la respuesta de Benny, agregaré lo siguiente:
-
El proyecto linux-tools-perf está integrado con el AOSP (estoy usando 4.2). Está bajo $ AOSP / external / linux-tools-perf. El ./linux-tools-perf/Documentation contiene una gran cantidad de información sobre cómo ejecutar todo. La herramienta perf se construye en $ PRODUCT_OUT / system / bin / perf como parte del AOSP pero no se empaqueta; necesitas empujarlo explícitamente hacia el objetivo.
-
Compruebe el núcleo de Android (linux) para confirmar que admite PM: PERF_EVENTS. Google cómo obtener .config pero más fácil es ejecutar "extract-ikconfig zImage".
-
Se necesita tener acceso root en el destino y luego ejecutar algo como "./perf stat – testprog1" para ver los resultados. Hay muchos argumentos para el comando para grabar / recuperar diferentes contadores PM.
-
Recuerde que la mayoría de las implementaciones ARM tienen múltiples núcleos y un montón de pipelining. Cortex-A9 tiene ejecución fuera de orden. Así que los números pueden ser un poco extraño – casi sin sentido a veces.
-
Utilizo el registro de ARM PMCCNTR, el contador de ciclo de PM de ARM, ocasionalmente para probar el funcionamiento del código. PMUSERENR.EN y PMINTENCLR.C se deben establecer a nivel PL1 + y luego PMCCNTR se pueden gestionar a nivel PL0. ¡Vea ARM ARM para saber qué significa todo esto y el subsistema perf para uso de ejemplo!
Nota: Todas las shell vars se configuran en $ AOSP / build / envsetup.sh