Справочный материал для ArmSoM. Источник RK-SM-YF-385 V1.0.1 описывает измерение энергопотребления, первоначальную диагностику и оптимизацию RK3399 с Buildroot / Debian 9 для согласования производительности, энергопотребления и безопасности. Версия ядра, точная версия SDK/BSP и проверенная плата ArmSoM не указаны. Перед применением проверьте схему платы, питание, дисплей, драйверы и SDK. Ниже приведены примеры измерений изготовителя, а не испытания ArmSoM; аппаратная проверка не выполнялась.
Доступен только китайский оригинал. Английский, русский и немецкий тексты являются полными переводами; все три изображения взяты из китайского оригинала. Английских оригиналов изображений нет. Две растровые таблицы также восстановлены в редактируемом виде. Поддержка по источнику:
| Микросхема | Buildroot | Debian 9 |
|---|---|---|
| RK3399 | Y | Y |
1. Энергопотребление в различных сценариях
Условия испытаний RK3399: CPU 4xA53+2xA72, до 1.8GHz; DDR до 856MHz; GPU до 800MHz. Далее рассматриваются неподвижный рабочий стол, воспроизведение видео, нагрузочное тестирование и глубокий сон в Buildroot / Debian 9 Linux.
1.1 Измерения для Buildroot

Buildroot: исходная таблица измерений (китайский оригинал)
RK_IND_EVB_RK3399_LP4D200P232SD8_V11_20190905 · Sample:41810 · 693 Sample/S · 00:01:00
| Сценарий | VCC_SOC (mW) | VCC12V_DCIN (V) | VCC12V_DCIN (mA) | VDD_CPU_B (V) | VDD_CPU_B (mA) | VDD_GPU (V) | VDD_GPU (mA) | VDD_LOG (V) | VDD_LOG (mA) | VDD_CENTER (V) | VDD_CENTER (mA) | VDD_CPU_L (V) | VDD_CPU_L (mA) | VCC_DDR (V) | VCC_DDR (mA) | VCC3V3_SYS (V) | VCC3V3_SYS (mA) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Рабочий стол (с дисплеем) | 1982.4726 | 11.932 | 907.6 | 0.856 | 16.5 | 0.862 | 60.5 | 0.96 | 276 | 0.924 | 531.7 | 0.832 | 18.5 | 1.088 | 58.1 | 3.26 | 331.7 |
| Рабочий стол (без дисплея) | 1876.9895 | 12.02 | 708.9 | 0.853 | 14.8 | 0.86 | 57.5 | 0.963 | 227.6 | 0.921 | 496.8 | 0.829 | 10.2 | 1.091 | 57.2 | 3.259 | 327.5 |
| 1080p «Трансформеры 3» | 2340.035 | 11.89 | 997.5 | 0.857 | 20.7 | 0.862 | 187.4 | 0.959 | 297.1 | 0.929 | 739.1 | 0.841 | 54.3 | 1.08 | 58.8 | 3.261 | 331.2 |
| 4K@30fps Birds | 2392.5669 | 11.881 | 1019.6 | 0.858 | 20.5 | 0.863 | 137.6 | 0.959 | 304.9 | 0.932 | 815.8 | 0.845 | 68.4 | 1.078 | 58.8 | 3.26 | 332 |
| Тест Glmark2 | 2410.0431 | 11.887 | 1007.9 | 0.860 | 67.3 | 0.887 | 225.4 | 0.953 | 351 | 0.926 | 593.7 | 0.834 | 47.8 | 1.08 | 58.4 | 3.257 | 357.7 |
| Нагрузочный тест | 4126.4532 | 11.736 | 1340 | 0.912 | 764.9 | 1.081 | 191.1 | 0.948 | 438.4 | 0.935 | 818.7 | 1.125 | 763.1 | 1.063 | 60.7 | 3.26 | 336.1 |
| Тест глубокого сна | 120.5585 | 12.325 | 22.1 | 0 | 0 | 0 | 0 | 0.979 | 35.1 | 0 | 0 | 0 | 0 | 1.093 | 53.6 | 3.287 | 8.4 |
Ниже приведены значения из анализа источника (сохранено исходное округление, без пересчёта по таблице):
| Сценарий | Обозначение | Мощность |
|---|---|---|
| Дисплей | Pd | 2.3W |
| Рабочий стол, всего | Pui | 10.8W |
| Видео 1080P, всего | Pl | 11.86W |
| Видео 4K@30fps, всего | Pb | 12.1W |
| Glmark2, всего | Pg | 11.98W |
| Нагрузочный тест, всего | Ps | 15.72W |
| Рабочий стол, SoC | Psui | 1.88W |
| Видео 1080P, SoC | Psl | 2.34W |
| Видео 4K, SoC | Psb | 2.39W |
| Glmark2 SoC | Psg | 2.41W |
| Нагрузочный тест, SoC | Pss | 4.13W |
| Глубокий сон, SoC | Ps2 | 120.5mW |
1.2 Измерения для Debian 9

