¿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?

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:

  1. 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.

  2. 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".

  3. 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.

  4. 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.

  5. 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

  • Simula la memoria baja en el dispositivo real de Android
  • Obtener cuenta con cursor.getCount () o para ejecutar un rawQuery con un COUNT en una cláusula SQL?
  • ¿Cuál es el punto de `Content_main.xml`?
  • ¿Es una buena idea escribir juegos para móviles en ActionScript3 en lugar de Java / Objective-C?
  • Android - ListView con imágenes se desplaza demasiado lento incluso sin ningún procesamiento en el método getView del adaptador
  • StackOverflowError al cambiar la visibilidad de la vista
  • ¿Debo reemplazar las actividades de Android por fragmentos?
  • Consejos sobre dibujo de alto rendimiento en Android
  • ¿Cómo configurar el desplazamiento perfomance para webview?
  • Cómo compartir datos con Android Volley
  • Disminuir la velocidad de View Pager en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.