跳到主要内容

BPU 驱动 sysfs 调试接口

BPU sysfs 节点说明

/sys/devices/system/bpu

各个文件节点可以使用“cat”命令获取信息,“echo”命令设置。具体内容如下:

  • bpu*:目录,bpu0,bpu1 分别对应 bpu 的两个核,每个目录内的节点设置如下:

  • burst_len:读写文件,该 Core 核心对应的 burst_len

  • hotplug:读写文件,该 Core 核心热拔插是否开启:

    • 0:关闭;
    • 1:开启;
  • power_enable:读写文件,该 Core 核心开关,用于开启/关闭对应 BPU 核心硬件电源;

  • devfreq:读写文件,用于读取/设置该 Core 核心频率:

    • 以 BPU0 为例,将调频策略设为 userspace

      echo userspace > /sys/devices/system/bpu/bpu0/devfreq/devfreq*/governor
    • 查看 BPU 支持频率:

      cat /sys/devices/system/bpu/bpu0/devfreq/devfreq*/available_frequencies
    • 设置 BPU 为目标频率,目标频率需要被 BPU 支持:

      echo 600000000 > /sys/devices/system/bpu/bpu0/devfreq/devfreq*/userspace/set_freq
    • 确认被设置的频率:

      cat /sys/devices/system/bpu/bpu0/devfreq/devfreq*/cur_freq
  • limit:读写文件,用于设置该 Core 核心硬件相关的缓冲数量,默认值为 0,任何大于 0 的值为实际数量,与优先级相关,越小的正值优先级越高, 该任务越早被调度执行,但是任务切换的效率会对应降低。请用户根据实际情况设置;

  • power_level:读写文件,用于设置该 Core 核心工作的功率级别(包括工作电源及频率):

    • 1:linux dvf 动态调节
    • 0:性能优先,最高功耗
    • < 0:在范围内,值越小,功耗等级越低。
  • users:只读文件,用于获取使用该 Core 的用户信息。详细信息请参考下文 users 一项;

  • queue:只读文件,获取驱动当前可设置的 FunctionCall 数量;

  • ratio:只读文件,获取该 Core 核心的使用率信息;

  • fc_time:获取该 Core 上处理过的 fc 任务信息,对应每一个任务有如下子项:

  • index:该任务位于 BPU 硬件 FIFO 中的位置
  • id:用户设置的中断 id
  • hwid:底层驱动维护的中断 id
  • group:用户设置的组 id,用户进程号
  • prio:任务优先级
  • s_time:任务处理开始的时间戳
  • e_time:任务处理结束的时间戳
  • r_time:任务被处理的总耗时
  • core_num:只读文件,BPU 中核心 Core 的数量
  • group:只读文件,运行在 BPU 上的任务组信息。通过“cat group”可得:

  • group:用户设置的组 id 和进程号;
    • prop:用户设置的比例值
    • ratio:当前实际的运行占用率
  • ratio:只读文件,当前 BPU 的使用率
  • users:只读文件,当前使用 BPU 的用户信息,用户会被归类为通过 BPU 框架设置任务的用户和指定各个 Core 设置任务的用户。通过“cat users”可得:

  • user:用户进程号
  • ratio:该用户对应 Core 上的占用率

使用示例

下文所有案例均已 BPU0 为目标,所有命令可以在运行模型应用后执行。

关闭 BPU Core

执行以下命令:

echo 0 > /sys/devices/system/bpu/bpu0/power_enable

热拔插 BPU Core

热拔插不影响单核模型应用运行,不支持双核模型应用。热拔插功能启用后,不会默认关闭,如需关闭热拔插,请手动设置(echo 0 至对应 sysfs 节点)。 依次执行以下命令:

echo 1 > /sys/devices/system/bpu/bpu0/hotplug
echo 0 > /sys/devices/system/bpu/bpu0/power_enable

降低 BPU Core 功耗

该命令不会关闭 BPU 核心,只会降低对应核心频率/功耗,具体值及对应含义,请查照上文:

echo -2 > /sys/devices/system/bpu/bpu0/power_level

优先级模型使用

根据 HBDK 编译器相关说明编译和使用优先级模型。 使用 hb_bpu_core_set_fc_prio 接口或者特定 group_id 的 hb_bpu_core_set_fc_group 接口设置任务:

echo 2 > /sys/devices/system/bpu/bpu0/limit

limit 接口可以用于调试,用户也可在执行应用时使用以下命令设置环境变量实现:

export BPLAT_CORELIMIT=2