Realidad o ficción: las aplicaciones de Android utilizan un solo núcleo de la CPU del

 

arm-cortex-chip-die

HAD Tenemos procesadores multi-core en nuestro PC durante más de una década y Considerado hoy son la norma. Al principio era de doble núcleo, cuatro núcleos, y hoy en día empresas como Intel y AMD ofrecen los procesadores de escritorio de gama alta con 6 o incluso 8 núcleos. Procesadores de teléfonos inteligentes tienen una historia similar. Los procesadores de doble núcleo de eficiencia energética de ARM llegaron hace unos 5 años y desde entonces hemos visto un comunicado de básica ARM 4, 6 y 8 procesadores de núcleo. Sin embargo, hay una gran diferencia entre los 6 y 8 procesadores Core de escritorio Intel y AMD y 6, y 8 core basado en la arquitectura ARM – la mayoría de procesadores basados ​​en ARM con más de 4 núcleos utilizan al menos dos modelos básicos diferentes [. 1999006]

Aunque hay algunas excepciones, generalmente en una base de sistema de núcleo de procesador ARM ocho conocido como heterogénea Multi-Processing (HMP) lo que significa que todos los núcleos son iguales (heterogéneo Por lo tanto) utiliza. En un moderno this procesador de 64 bits que significaría un Cortex-A57 clúster núcleo Cortex-A72 o ser usado en conjunción con un racimo núcleos Cortex-A53. El A72 es un núcleo de alto rendimiento, mientras que el A53 tiene una mayor eficiencia energética. Este arreglo se conoce como Big.little Dónde grandes núcleos de procesador Cortex-A72 () se combinan con pequeños núcleos de procesador Cortex-A53 (). Esto es muy diferente de la de los procesadores de escritorio 6 o 8 núcleo que vemos Intel y AMD en el consumo de energía de escritorio no es tan crítica como es móvil.

La clave para recordar es que Big.little un procesador octa-core tiene ocho núcleos para la eficiencia energética, no para el rendimiento.

Cuando los procesadores multi-core llegaron primero a la oficina, fueron muchas las preguntas planteadas acerca de los beneficios de un procesador de doble núcleo en un procesador de núcleo único. Fue un procesador de doble núcleo de 1.6GHz “mejor” que un procesador de un solo núcleo a 3,2 GHz, y así sucesivamente. ¿Qué acerca de Windows? ¿Sería un máximo uso potencial de una con procesador de doble núcleo. ¿Qué juegos – Ellos no son mejores en los procesadores de un solo núcleo? Las solicitudes deben ser escritos de manera particular a la utilización de los núcleos de más? Etcétera.

Multi-primera transformación

Estas son preguntas legítimas, y por supuesto se hicieron las mismas preguntas en procesadores multi-core en los teléfonos inteligentes. Antes de abordar la cuestión de los procesadores multi-núcleo y Android, dar un paso atrás y mirar a la tecnología multi-core en general.

Los ordenadores son muy buenos para hacer algo. Usted desea calcular 100 millones de números primos? No hay problema, una ronda de bucle lata ordenador y alrededor de estas cifras y cálculos durante todo el día. Pero cuando se quiere una computadora para hacer dos cosas a la vez, como el cálculo de dichas primas cuando se ejecuta como una interfaz gráfica de usuario para que pueda navegar por la web, y luego de repente se pone un poco más difícil.

Yo no quiero ir demasiado profundo aquí, pero hay una técnica Básicamente Conocido como multitarea preventiva que permite que el tiempo de CPU disponible para ser compartido entre varias tareas. Una “porción” de tiempo de CPU se dará a una tarea (un proceso), entonces para decidir el paso siguiente, y así sucesivamente. En el corazón de los sistemas operativos como Linux, Windows, OS X, Android es un poco de tecnología llamada un programador. Su trabajo es el proceso que debe recibir el próximo tramo de tiempo de CPU trabajar.

ARM Cortex A72

Los programadores pueden escribir de diferentes maneras en el servidor el planificador puede estar configurado para dar prioridad a la ejecución de tareas de E / S (como escribir en el disco o la lectura de la red ), Considerando que el planificador en un equipo de escritorio será más preocupados por mantener GUI sensible.

Cuando haya más de un kernel disponible el planificador de procesos puede dar un marco de tiempo en CPU0 mientras que otro proceso se convierte en una rebanada de tiempo de ejecución en CPU1. De esta manera, un procesador de doble núcleo, el programador puede permitir que suceden dos cosas a la vez. Si a continuación, añadir más núcleos y más un proceso puede funcionar simultáneamente.

