Rockchip · AI & Linux Hub

Linux и загрузка

Тестирование и оптимизация энергопотребления Rockchip Linux

Тестирование и оптимизация энергопотребления Rockchip Linux — RK3399, Buildroot / Debian 9, RK-SM-YF-385 V1.0.1

· ArmSoM Editorial · Rockchip source documentation · 9 мин чтения

Справочный материал для 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: исходная таблица измерений (китайский оригинал)

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: исходная таблица измерений (китайский оригинал)

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 (китайский источник)

Дерево питания 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.

Другие статьи по теме → · Учебные маршруты →