【发布时间】:2011-06-18 21:19:01
【问题描述】:
我在嵌入式系统上使用 shmget 分配一大块共享内存:
shmid = shmget(key, 16777216, IPC_CREAT | 0666)
系统正在使用 Slab 分配器运行 uClinux (2.6.28 Linux Kernel)。我在 CPU 上没有 MMU。
有时,在运行上述 shmget 命令时,我会遇到页面分配失败。当我的可用 RAM 用完时也会发生这种情况,但是当我有大量可用的 RAA 时也会偶尔发生这种情况。
我怀疑罪魁祸首是碎片,但我不太确定 - 所以我的问题是,是否会导致此错误,因为 IPC 子系统需要一个连续的物理 16Mb 段来执行此过程,并且由于内存碎片而找不到一个,抛出分配失败,还是问题出在其他地方?
【问题讨论】:
-
如果这是由于碎片造成的,您的内核日志将包含类似于
page allocation failure: order x的内容,以及空闲内存块列表下方的几行:x*4Kb y*8Kb z*16Kb ...等等。 “顺序”是您移动页面大小以获得分配大小的位数。 -
@ninjalj 是的,这就是我收到的错误。
标签: c linux embedded operating-system kernel