Usted se habrá dado cuenta de que el planificador es bueno para cortar los recursos de la CPU entre las diferentes tareas como el cálculo de los números primos, funcionamiento de la oficina, y el uso de un navegador web. Sin embargo, sólo un proceso, como el cálculo de las primas se puede dividir en varios núcleos. O puede?

Algunas tareas son secuenciales en la naturaleza. Para hacer un pastel que necesita para romper los huevos, añadir un poco de harina a la mezcla para pastel, etc. Luego, al final y poner en el horno. No se puede poner el molde en el horno hasta que la mezcla para pastel está listo. Así que incluso si tuviera dos cabezas en una cocina, que no necesariamente se puede ahorrar tiempo en una tarea. Hay pasos y el orden no puede ser quebrantada. Puede realizar varias tareas mientras que este líder está haciendo la torta la otra puede preparar la ensalada, pero que las tareas tienen una secuencia predefinida no se puede tomar ventaja de los procesadores de doble núcleo o incluso 12 procesadores de núcleo.

Si todavía escucha a la gente decir cosas como, “más que un teléfono inteligente no necesita 8 núcleos” y luego simplemente tirar las manos en la desesperación.

Sin embargo, todos los trabajos son así. Muchos un ordenador realiza las operaciones se pueden dividir en tareas independientes. Para ello, el proceso principal puede crear otro proceso y firme en algunos de los trabajos a ella. Por ejemplo, si utiliza un algoritmo para encontrar números primos, que no se base en los resultados anteriores (es decir, no una criba de Eratóstenes), a continuación, puede dividir el trabajo en dos. Un proceso puede comprobar el número de 50 millones de primero y segundo de control de procesos podría el segundo 50 millones. Si usted tiene un procesador de cuatro núcleos, entonces usted podría dividir el trabajo en cuatro, y así sucesivamente.

Sin embargo, para que esto funcione, el programa debe ser escrito de una manera especial. En otras palabras, el programa debe estar diseñado para dividir la carga de trabajo en pequeños trozos en lugar de hacer todo a la vez. Existen varias técnicas de programación a esta, y que podrían haber escuchado expresiones como “hilo sencillo” y “multi-hilo”. Estos términos significan generalmente los programas que se escriben con una sola ejecución del programa (solo subproceso, todos agrupados) Con tareas simples o (hilos) que se pueden programar de manera independiente para ahorrar tiempo en la CPU. En resumen, un programa de un único subproceso no se beneficiará de que se ejecuta en un procesador multi-core, multi-threaded Considerando que el programa lo hará .

android_graphics_pipeline_surfaceflinger

Bueno, ya casi estamos allí, sólo una cosa más antes de que un vistazo a Android. Dependiendo de cómo-sistema ha sido escrito un operativo, que un programa realiza ciertas acciones pueden ser multiproceso por naturaleza. A menudo, los bits individuales de un sistema operativo son en sí mismas tareas independientes y cuando el programa realiza una E / S o tal vez algo en la pantalla atrae Esta acción se realiza whos por otro proceso en el sistema. El uso de lo que se conoce como “no-bloqueo de llamadas”, es posible obtener un nivel de multi-threading en un programa sin crear whos Específicamente discusiones.

Este es un aspecto importante para Android. Una de las tareas a nivel de sistema en la arquitectura de Android es el SurfaceFlinger . Es una parte esencial de cómo Android ENVÍA gráficos para la pantalla. No es una tarea independiente que debe ser programado y llevó a cabo una rebanada de tiempo de CPU. Lo que esto significa es que las operaciones de algunos gráficos requieren otro proceso para ejecutar antes de que se han completado.

Android

Debido a procesos como SurfaceFlinger, ventajas de Android de los procesadores multi-núcleo sin aplicaciones específicas whos ser multi-hilo por diseño. También porque siempre hay un montón de cosas que suceden en el fondo, como el calendario y widgets de Android y en general se beneficia del uso de un procesador multi-core. Como era de esperar Android tiene la capacidad de crear aplicaciones de subprocesos múltiples. Para obtener más información sobre el this ver Procesos y sección Discusiones en la documentación Android. También hay algunos ejemplos multiproceso de Google y Qualcomm tiene un artículo interesante sobre programación aplicaciones Android para los procesadores multi-core .

