HUAWEI CLOUD EULEROS-内核异常事件分析指南:page allocation failure

时间:2024-04-17 11:35:33

page allocation failure

page allocation failure是申请空闲页失败时,系统上报的错误。当程序申请某个阶数(order)的内存,但系统内存中,没有比申请阶数高的空闲页,即触发内核报错。

  • 原理

    Linux使用伙伴系统(buddy system)内存分配算法。将所有的空闲页表(一个页表的大小为4K)分别链接到包含了11个元素的数组中,数组中的每个元素将大小相同的连续页表组成一个链表,页表的数量为1、2、4、8、16、32、64、128、256、512、1024,所以一次性可以分配的最大连续内存为1024个连续的4k页表,即4MB的内存。

    假设申请一个包括256个页表的内存,指定阶数order为6,系统会依次查找数组中的第9、10、11个链表,上一个为空,表示没有此阶数的空闲内存,查找下一个,直到最后一个链表。

    如果所有链表均为空,申请失败,则内核上报错误page allocation failure。输出报错信息,描述申请阶数为6的内存页失败:

    page allocation failure:order:6
  • 触发方法

    用alloc_pages连续申请高阶数内存页(例如order=10),不释放,直到申请失败。

support.huaweicloud.com/usermanual-hce/hce_02_0075.html