DVFS使用参考

1. 概述

本文档介绍了SigmaStar平台上DVFS功能的使用方法。DVFS (Dynamic voltage and frequency scaling),即动态电压频率调整,指的是根据实际需要动态调整CPU的频率和电压,以达到提升性能或节省能耗的目的。

2. 配置说明

在Linux中需要开启如下配置来使能DVFS功能:

SSTAR_CPU_FREQ:

Symbol: SSTAR_CPU_FREQ [=y]
Type  : tristate
Defined at drivers/sstar/cpufreq/Kconfig:1
  Prompt: Sstar CPU frequency scaling driver
  Depends on: SSTAR_DRIVERS [=y]
  Location:
    -> Device Drivers
      -> Sstar SoC platform drivers (SSTAR_DRIVERS [=y])

SSTAR_VOLTAGE_IDAC_CTRL:

Symbol: SSTAR_VOLTAGE_IDAC_CTRL [=y]
Type  : bool
Defined at drivers/sstar/voltage_idac/Kconfig:1
  Prompt: Sstar Voltage IDAC Control
  Depends on: SSTAR_DRIVERS [=y] && SSTAR_GPIO [=y] && !SSTAR_VOLTAGE_CTRL [=n]
  Location:
    -> Device Drivers
      -> Sstar SoC platform drivers (SSTAR_DRIVERS [=y])
 -> Sstar Voltage Control (SSTAR_VOLTAGE_CTRL [=n])

SSTAR_VOLTAGE_IDAC_STEP_BY_STEP:

Symbol: SSTAR_VOLTAGE_IDAC_STEP_BY_STEP [=y]
Type  : bool
Defined at drivers/sstar/voltage_idac/Kconfig:6
  Prompt: Sstar Voltage IDAC Control Step By Step
  Depends on: SSTAR_DRIVERS [=y] && SSTAR_VOLTAGE_IDAC_CTRL [=y] ontrol RL [=n]
  Location:
    -> Device Drivers
      -> Sstar SoC platform drivers (SSTAR_DRIVERS [=y])
 -> Sstar Voltage Control (SSTAR_VOLTAGE_CTRL [=n])
 -> Sstar Voltage IDAC Control (SSTAR_VOLTAGE_IDAC_CTRL [=y])

开启上述配置之后,Linux会生成如下路径和文件:

/ # ls -l /sys/devices/system/cpu/cpufreq/
total 0
-rw-r--r--    1 root     root          4096 Jan  1 00:02 cpufreq_testout
drwxr-xr-x    3 root     root             0 Jan  1 00:02 policy0
-rw-r--r--    1 root     root          4096 Jan  1 00:02 rosc_out
-rw-r--r--    1 root     root          4096 Jan  1 00:02 rosc_threshold
-r--r--r--    1 root     root          4096 Jan  1 00:02 sidd_out
-rw-r--r--    1 root     root          4096 Jan  1 00:02 temp_adjust_threshold_hi
-rw-r--r--    1 root     root          4096 Jan  1 00:02 temp_adjust_threshold_lo
-r--r--r--    1 root     root          4096 Jan  1 00:02 temp_out
/ # ls -l /sys/devices/system/voltage/cpu_power/
total 0
drwxr-xr-x    2 root     root             0 Jan  1 00:05 power
-rw-r--r--    1 root     root          4096 Jan  1 00:05 scaling_voltage
lrwxrwxrwx    1 root     root             0 Jan  1 00:05 subsystem -> ../../../../bus/voltage
-rw-r--r--    1 root     root          4096 Jan  1 00:05 uevent
-r--r--r--    1 root     root          4096 Jan  1 00:05 vid_gpio_map
-r--r--r--    1 root     root          4096 Jan  1 00:05 voltage_available
-rw-r--r--    1 root     root          4096 Jan  1 00:05 voltage_current

3. 相关命令

3.1. 查看CPU频率

/ # cat /sys/devices/system/cpu/cpufreq/cpufreq_testout
1500000000

1500000000的单位是Hz,即表示当前CPU频率为1.5GHz。

3.2. 设置CPU频率

/ # echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
/ # echo 1200000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed

如果要手动设置CPU频率,那么需要先将cpufreq的调频策略设置为userspace,然后再设置CPU频率。在上述命令中,1200000的单位是KHz,即表示将CPU的频率设置为1.2GHz。

3.3. 查看CPU电压

/ # cat /sys/devices/system/voltage/cpu_power/voltage_current
900
    VOLTAGE_DEMANDER_INIT           -
    VOLTAGE_DEMANDER_CPUFREQ        900
    VOLTAGE_DEMANDER_TEMPERATURE    -
    VOLTAGE_DEMANDER_USER           -

900的单位是mV,即表示当前CPU电压为900mV。

3.4. 查看CPU温度

/ # cat /sys/devices/system/cpu/cpufreq/temp_out
Temp=27

27的单位是摄氏度,即表示当前CPU温度为27摄氏度。