2.2. 低功耗管理

低功耗管理用于在M50设备处于空闲状态时,自动降低能耗,从而有效降低设备功耗。

每颗M50芯片在系统中均作为一个独立逻辑设备被识别。低功耗管理针对每个逻辑设备独立生效。当一台M50产品包含多个逻辑设备时,各设备会分别进行低功耗管理与状态切换。

低功耗管理包括 系统级低功耗管理运行时低功耗管理

2.2.1. 前提条件

  • 操作系统支持

    • Ubuntu 20.04、22.04、24.04

    • Windows 11

    • Kylin V11

    • Android 15 (API level 35), arm64-v8a

  • 软件版本要求

    安装 v0.4.0 或更高版本的固件镜像和驱动后,低功耗默认启用。

2.2.2. 低功耗模式

后摩M50设备低功耗模式包括:sleep 和 hibernate。

运行时低功耗管理负责在主机保持运行时,根据设备自身空闲状态将设备切换至sleep模式;系统级低功耗管理则随主机电源状态变化,将设备切换至 Sleep 或 Hibernate模式。

2.2.2.1. Sleep模式

Sleep模式指后摩设备进入较深低功耗状态,PMIC模块和芯片内PCIe保持运行,外部DDR内存保持供电,AOSS(Always On Subsystem)和CPUSS(CPU Subsystem)保持供电但处于低功耗状态,其余模块断电并禁用。

2.2.2.2. Hibernate模式

Hibernate模式指后摩设备进入最低功耗状态,具体表现由主机的电源管理机制决定,后摩设备会根据主机能力进行自适应。该模式下可能的组合如下:

  • PMIC模块和芯片内PCIe保持运行,AOSS和CPUSS保持供电但处于低功耗状态,其余模块断电并禁用。

  • PMIC模块保持运行,AOSS保持供电但处于低功耗状态,其余模块断电并禁用。

  • 所有模块断电并禁用。

2.2.3. 系统级低功耗管理

系统级低功耗管理是指由主机操作系统的电源状态驱动,后摩设备随主机状态变化而切换至对应的低功耗模式。

2.2.3.1. Linux系统

下表展示了 Linux 主机电源状态与后摩设备低功耗模式的对应关系:

警告

在主机电源状态为 Mem(deep)Disk 的场景下,该功能在当前版本仍处于验证阶段,不属于正式支持特性。由于在不同主机平台或系统配置下,相关行为可能存在差异,建议仅在测试或验证场景中使用该功能,不建议在正式部署环境中使用。

表 2.1 主机与设备低功耗模式对应关系(Linux)

主机状态

设备状态

Freeze 或 Mem(S2idle)

Sleep

Mem(deep)

Hibernate

Disk

Hibernate

当主机恢复运行时,后摩设备会同步唤醒,并切换至正常工作模式。如需进行故障排查,可参看 常见问题解答

2.2.3.1.1. 休眠唤醒操作

