深入内核buddy分配器(芯驰X9/杰发8015 buddy系统明明还有几十M到100多M内存,却分配4k内存失败)

深入内核buddy分配器(芯驰X9/杰发8015 buddy系统明明还有几十M到100多M内存,却分配4k内存失败)_第1张图片如上图内核打印分配4K内存失败,但是normal 类型的buddy系统还有大量内存。居然分配失败。源码分析:

根据log+faddr2line定位到,调用栈为__alloc_pages_slowpath——》get_page_from_freelist——》zone_watermark_fast

可以看到buddy内存低于一定水平,又不能立即回收内存就会失败。从代码看支持多种watermark.

解决方案1)设置watermark和lowmem_reserve为较小的值

2)可以看到28.489040] 265014 total pagecache pages  很大,可以手动drop cache释放内存

深入内核buddy分配器(芯驰X9/杰发8015 buddy系统明明还有几十M到100多M内存,却分配4k内存失败)_第2张图片

buddy算法通过如下公式找到page的buddy page 和父BUDDY page

深入内核buddy分配器(芯驰X9/杰发8015 buddy系统明明还有几十M到100多M内存,却分配4k内存失败)_第3张图片

你可能感兴趣的:(linux)