Debian 9: исходная таблица измерений (китайский оригинал)
RK_IND_EVB_RK3399_LP4D200P232SD8_V11_20190905 · Sample:41810 · 693 Sample/S · 00:01:00
| Сценарий | VCC_SOC (mW) | VCC12V_DCIN (V) | VCC12V_DCIN (mA) | VDD_CPU_B (V) | VDD_CPU_B (mA) | VDD_GPU (V) | VDD_GPU (mA) | VDD_LOG (V) | VDD_LOG (mA) | VDD_CENTER (V) | VDD_CENTER (mA) | VDD_CPU_L (V) | VDD_CPU_L (mA) | VCC_DDR (V) | VCC_DDR (mA) | VCC3V3_SYS (V) | VCC3V3_SYS (mA) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Рабочий стол (с дисплеем) | 1966.9842 | 11.927 | 909.3 | 0.856 | 15 | 0.866 | 52.3 | 0.961 | 270.7 | 0.924 | 525.7 | 0.833 | 14 | 1.088 | 59.2 | 3.261 | 333.3 |
| Рабочий стол (без дисплея) | 1894.8035 | 12.021 | 700.9 | 0.853 | 17 | 0.863 | 55.6 | 0.963 | 228.7 | 0.921 | 499.8 | 0.83 | 15.1 | 1.09 | 57.9 | 3.259 | 330.2 |
| 1080p «Трансформеры 3» | 2231.3292 | 11.907 | 959.9 | 0.857 | 18.3 | 0.864 | 61.1 | 0.952 | 356.5 | 0.927 | 701.5 | 0.832 | 25.6 | 1.085 | 58.4 | 3.26 | 333.9 |
| 4K@30fps Birds | 2381.1659 | 11.887 | 1006.8 | 0.857 | 25.8 | 0.864 | 66 | 0.951 | 366.7 | 0.931 | 815.8 | 0.836 | 32.7 | 1.078 | 58.4 | 3.259 | 338.6 |
| Тест Glmark2 | 2342.1851 | 11.887 | 1006.8 | 0.866 | 84.7 | 0.954 | 231 | 0.953 | 351.2 | 0.926 | 591.4 | 0.833 | 19.6 | 1.083 | 58.7 | 3.26 | 333.2 |
| Нагрузочный тест | 4057.176 | 11.729 | 1360 | 1.01 | 805.7 | 0.867 | 147.5 | 0.948 | 445.5 | 0.938 | 814.4 | 1.123 | 683.5 | 1.057 | 60 | 3.261 | 336.8 |
| Тест глубокого сна | 111.6261 | 12.325 | 20.9 | 0 | 0 | 0 | 0 | 0.979 | 32.3 | 0 | 0 | 0 | 0 | 1.094 | 53.3 | 3.287 | 6.6 |
Ниже приведены значения из анализа источника (сохранено исходное округление, без пересчёта по таблице):
| Сценарий | Обозначение | Мощность |
|---|---|---|
| Дисплей | Pd | 2.4W |
| Рабочий стол, всего | Pui | 10.84W |
| Видео 1080P, всего | Pl | 11.43W |
| Видео 4K@30fps, всего | Pb | 11.96W |
| Glmark2, всего | Pg | 11.97W |
| Нагрузочный тест, всего | Ps | 15.95W |
| Рабочий стол, SoC | Psui | 1.89W |
| Видео 1080P, SoC | Psl | 2.23W |
| Видео 4K, SoC | Psb | 2.38W |
| Glmark2 SoC | Psg | 2.34W |
| Нагрузочный тест, SoC | Pss | 4.06W |
| Глубокий сон, SoC | Ps2 | 111.6mW |
2. Оптимизация энергопотребления системы
2.1 Первоначальная диагностика
2.1.1 Сравнение общей мощности
Сначала сравните общую мощность в одинаковом сценарии с данными предыдущей главы. Если плата заказчика существенно отличается от эталонной платы Rockchip SDK, разложите потребление по цепям. Кроме аппаратных различий условия должны совпадать: например, используйте один и тот же файл 1080P/4K и отключите экран eDP и дисплей HDMI.
2.1.2 Разложение по цепям питания
Изучите дерево питания проекта. На рисунке показана плата RK3399 Excavator. Постройте дерево по схеме, включите резистор последовательно в нужную цепь (источник обычно рекомендует 20mR) и измерьте ток. Выделены VCC3V3_SYS, VDD_CPU_B, VDD_CPU_L, VDD_GPU, VDD_LOG, VDD_0V9, VDD_CENTER, VCC_DDR и VCC_1V8. Сначала сравните потребление больших и малых ядер CPU, GPU, DDR и работу изменения частоты. При повышении напряжения проверьте кратность приращения 12.5mv. Если политика изменения частоты нормальна, исследуйте остальные периферийные устройства.

