嵌入式BSP内存统计

摘要:

项目开发的可行性评估中,常涉及到内存的使用评估,这对项目DDR大小的选型及成本控制至关重要,

本文主要是梳理了内存当前BSP内存统计方案,找到内存统计过程中的关键参数,以便后续项目评估过程中提供更精确的BSP内存使用情况。

BSP内存统计

针对BSP的内存统计,其实有一个简单粗暴的方法。

即 ( 预留OS的内存大小 - 系统启动后未运行APP使用的内存大小 = BSP使用的内存大小 )

举个栗子:

xxx平台,uboot下配置OS内存(mem:A),修改启动脚本使其不加载APP,kernel启动后查看free剩余内存(free:B)

(mem:A) - (free:B) = (BSP使用内存大小)

即当前产品的BSP需要占用(A-B)的内存。

那么内存分别在BSP的哪些部分被用掉了呢?如果需要优化和裁剪BSP使用的内存,有哪些地方可以缩小呢?

kernel加载占用内存

找到在加载kernel过程中这样一行打印:

Memory: xxxx72K/xxxx84K available (xxxxK kernel code, xxxK rwdata, xxxK rodata, xxxK init, xxx bss, xxxK reserved, xxK cma-reserved)

这行打印代表了系统内存的可用情况,其中包括了内核代码、读写数据、只读数据、初始化数据、未初始化数据和保留空间等信息。

/proc/meminfo占用内存

查看“/proc/meminfo”信息

关注以下成员的内存使用情况

内存分层成员描述
MemTotal

所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)

(HighTotal + LowTotal),系统从加电开始到引导完成,BIOS等要保留一些内存,

内核要保留一些内存,最后剩下可供系统支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的。

MemFree
LowFree与HighFree的总和,被系统留着未使用的内存,MemFree是说的系统层面
用户态
 
Cached
被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache )
Active
在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用. (Active(anon) + Active(file))
Inactive
在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径. (Inactive(anon) + Inactive(file))
内核态
Slab

内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗

KernelStack
常驻内存,每一个用户线程都会分配一个kernel stack(内核栈)
PageTables
管理内存分页页面的索引表的大小

即,“free”命令中“used”的使用情况,相当于

Active(xxxK) + Inactive(xxxK) + Slab(xxxK) + KernelStack(xxxK) + PageTables(xxK) + X = xxxxK
(X 是通过alloc_pages/__get_free_page分配的内存,统计不到)

文件系统挂载占用内存

通过挂载前统计“free”、挂载文件系统后统计“free”,计算两者差值,得到文件系统挂载占用内存大小。

模块加载占用内存

通过挂载前统计“free”、加载KO模块后统计“free”,计算两者差值,得到加载KO模块占用内存大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Evan_ZGYF丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值