Какой регулятор частоты ЦП по умолчанию используется в версии SAMSUNG GALAXY S4 GT-I9500 Octacore?

Я играл с регуляторами CPUFreq в восьмиядерной версии Samsung Galaxy S4 и забыл, какое устройство регулятора по умолчанию было настроено для работы в Samsung?

Какой метод вы использовали для назначения губернаторов? Вы видели этот вопрос ?
Я думаю, что регулятор OnDemand используется по умолчанию, но я не уверен на 100%.
@ dotVezz Я рутировал устройство с помощью oDin и пишу в /sys/devices/system/cpu/cpuX/cpufreq/scaling_Governor требуемый говернор, но я забыл, какой он был по умолчанию. В Quadcore (GT-I9500) это onDemand но в этом аппарате не уверен. Я провожу некоторые эксперименты, связанные с энергопотреблением, и мне нужно, чтобы оно было как можно ближе к настройкам по умолчанию.

Ответы (1)

Регулятор по умолчанию на GT-I9500 называется «ondemand-sec». У меня стоит прошивка XXUEMJ9 (Android 4.3). Это модифицированная версия регулятора по требованию. Вот список в /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

Сопоставление частот

Что касается того, какая частота активирует какие ядра, я не могу вспомнить, можете ли вы запросить ее через sysfs, но я помню:

  • Ниже 600 МГц активны только ядра A7, и они работают с коэффициентом 2x. Например, при частоте 400 МГц ядра A7 фактически работают на частоте 800 МГц.
  • Выше 600 МГц активны только ядра A15, и они работают с коэффициентом 1x. Например, при частоте 1,2 ГГц ядра A15 фактически работают на частоте 1,2 ГГц.

Отображение частоты можно найти в исходниках ядра в drivers/cpufreq/exynos-ikcs-cpufreq.cстроке ~56:

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

Первая строка находит реальную частоту ядра. Если текущее ядро ​​— A7, то выполняем битовый сдвиг «виртуальной частоты» на 1 влево. Фактически это умножение на 2.

Большая часть остального кода связана с запросом поддерживаемых частот ЦП для каждого типа ядра и их объединением для получения результирующей cpufreqтаблицы (см. cpufreq_merge_tablesфункцию в строке 197).

Дополнительную информацию о том, как это сделать, можно найти в этом наборе слайдов от Линаро.

Основной статус

Вы можете проверить, какие ядра активны, используя узел устройства в /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

Приведенный выше вывод указывает, что активны только ядра A7.

Эй, как я могу проверить эту информацию, которую вы предоставили? Есть ли способ узнать, когда система переключается с ядер A7 на ядра A15, и как убедиться, что заявленное время работы на частоте 400 МГц на самом деле составляет 800 МГц?
Вы можете узнать, когда система переключится с ядер A7 на ядра A15, запустив cat /dev/bL_status. Исправил мой ответ с выводом. Однако для проверки, я думаю, мне может понадобиться проверить исходный код ядра.
Привет, это означает, что мне нужно компенсировать частоты, например, я выполнял вызов Skype через WLAN, и я написал скрипт, который читал, /sys/devices/system/cpuX/cpufreq/stats/time_in_stateи обнаружил, что все четыре ядра все время работают на частоте 600 МГц, так что это значит реальная частота была 1,2 ГГц, а в реальности A7 работал на частоте 1,2 ГГц? Ваш ответ создал для меня больше вопросов. Не могли бы вы также проверить этот вопрос . спасибо