Sin embargo, la pregunta sigue siendo, son la mayoría de las aplicaciones de Android de un único subproceso, y como tal, sólo uso de la CPU? Esto es importante si la mayoría Dado que las aplicaciones de Android son de un único subproceso lo que podría tener un smartphone con procesador multinúcleo monstruo, pero en realidad, se llevará a cabo el mismo que un procesador de doble núcleo!

En todas mis pruebas, no veo las aplicaciones del mundo real, que utilizan los 8 núcleos a 100% y así es como debe ser.

Parece que hay cierta confusión acerca de la diferencia entre el de cuatro núcleos y procesadores octa-core. En el mundo de los ordenadores de sobremesa y procesadores octa-core del servidor se construyen con el mismo diseño básico replicado en el chip. Sin embargo, para la mayoría de los procesadores basados ​​en ARM-octa núcleo existen núcleos de alto rendimiento y el núcleo a través de la mejora de la eficiencia energética. La idea es que los núcleos de mayor eficiencia energética se utilizan para tareas más mundanas, mientras que los núcleos de alto rendimiento se utilizan para la elevación de cargas pesadas. Sin embargo, es cierto que cada corazón también se puede utilizar simultáneamente como un procesador de escritorio.

La clave a recordar es que un procesador octa-core Big.little tiene ocho núcleos para la eficiencia energética, no para el rendimiento.

prueba

aplicaciones Android son confiables para tomar ventaja de los procesadores multi-núcleo y Big.little Permite al programador para elegir la mejor combinación para la carga de trabajo de base actual.

Puede obtener datos Android Acerca de la forma en que lo utilizó en el corazón del procesador. Para aquellos que están técnicamente bien, la información se puede encontrar en el directorio / proc / stat. Eso me escribió una herramienta ingresa la información por el uso de Android corazón mientras se ejecuta una aplicación. Para aumentar la eficacia, el rendimiento y reducir el alcance de la supervisión, la recogida de datos de prueba, mientras que la aplicación está activa. El análisis de los datos recogidos se realiza “fuera de línea”.

this utilizando la herramienta, que no tiene nombre todavía, me pasó una serie de diferentes tipos de aplicaciones (juegos, navegación web, etc.) en un teléfono con un procesador quad-core Qualcomm Snapdragon 801 y otra vez en un teléfono una octa-core Qualcomm Snapdragon procesador 615. He recogido los datos de estas pruebas de funcionamiento con la ayuda de Robert Triggs de la Autoridad Android, me genera unos gráficos muestran cómo se utiliza el procesador.

comenzar con un caso de uso fácil. Aquí es un gráfico de cómo se utilizan los núcleos en el Snapdragon 801 Cuando navegas por la Web utilizando Chrome

Chrome - Active cores on a quad-core phone.

Chrome – núcleos activos en un teléfono de cuatro núcleos

.

El gráfico muestra el número de núcleos utilizados por Android y el navegador web. No muestra cómo se utiliza el kernel (que viene en un momento), pero indica si el núcleo está siendo utilizado en absoluto. Si Chrome era entonces un solo hilo que espera ver una o dos núcleos en uso y tal vez un blip hasta 3 o 4 núcleos a veces. Sin embargo, no vemos eso. Lo que vemos es lo contrario, ser cuatro núcleos se utilizan ya veces sumerge a dos. En la prueba de navegación, no pasé el tiempo leyendo las páginas que cargan porque habría llevado a cualquier uso de la CPU. Sin embargo, esperé hasta que la página se ha cargado y rendido, luego me mudé a la página siguiente.

Este es un gráfico que muestra cómo se utilizó cada base. Este es un gráfico promediado (como el verdadero es un miedo líneas Grimoire). Esto significa que el uso máximo se presentan como menos. Por ejemplo, el pico Esto es un poco más del 90%, pero los datos en bruto muestra algunos núcleos que han golpeado varias veces en 100% durante la prueba. Sin embargo, él siempre nos da una buena representación de lo que estaba sucediendo.

Chrome - Core usage on quad-core phone.

Chrome – uso básico del teléfono de cuádruple núcleo

.

Mientras que en un octa core? ¿Va a mostrar el mismo patrón? Como se puede ver en el gráfico de abajo, no, no lo hace. Núcleos de septiembre siempre se utilizan con brote ocasional a 8, y, a veces cuando se sumerge y 4 a 6 corazones.

