本文主要是介绍深入内核buddy分配器(芯驰X9/杰发8015 buddy系统明明还有几十M到100多M内存,却分配4k内存失败),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如上图内核打印分配4K内存失败,但是normal 类型的buddy系统还有大量内存。居然分配失败。源码分析:
根据log+faddr2line定位到,调用栈为__alloc_pages_slowpath——》get_page_from_freelist——》zone_watermark_fast
可以看到buddy内存低于一定水平,又不能立即触发kswapd回收内存就会失败。从代码看支持多种watermark.
解决方案1)设置watermark为较小的值
2)可以看到28.489040] 265014 total pagecache pages 很大,可以手动drop cache释放内存
buddy算法通过如下公式找到page的buddy page 和父BUDDY page
这篇关于深入内核buddy分配器(芯驰X9/杰发8015 buddy系统明明还有几十M到100多M内存,却分配4k内存失败)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!