Para encontrar el número de núcleos disponibles en Termux, ejecutas:
grep Cpus_allowed /proc/self/status
Este número de núcleos está limitado de manera similar a ejecutar taskset
en GNU/Linux.
Estoy tratando de predecir qué retornará eso.
Según la aplicación CPU-Z, mi teléfono (Huawei Smart P) tiene 1 HiSilicon Kirin 659 con 8 núcleos. Según la aplicación CPU Info, 4 núcleos funcionan a la misma velocidad (480-1709Mhz) y 4 núcleos funcionan a la misma velocidad (1402-2362Mhz).
Después de encender el teléfono y esperar 5 minutos para asegurarme de que todas las tareas de inicio se han iniciado/completado, inicié Termux, inicié sesión a través de ssh
y obtuve:
Cpus_allowed_list: 0-7
Que es exactamente lo que espero.
Pero si presiono la tecla de inicio, obtengo:
Cpus_allowed_list: 2-3
Pensé que esto podría tener que ver con la carga de los núcleos, así que volví a Termux, inicié 16 bzip2
s. Esto no cambia el número de núcleos que obtengo inmediatamente. Pero después de 30 segundos obtengo 4 núcleos:
Cpus_allowed_list: 0-3
Y más tarde vuelvo a 2 núcleos:
Cpus_allowed_list: 2-3
Este comportamiento ocurre a través de ssh
ya sea que Termux esté en primer plano o en segundo plano.
El efecto de la tecla de inicio solo ocurre al ejecutar Termux: Si ejecuto CPU Info, luego presiono inicio y luego inicio Termux, entonces Termux sigue teniendo 8 núcleos:
Cpus_allowed_list: 0-7
Solo cuando cambio de Termux usando la tecla de inicio, la tecla de la lista de aplicaciones, o la tecla de retroceso, cambia el número de CPUs.
El big.LITTLE controlado por software podría explicar el cambio de 8 a 4 núcleos si el límite no se aplicara inmediatamente después del arranque, sino activado más tarde. Dado que el límite no se activa 5 minutos después del arranque, creo que es seguro rechazar esto como explicación. Tampoco explica por qué se limita a 2 núcleos algunas veces al ejecutar 16 bzip2
s.
¿Qué está causando que el teléfono me limite a usar 8 núcleos? ¿Cómo puedo decirle al teléfono que no lo haga? ¿Qué causa que el límite salte entre 2 y 4 núcleos en intervalos aparentemente aleatorios?
(Además de esto, esperaba que los núcleos funcionaran al 100% de velocidad, lo cual tampoco sucede).
La limitación no ocurre si no se ejecuta a través de ssh
o si se ejecuta en una sesión de tmux
donde la sesión de tmux
se inicia a través de la terminal en el teléfono.
0 votos
La CPU es un Octa core con el concepto BIG-little. Por lo tanto, esta respuesta también se aplica a tu CPU.
0 votos
@Robert, ¿Si se trata de una CPU big.LITTLE, por qué obtengo 0-7 después de arrancar? Permanece así si no presiono inicio.
top
claramente muestra 8 CPUs funcionando al 100%. Además, eso no explicaría por qué a veces estoy limitado a solo 2 núcleos.0 votos
Supongo que el dispositivo comienza sin asignaciones específicas de CPU. Esto también hace que el arranque sea lo más rápido posible. Posteriormente (quizás al inicio de un servicio especial), aplica la configuración de energía para limitar el consumo de energía. Los nuevos procesos comienzan con 2 núcleos y después de 30 segundos de alto uso de la CPU se permiten los 4 núcleos rápidos. Ten en cuenta que los teléfonos inteligentes están optimizados para la capacidad de respuesta de la interfaz de usuario, no para el rendimiento máximo de la CPU.
0 votos
@Robert he actualizado la pregunta. La explicación de big.LITTLE no parece encajar con la evidencia.