¿Cuál es el regulador de frecuencia de CPU predeterminado de la versión SAMSUNG GALAXY S4 GT-I9500 Octacore?

He estado jugando con los gobernadores CPUFreq de la versión octacore del Samsung Galaxy S4 y olvidé cuál era el dispositivo gobernador predeterminado que Samsung configuró para operar.

¿Qué método has estado usando para establecer los gobernadores? ¿ Has visto esta pregunta ?
Creo que el gobernador OnDemand es el predeterminado, pero no estoy 100% seguro.
@ dotVezz Rooteé el dispositivo usando oDin y estoy escribiendo en /sys/devices/system/cpu/cpuX/cpufreq/scaling_governor el gobernador requerido, pero olvidé cuál era por defecto. En Quadcore (GT-I9500) es onDemand pero no estoy seguro en este dispositivo. Estoy haciendo algunos experimentos relacionados con el consumo de energía y necesito mantenerlo lo más cerca posible de la configuración predeterminada.

Respuestas (1)

El regulador predeterminado en el GT-I9500 se llama "ondemand-sec". Estoy ejecutando el firmware XXUEMJ9 (Android 4.3). Es una versión modificada del gobernador bajo demanda. Aquí hay un listado en /sys/devices/system/cpu/cpufreq:

root@ja3g:/sys/devices/system/cpu/cpufreq # ls -al
drwxr-xr-x    5 0        0                0 Nov 14 12:38 .
drwxr-xr-x    9 0        0                0 Nov 14 12:38 ..
drwxr-xr-x    2 0        0                0 Nov 14 12:38 iks-cpufreq
drwxr-xr-x    2 0        0                0 Nov 14 12:38 ondemand
drwxrwxrwx    2 0        0                0 Nov 14 12:39 ondemand-sec

root@ja3g:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_governor          
ondemand-sec

Asignaciones de frecuencia

En cuanto a qué frecuencia activa qué núcleos, no recuerdo si puede consultarlo sysfs, pero sí recuerdo:

  • Por debajo de 600 Mhz, solo los núcleos A7 están activos y funcionan con un factor de 2x. Por ejemplo, a 400 Mhz, los núcleos A7 en realidad funcionan a 800 Mhz.
  • Por encima de 600 Mhz, solo los núcleos A15 están activos y funcionan con un factor de 1x. Por ejemplo, a 1,2 Ghz, los núcleos A15 en realidad funcionan a 1,2 Ghz.

El mapeo de frecuencia se puede encontrar en las fuentes del kernel en drivers/cpufreq/exynos-ikcs-cpufreq.c, alrededor de la línea ~56:

#define ACTUAL_FREQ(x, cur) ((cur == CA7) ? (x) << 1 : (x))
#define VIRT_FREQ(x, cur) ((cur == CA7) ? (x) >> 1 : (x))

La primera línea encuentra la frecuencia real del núcleo. Si el núcleo actual es un A7, entonces realizamos un cambio de bits en la "frecuencia virtual" de 1 a la izquierda. Esto es en efecto una multiplicación por 2.

Gran parte del resto del código trata de consultar las frecuencias de CPU admitidas de cada tipo de núcleo y fusionarlas para obtener la cpufreqtabla resultante (consulte cpufreq_merge_tablesla función alrededor de la línea 197).

Más información sobre cómo se puede encontrar esto en este conjunto de diapositivas de Linaro.

Estado central

Puede verificar qué núcleos están activos usando un nodo de dispositivo en /dev/bL_status.

root@ja3g:/dev # cat bL_status
        0 1 2 3 L2 CCI
[A15]   0 0 0 0  0
[A7]    1 1 1 1  1

El resultado anterior indica que solo los núcleos A7 están activos.

Oye, ¿cómo puedo verificar esta información que has proporcionado? ¿Hay alguna forma de saber cuándo el sistema cambia de los núcleos A7 a A15 y cómo asegurarse de que el tiempo informado que pasó operando a 400 MHz sea en realidad 800 MHz?
Puede saber cuándo el sistema cambia de los núcleos A7 a A15 ejecutando cat /dev/bL_status. Modifiqué mi respuesta con la salida. Sin embargo, para verificar, creo que podría necesitar volver a verificar la fuente del kernel.
Oye, significa que necesito compensar las frecuencias, por ejemplo, estaba ejecutando una llamada de Skype a través de WLAN y escribí un script que estaba leyendo /sys/devices/system/cpuX/cpufreq/stats/time_in_statey descubrí que los cuatro núcleos funcionaban a 600 MHz todo el tiempo, ¿eso significa? la frecuencia real era de 1,2 GHz y en realidad A7 estaba operando a 1,2 GHz? Su respuesta creó más preguntas para mí. ¿Puede verificar esta pregunta también? gracias