Ubuntu系统中,可以通过创建系统级 hook 脚本来捕获系统休眠和唤醒事件。系统在进入休眠或恢复唤醒时,会调用用户指定的脚本执行相应操作。

  1. /lib/systemd/system-sleep 目录下创建脚本,如 test.sh

    sudo nano /lib/systemd/system-sleep/test.sh
    
  2. test.sh 脚本内容如下:

    #!/bin/bash
    
    case "$1/$2" in
      pre/*)
        # 系统即将进入休眠时触发
        # 可在这里执行用户自定义操作,例如保存设备状态、停止服务等
        echo "$(date '+%F %T') 系统即将进入休眠" >> /var/log/suspend.log
        /path/to/your/suspend-script.sh
        ;;
      post/*)
        # 系统从休眠恢复后触发
        # 可在这里执行用户自定义操作,例如恢复设备、重启服务或启动应用
        echo "$(date '+%F %T') 系统已恢复" >> /var/log/suspend.log
        /path/to/your/resume-script.sh
        ;;
    esac
    

    上面脚本中:

    • 日志文件 /var/log/suspend.log 由脚本写入,可记录休眠和唤醒事件,便于调试和审计。

    • suspend-script.sh:用户需自行编写,放置系统休眠前需要执行的操作,例如保存设备状态或停止服务。

    • resume-script.sh:用户需自行编写,放置系统唤醒后需要执行的操作,例如恢复设备、重启服务或启动应用。

    可参看 示例

  3. 设置系统级脚本执行权限:

    sudo chmod +x /lib/systemd/system-sleep/test.sh
    
  4. 测试方法如下:

    1. 触发系统休眠:

      sudo systemctl suspend
      
    2. 系统唤醒后,查看日志文件:

      cat /var/log/suspend.log
      
2.2.3.1.1.1. 示例

下面 test.sh 脚本示例展示了系统休眠和唤醒的操作。

示例实现如下:

  • 系统休眠前:

    • 记录休眠事件日志 suspend.log

  • 系统唤醒时:

    1. 记录系统唤醒日志 suspend.log

    2. 配置 Houmo SDK 运行环境。

    3. 切换工作目录 /home/houmo/v0.7.0/models

    4. 执行后摩SMI工具指令 hm_smi -a 获取当前后摩设备信息。

#!/bin/bash

case $1/$2 in
  pre/*)
    # 这里可以放置在系统进入休眠前执行的脚本
    echo "系统即将进入休眠状态" >> /var/log/suspend.log
    ;;
  post/*)
    # 这里可以放置在系统恢复后执行的脚本
    echo "系统已恢复" >> /var/log/suspend.log
    export HOUMO_SDK_PATH=/usr/local/houmo-sdk
    export TCIM_BACKEND=Xh2HalBackend
    export HOUMO_TARGET=xh2
    export LD_LIBRARY_PATH=/home/houmo/v0.7.0/houmo_tcim_runtime_xh2_linux_x86_64-0.7.0.dev20260110/lib:$LD_LIBRARY_PATH
    export TCIM_RUNTIME_PATH=/home/houmo/v0.7.0/houmo_tcim_runtime_xh2_linux_x86_64-0.7.0.dev20260110
    cd /home/houmo/v0.7.0/models
    #sudo rm -rf run.log
    hm_smi -a
    ;;
esac

2.2.3.2. Windows系统

下表展示了 Windows 主机电源状态与后摩设备低功耗模式的对应关系:

警告

在主机电源状态为 Sleep S3Hibernate S4 的场景下,该功能在当前版本仍处于验证阶段,不属于正式支持特性。由于在不同主机平台或系统配置下,相关行为可能存在差异,建议仅在测试或验证场景中使用该功能,不建议在正式部署环境中使用。

表 2.2 主机与设备低功耗模式对应关系(Windows)

主机状态

设备状态

Sleep S0iX

Sleep

Sleep S3

Hibernate

Hibernate S4

Hibernate

当主机恢复运行时,后摩设备会同步唤醒,并切换至正常工作模式。如需进行故障排查,可参看 常见问题解答

2.2.3.3. Android系统

下表展示了 Android 主机电源状态与后摩设备低功耗模式的对应关系:

表 2.3 主机与设备低功耗模式对应关系(Android)

主机状态

设备状态

Freeze 或 Mem(S2idle)

Sleep

Mem(deep)

Hibernate

当主机恢复运行时,后摩设备会同步唤醒,并切换至正常工作模式。如需进行故障排查,可参看 常见问题解答

2.2.4. 运行时低功耗管理

运行时低功耗管理指在主机保持运行的情况下,当后摩设备连续处于空闲状态并超过设定延迟时间时,系统会自动将其切换至低功耗模式。设备会根据空闲状态和功耗需求,自动进入sleep模式,以实现最佳功耗优化。

2.2.4.1. Linux和Android系统

当设备处于空闲状态时,系统会在设定延迟时间后,自动将后摩设备切换至sleep模式,以降低功耗。当后摩设备再次接收到任务时,系统立即唤醒设备,并恢复至正常工作状态。默认情况下,后摩设备在空闲状态持续 5000 ms 后会自动进入sleep模式。

用户可通过Linux sysfs 文件接口查询或设置。

2.2.4.1.1. 查看设备运行时状态

调用下面指令查看后摩设备当前的运行时状态:

cat /sys/bus/pci/devices/<Domain>:<Bus>:<Device>.<Function>/power/runtime_status

其中,<Domain>:<Bus>:<Device>.<Function> 应替换为要查询的后摩设备的 PCIe BDF信息。可通过后摩SMI工具查询,详情参看 《SMI工具使用指南》

示例如下:

cat /sys/bus/pci/devices/0000:05:00.0/power/runtime_status

返回值如下:

  • active:表示后摩设备处于正常工作模式,所有功能模块均可用。此状态表示设备未进入低功耗模式。

  • suspend:表示后摩设备处于sleep模式,设备已进入低功耗状态。

2.2.4.1.2. 查看设备功耗模式

调用下面指令查看后摩设备当前的功耗模式:

cat /sys/bus/pci/devices/<Domain>:<Bus>:<Device>.<Function>/power/control

其中,<Domain>:<Bus>:<Device>.<Function> 应替换为要查询的后摩设备的 PCIe BDF信息。可通过后摩SMI工具查询,详情参看 《SMI工具使用指南》

示例如下:

cat /sys/bus/pci/devices/0000:05:00.0/power/control

返回值如下:

  • auto:低功耗模式启动,设备空闲时自动进入sleep模式。

  • on:低功耗模式关闭,设备在空闲状态下保持运行,不会切换至sleep模式。

2.2.4.1.3. 设置设备功耗模式

调用下面指令修改后摩设备的功耗模式:

# 关闭低功耗模式
echo on > /sys/bus/pci/devices/<Domain>:<Bus>:<Device>.<Function>/power/control
# 启用低功耗模式
echo auto > /sys/bus/pci/devices/<Domain>:<Bus>:<Device>.<Function>/power/control

其中,<Domain>:<Bus>:<Device>.<Function> 应替换为要设置的后摩设备的 PCIe BDF信息。可通过后摩SMI工具查询,详情参看 《SMI工具使用指南》

2.2.4.1.4. 查看设备进入低功耗模式的延迟时间

调用下面指令查看后摩设备在空闲时,自动进入低功耗模式的延迟时间,单位为毫秒:

cat /sys/bus/pci/devices/<Domain>:<Bus>:<Device>.<Function>/power/autosuspend_delay_ms

其中,<Domain>:<Bus>:<Device>.<Function> 应替换为要查询的后摩设备的 PCIe BDF信息。可通过后摩SMI工具查询,详情参看 《SMI工具使用指南》

示例如下:

cat /sys/bus/pci/devices/0000:05:00.0/power/autosuspend_delay_ms

2.2.4.1.5. 设置设备进入低功耗模式的延迟时间

调用下面指令设置后摩设备在空闲时,自动进入低功耗模式的延迟时间,单位为毫秒,默认为5000毫秒:

echo <latency_time> | sudo tee /sys/bus/pci/devices/<Domain>:<Bus>:<Device>.<Function>/power/autosuspend_delay_ms

其中 <latency_time> 应替换为延迟时间,单位为ms;<Domain>:<Bus>:<Device>.<Function> 应替换为要设置的后摩设备的 PCIe BDF信息。可通过后摩SMI工具查询,详情参看 《SMI工具使用指南》

下面示例展示如何设置延迟时间为 6000ms:

echo 6000 | sudo tee /sys/bus/pci/devices/0000:05:00.0/power/autosuspend_delay_ms

2.2.4.2. Windows系统

当设备处于空闲状态时,系统会在设定延迟时间后自动将后摩设备置于sleep模式。当后摩设备需要执行任务时,系统立即唤醒设备,并切换至正常工作模式。默认情况下,后摩设备在空闲状态持续2秒后会自动进入sleep模式。

在 Windows 平台中,运行时低功耗管理功能存在以下限制:

  • 不支持关闭运行时低功耗管理功能。

  • 不支持修改进入sleep模式的延迟时间。

  • 不支持查询设备功耗模式。

2.2.5. 常见问题解答

  1. 系统无法进入休眠(Hibernate)模式。

    排查与解决方法

    1. 故障边界判定。

      1. 断开主机与M50设备的物理连接。

      2. 测试主机是否能够正常休眠。

        • 若主机仍无法进入休眠: 说明问题与M50设备无关,主机侧未正确支持休眠功能。建议优先排查主机的电源管理兼容性和系统设置。

        • 若主机可以正常进入休眠: 说明问题与M50设备相关。在连接M50设备的情况下,硬件中断或电源状态转换存在冲突。说明该功能不支持,请联系后摩技术工程师。

    2. 状态重置与恢复。当系统因上述问题进入异常状态时:

      1. 保持主机处于开机状态,等待至少3分钟。

      2. 对主机进行物理断电。

      3. 重新上电启动系统。

  2. 主机进入休眠后,M50设备未随系统正常恢复,表现为设备不可用或未被识别。

    原因

    由于不同主机的硬件设计或系统电源管理策略存在差异,可能导致M50设备无法被系统正常唤醒。

    解决方法

    当前版本建议通过完整复位恢复设备状态:

    1. 保持主机处于开机状态,等待至少3分钟。

    2. 对主机进行物理断电。

    3. 重新上电启动系统。