Дерево питания RK3399 Excavator (китайский источник)
2.1.3 Проверка тактирования
Проверьте частоту, enable_count, prepare_count и связи родительских/дочерних тактов подсистем. Пример saradc сохраняет исходные комментарии:
# 获取总的Clock状态:
cat /sys/kernel/debug//clk/clk_summary
# 设置频率(单位 HZ):
echo 24000000 > /sys/kernel/debug/clk_saradc/clk_rate
# 获取频率:
cat /sys/kernel/debug/clk_saradc/clk_rate
# 打开 clock:
echo 1 > /sys/kernel/debug/clk_saradc/clk_enable_count
# 关闭 clock:
echo 0 > /sys/kernel/debug/clk_saradc/clk_enable_count
enable_count увеличивается на 1 при явном включении такта драйвером через clk_enable. Для некоторых постоянно включённых тактов значение 1 или 0 допустимо и не является главным предметом проверки. У неиспользуемых устройств проверьте CLK enable_cnt=0; иначе источник предлагает вручную отключить такт для диагностики. Сначала убедитесь, что работающие устройства не пострадают.
2.1.4 Проверка доменов питания (PD)
Проверьте состояние каждого PD. Неиспользуемые модули должны быть suspend; PD отключается после приостановки всех его устройств. Исходный вывод объединён через границу страниц:
# cat /sys/kernel/debug/pm_genpd/pm_genpd_summary
domain status slaves
/device runtime status
----------------------------------------------------------------------
pd_vopl on
/devices/platform/ff8f3f00.iommu active
/devices/platform/ff8f0000.vop active
pd_vopb off
/devices/platform/ff903f00.iommu suspended
/devices/platform/ff900000.vop suspended
pd_vo on pd_vopb, pd_vopl
pd_tcpc1 on
/devices/platform/ff800000.phy active
pd_tcpc0 on
/devices/platform/ff7c0000.phy active
pd_isp1 on
/devices/platform/ff924000.iommu active
/devices/platform/ff920000.rkisp1 suspended
pd_isp0 on
/devices/platform/ff914000.iommu active
/devices/platform/ff910000.rkisp1 suspended
pd_hdcp on
/devices/platform/ff940000.hdmi active
Конфигурация DTS на примере vopb:
vopb: vop@ff900000 {
power-domains = <&power RK3399_PD_VOPB>;
};
Если узел DTS не ссылается на PD, подсистема считает домен неиспользуемым и выключает после загрузки. Если ссылка есть, но у драйвера vop нет runtime-операций, устройство получает состояние unsupported, а PD остаётся включённым. При наличии ссылки и runtime-операций включением управляет драйвер. Для снижения потребления проверяйте PD summary и дерево тактов, отключая PD/CLK неиспользуемых модулей во избежание утечки внутренних MOS-транзисторов.
2.2 Первоначальная оптимизация
2.2.1 Изменение яркости подсветки
[root@rk3399:/]# cat /sys/class/backlight/backlight/brightness
200
Исходный диапазон 0–255; большее значение означает большую яркость. Сначала установите 100, затем при необходимости снижайте дальше.
echo 100 > /sys/class/backlight/backlight/brightness
2.2.2 Снижение частоты обновления
Если в данном сценарии частота кадров GPU ниже 30fps, можно изменить частоту обновления DSI. Ниже исходный частичный diff: окончание узла в источнике отсутствует, поэтому это не самостоятельный полный DTS.
native-mode= <&mipi_1280x800>;
mipi_1280x800: mipi-1280x800 {
-clock-frequency = <76000000>;
+ clock-frequency = <60000000>;//45fps
hactive = <800>;
vactive = <1280>;
hsync-len = <10>;
2.2.3 Отключение ISP
Отключите неиспользуемые модули в DTS. Для USB-камеры источник предлагает отключить ISP:
+&isp0{
+ status = "disabled";
+};
+
+&isp1 {
+ status = "disabled";
+};
+
+&isp0_mmu {
+ status = "disabled";
+};
+
+&isp1_mmu {
+ status = "disabled";
+};
2.2.4 Изменение политики регулирования частоты
--- a/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi
@@ -50,6 +50,8 @@
rockchip,temp-hysteresis = <5000>;
rockchip,low-temp = <10000>;
rockchip,low-temp-min-volt = <900000>;
+ rockchip,high-temp = <45000>;
+ rockchip,high-temp-max-volt = <1000000>;
nvmem-cells = <&cpul_leakage>, <&specification_serial_number>;
nvmem-cell-names = "cpu_leakage",
@@ -141,6 +143,8 @@
rockchip,temp-hysteresis = <5000>;
rockchip,low-temp = <10000>;
rockchip,low-temp-min-volt = <900000>;
+ rockchip,high-temp = <45000>;
+ rockchip,high-temp-max-volt = <1025000>;
nvmem-cells = <&cpub_leakage>, <&specification_serial_number>;
nvmem-cell-names = "cpu_leakage",
2.2.5 Настройка target load
По умолчанию load равен 90. Перенос строки PDF внутри одной команды cat устранён:
[root@rk3399:/sys/devices/system/cpu/cpufreq/policy4/interactive]# cat target_loads
90
Источник предлагает следующие значения. Пример всё ещё показывает вывод cat и не содержит команды записи; cat не выполняет настройку:
[root@rk3399:/sys/devices/system/cpu/cpufreq/policy4/interactive]# cat target_loads
65 1008000:70 1200000:75 1416000:80 1608000:90
Редакторские замечания и адаптация
Сохранены обозначения 20mR и 12.5mv: обычно это миллиомы и милливольты, но нужны проверка схемы и PMIC. Двойной слеш в /sys/kernel/debug//clk/clk_summary и пути clk_saradc сохранены; сверьте с debugfs используемого ядра. Мощность SoC, входная мощность платы и измерения без дисплея различаются; их нельзя смешивать. Округление исходного текста не заменено расчётами из таблиц. Значения температуры/напряжения в 2.2.4 не являются универсально безопасными для всех SDK.
Официальные ресурсы: Rockchip; документация ArmSoM.
