首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调试/查找cma分配失败的原因?

如何调试/查找cma分配失败的原因?
EN

Stack Overflow用户
提问于 2019-03-06 06:48:24
回答 1查看 1.4K关注 0票数 0

是否有任何可用于CMA失败调试的开源调试方法/修补程序?如何了解CMA分配失败的原因

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-20 06:03:31

1.当cma_allocation失败时,它会转储失败的回溯。

例如:

35.360001页:bef55be8计数:58张地图:56张地图:bc4001dc索引:0x3

35.366855标志: 0x8019040c(referenced|uptodate|arch_1|mappedtodisk|unevictable|mlocked)

原价: 8019040c bc4001dc 00000003 00000037 0000003a b9eb1a98 b9eb1a98 00000000

35.383299 raw: be008c00

35.385916页转储是因为:VM_BUG_ON_PAGE(PageLRU(页面)\x{e76f}PageUnevictable(页))

35.393995页->mem_cgroup:be008c00

35.397668

35.402281内核错误在mm/vmsn.c:1350!

35.406458内部错误: Oops - BUG: 0 #1抢占SMP手臂

37.778079回溯:

37.780531 (shrink_page_list)来自<803617c8>

37.790093 r10:b9c6fb88 r9:b9c6fb9c r8:b9c6fb0c r7:8141e100 r6:81216588 r5:b9c6fb9c 37.797914 r4:bf05ffb8

37.800444 (reclaim_clean_pages_from_list)来自<80352b2c>

37.810178 r10:00000000 r9:8121e384 R8:814790c4R7:b9c6e000 r6:0006a000 r5:00081a00 37.817999 r4:b9c6fb9c

37.820529 (alloc_contig_range)来自<803bd8c8> 37.828527 r10:00040000 R9:00017c00R8:fffff4R7:00017c00R6:8147bf24R5:00009e00 37.836347 r4:00069e00

37.838878 (cma_alloc)来自<80694188>

37.847310 r10:00000000 r9:80607f30 r8:b9c6fd64 R7:00017c00R6:17c00000 r5:81216588 37.855131 r4:00000001

37.857661 (dma_alloc_from_contiguous)来自<80218720>

37.867396 (__alloc_from_contiguous)来自<80218854>

37.876523 r10:00000000 r9:b9c6fe08 r8:81216588 r7:00c00000 r6:b94d0140 r5:80607f30 37.884343 r4:00000001

37.886870 (cma_allocator_alloc)来自<80217e28>

37.895125 R5:bd2da400r4:014000c0 37.898695 (__dma_alloc)来自<80218000>

37.906258 r10:00000080 r9:17c00000 r8:80c01778 r7:bd2da400 r6:8148ff6c r5:00c00000 37.914079 r4:00000707

37.916608 (arm_dma_alloc)来自<80607f30> r5:81490278 r4:81216588

可以使用此回溯来调试cma分配失败。

  1. 在分配之前和分配之后,不断检查/proc/pagetypeinfo,它将提示页面是否返回到初始阶段。
  2. 要获取页面信息,请参阅以下链接:- 链接
  3. 稳定的内核错误,这里是补丁链接

链接称:-

这一机制存在以下弱点。

  1. 由于以下原因,分配失败的CMA可能无法分配连续内存。 1-1。直接固定任何内核线程可以将任何可移动的页面固定很长一段时间。如果需要迁移以进行连续内存分配的可移动页已被某人固定,则无法完成迁移。因此,如果页面不是长期不固定的,则连续分配可能会失败。 1-2。间接引脚如果可移动页与对象有依赖关系,则该对象将增加可移动页的引用计数,以断言使用该页是安全的。如果在这种情况下,需要迁移用于连续内存分配的可移动页,则该页不能被连续分配使用。因此,连续分配可能失败。

总之,cma不能保证连续内存分配的成功和快速延迟。其核心原因是cma选择二级客户端(可移动页面)不够好(很难迁移/丢弃)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55017182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档