Chrome - Active cores on a octa-core phone.

Chrome – núcleos activos en el teléfono octa-core

.

También el núcleo de gráficos de uso Promedió muestra que el planificador se comportó de manera muy diferente desde el procesador Snapdragon 615 es un Big.little.

Chrome - Core usage on octa-core phone.

Chrome – uso básico del teléfono OCTA-core

.

Usted puede ver que hay dos o tres núcleos que corren más que otros, pero todos los núcleos se utilizan de una manera u otra. Lo que vemos es cómo la arquitectura es fiable para intercambiar hilos Big.little de una base a otra dependiendo de la carga. Recuerde los núcleos adicionales están aquí para la eficiencia energética, no el rendimiento.

Hay un mito que las aplicaciones de Android utilizan un solo núcleo.

Sin embargo, creo que podemos decir con seguridad que es un mito que las aplicaciones de Android utilizando un solo núcleo. Por supuesto, esto es de esperarse ya que Chrome está diseñado para ser multi-hilo , Android y PC.

Otras aplicaciones

Así que fue Chrome, que es una aplicación diseñada para ser multi-hilo, ¿qué otras aplicaciones? Corrí algunas pruebas en otras aplicaciones y brevemente aquí es lo que encontré:

  • Gmail – En un teléfono de cuatro núcleos utilizando la base se distribuyó uniformemente entre los 2 y 4 núcleos. Sin embargo, la utilización promedio básico nunca fue superior a 50%, lo que es de esperar que este es una aplicación relativamente ligero. En un procesador octa-core uso básico rebotó Entre 4 y 8 núcleos, pero con un uso básico en promedio mucho menor que 35%.
  • YouTube – En un teléfono de cuatro núcleos se utilizaron sólo 2 núcleos, y en promedio de utilización inferior al 50%. En un teléfono octa-core 4 núcleos utilizan principalmente YouTube Con el pico ocasional a 6, y caen a 3. Sin embargo, el promedio de utilización básica era sólo el 30%. Curiosamente, el planificador muy favorecida grandes núcleos y núcleos PEQUEÑOS apenas se utilizan.
  • Riptide GP2 – En un teléfono con cuatro núcleos núcleos de procesador Qualcomm este juego utiliza dos en su mayoría con los otros dos núcleos de hacer muy poco. Sin embargo en un teléfono con un procesador octa-core, entre seis y siete núcleos Dónde se usa constantemente, pero la mayor parte de este trabajo fue realizado por sólo tres de estos núcleos.
  • Templerun 2 – Este juego probablemente exposiciones de un único subproceso el problema más que otras aplicaciones que he probado. En un teléfono octa-core el conjunto usa consistentemente entre los 4 y 5 núcleos y alcanzó un máximo de 7 conductores. Sin embargo sólo un núcleo era realmente todo el trabajo duro. En un quad-core Qualcomm Snapdragon 801 teléfono, los dos núcleos funcionan bastante uniformemente divididos, y dos núcleos han hecho muy poco. En un teléfono de cuatro núcleos MediaTek los cuatro núcleos han compartido la carga de trabajo. Esto pone de relieve cómo una base planificador diferentes y diversos diseños pueden cambiar dramáticamente la forma en que se utiliza la CPU.

Esta es una selección de gráficos que se pueden consultar. He incluido un gráfico que muestra el teléfono OCTA-core a dormir en la línea de base:

Una aplicación interesante es AnTuTu. Corrí la aplicación en el teléfono octa-core y esto es lo que vi:

AnTuTu running on an octa-core phone.

AnTuTu se ejecuta en un teléfono octa-core.

Como se puede ver, la parte de la prueba última nivelado por completo todos los núcleos de procesador. Está claro que el punto de referencia es el de crear artificialmente una gran carga de trabajo, y ya que casi todos los núcleos están corriendo a toda velocidad mientras que un SoC con más núcleos marcará mejor en esta parte de la prueba. Nunca vi this tipo de carga de trabajo en aplicaciones estándar.

En un sentido estos son los puntos de referencia que se inflan artificialmente los beneficios de rendimiento de los teléfonos octa-core (en lugar de beneficios de eficiencia de energía). Para mayor información sobre el análisis comparativo ver Cuidado con los puntos de referencia, cómo saber qué buscar .

¿Por qué mi luz utiliza 8 núcleos?

