前言

概述

本文档针对PLT的各类业务,提供内存维测指导。

读者对象

本文档主要适用于以下工程师:

  • 技术支持工程师

  • 产品测试工程师

  • 维护工程师

符号约定

在本文中可能出现下列标志,它们所代表的含义如下。

符号

说明

表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。

表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。

表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。

用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。

“须知”不涉及人身伤害。

对正文中重点信息的补充说明。

“说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。

修改记录

文档版本

发布日期

修改说明

02

2024-09-14

更新“内存维测开关”章节内容。

01

2024-07-03

第一次正式版本发布。

简介

内存维测是系统维测中非常关键的功能,比如:想知道系统中,当前内存的分配和占用情况;想知道各个task的栈占用情况;想知道某个task内存分配具体分配情况。这些内存信息对于内存优化、以及内存定位(比如内存泄露)至关重要。

本文描述如何在BS2X系列上如何进行内存维测,包括:

  • 查看系统heap内存总体分配和使用情况。

  • 查看每个task的malloc情况(当前分配和峰值分配)。

  • 查看每个task的栈分配和使用情况(当前使用和峰值使用)。

  • 查看每个内存在哪里分配。

    内存维测命令已经集成到AT命令中,用户可以直接使用。

内存维测功能

查看系提heap总体信息

该维测功能,用来查看系统中heap内存使用看情况。

查看系统heap信息命令:AT+HEAPSTAT

查看task栈使用情况

该维测功能,用来查看各个Task的栈的分配使用使用情况。

可以通过该命令,来优化调整stack的分配大小,节约内存。

查看任务栈使用情况:AT+TASKSTACK

查看每个task的内存分配情况

查看某个task的malloc情况:AT+TASKMALLOC=“任务id”;

这里的“任务id”,可以通过“AT+HEAPSTAT”或“AT+TASKSTACK”命令获取。

查看中断中、启动阶段的内存分配情况

系统中,除了task中分配内存外,还有中断中分配的内存、系统启动阶段的分配的内存,这些地方分配的地方没有对应的task,因此统一归类到一个特殊id中。

可以通过“AT+HEAPSTAT” 命令,获取non-task alloc对应的id。

查看非任务中内存分配情况的命令,也是:AT+TASKMALLOC=“id”,显示格式相同。

内存维测开关

内存维测通过配置宏进行使能和关闭控制,需要进入到“kernel\liteos\liteos_v208.6.0_b017\Huawei_LiteOS\tools\build\config\”目录中找到项目使用的config文件,以BS21A为例,需要打开bs21a_key.config,修改以下宏控制开关:

关闭内存调测功能:

# LOSCFG_MEM_TASK_STAT=y is not set
# LOSCFG_MEM_DFX_SHOW_CALLER_RA is not set

开启内存调测功能:

LOSCFG_MEM_TASK_STAT=y
LOSCFG_MEM_DFX_SHOW_CALLER_RA=y

说明:

  • 必须要找对项目对应的config文件,开启和关闭维测配置。

  • LOSCFG_MEM_DFX_SHOW_CALLER_RA用来查看在哪里调用了内存分配的函数,该宏打开会消耗一定内存空间;建议在商用阶段,关闭该宏。

  • 修改内存配置宏后,一定对SDK进行clean完整编译,否则可能会有不生效的情况。