/ 详情

【21.03】arm(TaiShan 2280 V2)物理机出现内核报错 cma: cma_alloc: alloc failed

Done
Bug
Opened this issue  
2021-02-27 17:00

【环境信息】
环境信息:arm物理机 TaiShan 2280 V2
OS版本:21.03
【问题复现步骤】
1.安装最小化
2.安装成功进入系统查看dmesg日志
【预期结果】
无异常报错
【实际结果】
输入图片说明

Attachments
baizhilaoda 2021-02-27 16:57
baizhilaoda 2021-02-27 17:00

Comments (4)

baizhilaoda created缺陷
baizhilaoda set assignee to XieXiuQi
baizhilaoda set branch to openEuler-21.03
baizhilaoda set start time to 2021-02-27
baizhilaoda set deadline to 2021-03-05
baizhilaoda set related repository to openEuler/kernel
展开全部操作日志

结论:cma预留内存不足,导致申请失败;
1、系统启动后cma预留大小为512M(524288K cma-reserved)
2、日志在4.527402s打印有cma大小为384M(free_cma:6144),说明cma的内存一直在申请;
3、日志在17.697227s打印cma分配失败,返回值-12表示ENOMEM,没有内存了

Charlie_Li set priority to Secondary

结论:cma预留内存不足,导致申请失败;
1、系统启动后cma预留大小为512M(524288K cma-reserved)
2、日志在4.527402s打印有cma大小为384M(free_cma:6144),说明cma的内存一直在申请;
3、日志在17.697227s打印cma分配失败,返回值-12表示ENOMEM,没有内存了

@Jing Xiangfeng
有其它服务或进程在使用CMA内存?
出现内存不足时,对哪些功能会产生影响呢?

@Jing Xiangfeng
有其它服务或进程在使用CMA内存?
出现内存不足时,对哪些功能会产生影响呢?

@Charlie_Li

CMA应该是给驱动使用;如果在CMA申请不到,一般会fallback到伙伴系统申请;

XieXiuQi changed issue state from 待办的 to 已完成
Charlie_Li changed issue state from 已完成 to 已挂起

1.默认配置CONFIG_CMA_SIZE_SEL_MBYTES=64,但由于512M对齐原因,所以最终预留内存为512M;
2.由于CONFIG_ZONE_DMA32=y,预留的512M内存在4G以下预留,若预留的512M用完则会fallback到伙伴系统中分配连续的页给申请者(如问题中的hinic驱动),但由于走到cma_alloc再fallback到伙伴系统,所以每次cma_alloc分配不出都还会报cma分配失败,但最终内存是得到分配的。
3.由于512M对齐原因(64K_PAGE_SIZE), 512M若用完再预留就需要直接预留1G, 而4G以下鲜有连续1G CMA内存,所以4G以下预留1G cma内存可能会失败。
4.如要预留1G以上cma内存,则需要将CONFIG_ZONE_DMA32=n,但不建议,CONFIG_ZONE_DMA32=n影响兼容性(如kdump,驱动DMA32兼容性等)。

zhengzengkai changed issue state from 已挂起 to 已完成

Sign in to comment

状态
Assignees
Labels
Projects
Milestones
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
Branches
Planed to start   -   Planed to end
-
Top level
Priority
参与者(4)