Si nos fijamos en una aplicación como Gmail, y te darás cuenta fenómeno interesante. En un teléfono de cuatro núcleos utilizando la base se dividió en partes iguales entre 2 y 4 núcleos, pero en una aplicación de software para teléfonos octa-core Entre 4 y 8 núcleos. Cómo Gmail se puede ejecutar en 2-4 núcleos en un teléfono de cuatro núcleos, pero necesita al menos cuatro núcleos en un teléfono octa-core? No tiene sentido!

La clave es volver a recordar que en los teléfonos Big.little no todos los núcleos son iguales. De hecho, lo que vemos es cómo el planificador utiliza los pequeños granos que aumenta la carga de trabajo A continuación, el gran corazón están involucrados. Durante un tiempo hay una pequeña cantidad de cruce y pequeños núcleos continuación Ir a dormir. Cuando disminuye la carga de trabajo, sucede lo contrario. Por supuesto, todo sucede muy rápidamente, miles de veces por segundo. Mira lo que este gráfico muestra el uso de los grandes núcleos vs PEQUEÑO Durante mis pruebas de Epic Citadel

Epic Citadel - big vs LITTLE core usage on octa-core phone.

épica Ciudadela – grande vs poco sobre el uso básico del teléfono OCTA-core

.

Observe cómo se utilizan poco estar inactivo los primeros grandes núcleos y núcleos. Luego, alrededor de la segunda marca de 12, los grandes núcleos comienzan a utilizar menos y poco de primavera para los núcleos de la vida. En la segunda marca de 20 grandes núcleos aumentan su actividad de nuevo y los pequeños núcleos se reducen casi a cero el uso. Usted puede ver este mensaje en la segunda marca de 30, la segunda marca 45 y la segunda marca 52.

Cuando estos puntos es el número de núcleos en uso fluctúa. Por ejemplo, en los primeros 10 segundos sólo 3 o 4 núcleos se utilizan Ser (grandes núcleos) y la segunda marca de 12 en los picos de uso básicos en junio y luego caer de nuevo a cuatro, y así en.

Este es Big.little en acción. Un procesador Big.little no fue diseñado como procesadores octa-core de PC. Los núcleos adicionales Permite al programador elegir el centro adecuado para el trabajo adecuado. En todas mis pruebas, no veo las aplicaciones del mundo real, que utilizan los 8 núcleos a 100% y así es como debe ser.

Advertencias y recapitulación

El primero que hay que destacar es que estas pruebas no se compara el rendimiento de los teléfonos. Mis pruebas muestran que si las aplicaciones de Android se ejecuten en múltiples núcleos. Desventajas Las ventajas de correr o de núcleo múltiple, o correr en una SoC Big.little, no están cubiertos. Tampoco son las ventajas o inconvenientes de la ejecución de partes de una aplicación en dos núcleos a 25% del uso, en lugar de un núcleo de 50%, y así sucesivamente.

En segundo lugar, todavía no he tenido la oportunidad de realizar estas pruebas en un Cortex-A53 / A57 Cortex-setup o Cortex-A53 / A72 Cortex-configuración. El Qualcomm Snapdragon 615 tiene un quad-core de 1,7 GHz ARM Cortex A53 poste y un cluster A53 1.0GHz quad-core.

En tercer lugar, el intervalo de exploración de las estadísticas es alrededor de un tercio de un segundo (alrededor de 330 milisegundos). Si un uso básico informa ITS Eso es 25% en 300 milisegundos y otro uso de los informes básicos de las ITS es del 25% mientras que los gráficos muestran simultáneamente ambos núcleos a 25%. Sin embargo, es posible que el primer núcleo corrió a 25% de utilización de 150 milisegundos, a continuación, un segundo núcleo corrió a 25% de utilización de 150 milisegundos. Esto significa que los núcleos se utilizan consecutivamente y no simultáneamente. Por el momento mi configuración de prueba no me permite una mayor resolución.

dijo, pero después de todo esto. Está claro que las aplicaciones de Android son confiables para tomar ventaja de los procesadores multi-núcleo y Big.little Permite al programador para elegir la mejor combinación para la carga de trabajo de base actual. Si todavía escucha a la gente decir cosas como “un teléfono inteligente, pero no necesita 8 núcleos”, a continuación, sólo tirar las manos en la desesperación porque significa que entienden heterogénea Multi-Procesamiento y no entendía tan grande. POCOS es about eficiencia energética y el rendimiento general.

ESCRIBE UN COMENTARIO