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 的场景下,该功能在当前版本仍处于验证阶段,不属于正式支持特性。由于在不同主机平台或系统配置下,相关行为可能存在差异,建议仅在测试或验证场景中使用该功能,不建议在正式部署环境中使用。
主机状态 |
设备状态 |
|---|---|
Freeze 或 Mem(S2idle) |
Sleep |
Mem(deep) |
Hibernate |
Disk |
Hibernate |
当主机恢复运行时,后摩设备会同步唤醒,并切换至正常工作模式。如需进行故障排查,可参看 常见问题解答。
2.2.3.1.1. 休眠唤醒操作
Ubuntu系统中,可以通过创建系统级 hook 脚本来捕获系统休眠和唤醒事件。系统在进入休眠或恢复唤醒时,会调用用户指定的脚本执行相应操作。
在
/lib/systemd/system-sleep目录下创建脚本,如test.sh:sudo nano /lib/systemd/system-sleep/test.sh
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:用户需自行编写,放置系统唤醒后需要执行的操作,例如恢复设备、重启服务或启动应用。
可参看 示例。
设置系统级脚本执行权限:
sudo chmod +x /lib/systemd/system-sleep/test.sh
测试方法如下:
触发系统休眠:
sudo systemctl suspend
系统唤醒后,查看日志文件:
cat /var/log/suspend.log
2.2.3.1.1.1. 示例
下面 test.sh 脚本示例展示了系统休眠和唤醒的操作。
示例实现如下:
系统休眠前:
记录休眠事件日志
suspend.log。
系统唤醒时:
记录系统唤醒日志
suspend.log。配置 Houmo SDK 运行环境。
切换工作目录
/home/houmo/v0.7.0/models。执行后摩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 S3 或 Hibernate S4 的场景下,该功能在当前版本仍处于验证阶段,不属于正式支持特性。由于在不同主机平台或系统配置下,相关行为可能存在差异,建议仅在测试或验证场景中使用该功能,不建议在正式部署环境中使用。
主机状态 |
设备状态 |
|---|---|
Sleep S0iX |
Sleep |
Sleep S3 |
Hibernate |
Hibernate S4 |
Hibernate |
当主机恢复运行时,后摩设备会同步唤醒,并切换至正常工作模式。如需进行故障排查,可参看 常见问题解答。
2.2.3.3. Android系统
下表展示了 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. 常见问题解答
系统无法进入休眠(Hibernate)模式。
排查与解决方法
故障边界判定。
断开主机与M50设备的物理连接。
测试主机是否能够正常休眠。
若主机仍无法进入休眠: 说明问题与M50设备无关,主机侧未正确支持休眠功能。建议优先排查主机的电源管理兼容性和系统设置。
若主机可以正常进入休眠: 说明问题与M50设备相关。在连接M50设备的情况下,硬件中断或电源状态转换存在冲突。说明该功能不支持,请联系后摩技术工程师。
状态重置与恢复。当系统因上述问题进入异常状态时:
保持主机处于开机状态,等待至少3分钟。
对主机进行物理断电。
重新上电启动系统。
主机进入休眠后,M50设备未随系统正常恢复,表现为设备不可用或未被识别。
原因
由于不同主机的硬件设计或系统电源管理策略存在差异,可能导致M50设备无法被系统正常唤醒。
解决方法
当前版本建议通过完整复位恢复设备状态:
保持主机处于开机状态,等待至少3分钟。
对主机进行物理断电。
重新上电启动系统。