Skip to content

Trigger场景触发写入模块

支持在特定场景触发时调整Property值和写入文件以改变调度策略, 例如提高CPU调频器的冗余.

scenes - 场景触发器

当触发指定场景时将会自动向文件中写入预设的文本, 写入方式与echo [text] > [path]相同且效率更高, 写入单个文件的耗时通常不超过1ms.
支持的场景如下:

  • init: 调度初始化时触发, 仅执行一次.
  • screenOn: 屏幕点亮时触发.
  • screenOff: 屏幕熄灭时触发.
  • powersaveMode: 切换到powersave模式时触发.
  • balanceMode: 切换到balance模式时触发.
  • performanceMode: 切换到performance模式时触发.
  • fastMode: 切换到fast模式时触发.

此项配置类型为ArrayJson, 即数组中的每个Json元素对应一个文件写入任务.

字段类型定义
pathstring写入的目标地址
textstring需要写入的文本

TIP

path字段为写入的目标地址, 例如/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq. text字段为需要写入的文本, 例如2000000.

json
  "Trigger": {
    "enable": true,
    "scenes": {
      "init": {
        "setProperty": [],
        "writeFile": [
          {"path": "/dev/cpuset/restricted/cpus", "text": "0-3"},
          {"path": "/dev/cpuset/system-background/cpus", "text": "0-3"},
          {"path": "/dev/cpuset/background/cpus", "text": "0-3"},
          {"path": "/dev/cpuset/foreground/cpus", "text": "0-7"},
          {"path": "/dev/cpuset/top-app/cpus", "text": "0-7"}
        ]
      },
      "screenOn": {
        "setProperty": [],
        "writeFile": []
      },
    
    },

hints - 场景触发器

触发条件包含tap swipe gesture heavyload jank bigJank,分别在 点击屏幕 滑动屏幕 手势操作 重负载 掉帧 严重掉帧 时触发.
触发的优先级为none < tap < swipe < gesture < heavyload < jank < bigJank, 当更高优先级的加速触发时将覆盖低优先级的加速.

字段类型定义
durationTimeint触发持续时间(单位:ms)
cpu.boostint频率加速值(范围:0-100)
cpu.extra_marginint额外性能冗余(范围:0-100)
cpu.low_latencybool是否降低延迟
mtk_gpu.min_freqintgpu工作频率下限
mtk_gpu.boostint频率加速值(范围:0-100)
mtk_gpu.extra_marginint额外性能冗余(范围:0-100)
mtk_gpu.low_latencybool是否降低延迟
devfreq.ddr.min_freqintddr空闲频率下限
devfreq.gpu.min_freqintgpu空闲频率下限

当要求调频器降低延迟时调频器将会以最快的速度提升CPU频率, 适用于检测到掉帧等需要迅速提升CPU频率的场景.
extraMargin值用于提供额外的性能冗余, 计算公式如下: acturalMargin = perfMargin + extraMargin. boost值用于夸大实际的CPU负载, 计算公式如下: cpuLoad = cpuLoad * freq * (1 + boost / 100).

mtk_gpu.min_freqdevfreq.gpu.min_freq分别为工作和空闲频率下限, 用于设置GPU的最低工作频率和最低空闲频率.

GPU空闲频率下限用于设置GPU的最低空闲频率, 例如devfreq.gpu.min_freq0时,GPU将会在空闲时降至最低频率. DDR空闲频率下限用于设置DDR的最低空闲频率, 例如devfreq.ddr.min_freq0时,DDR将会在空闲时降至最低频率.

无论是GPU还是DDR的频率下限,都无法达到锁住某个频率的效果,只能在空闲时降至最低频率,(实际情况受调频器工作频率与自动选择影响,例如devfreq.ddr.min_freq设置为800,那么大概率DDR不会选择在这个频率,因为受实际负载和实际性能需求,过低的频率会导致设备卡死等意外情况)

DANGER

mtk_gpu.min_freqdevfreq.ddr.min_freq用于设置GPU和DDR的最低空闲频率, 应与Thermal温度过载保护模块中字段devfreq.ddr.max_freqdevfreq.gpu.max_freq注意,max应大于min,否则可能导致意想不到的结果

json
"hints": {
      "none": {
        "durationTime": 0,
        "modes": {
          "powersave": {
            "setProperty": [
              {"name": "cpu.boost", "value": 0},
              {"name": "cpu.extra_margin", "value": 0},
              {"name": "cpu.low_latency", "value": false},
              {"name": "mtk_gpu.min_freq", "value": 0},
              {"name": "mtk_gpu.boost", "value": 0},
              {"name": "mtk_gpu.extra_margin", "value": 0},
              {"name": "mtk_gpu.low_latency", "value": false},
              {"name": "devfreq.ddr.min_freq", "value": 0},
              {"name": "devfreq.gpu.min_freq", "value": 0}
            ],
            "writeFile": []
          },
          "balance"
          ... // 省略其他模式
        }
      },
      "tap"
      ... // 省略其他触发条件

节选自CuToolbox V8.2.0 Alpha更新日志

[Trigger] 新增的模块, 支持在特定场景触发时调整Property值和写入文件以改变调度策略, 例如提高CPU调频器的冗余.