【问题标题】:Does vmalloc() only get memory from ZONE_HIGHMEM on 32bit x86?vmalloc() 是否仅在 32 位 x86 上从 ZONE_HIGHMEM 获取内存?
【发布时间】:2012-05-14 17:27:21
【问题描述】:
在 32bit x86 平台上,如果 vmalloc() 可以从 ZONE_NORMAL 或 ZONE_HIGHMEM 分配内存,是否意味着即使我扩大 ZONE_HIGHMEM,vmalloc() 可以使用的实际总范围不变?我做了一个放大ZONE_HIGHMEM的测试,vmalloc()的一次分配可以比以前大很多。那么这是否意味着 vmalloc() 实际上只从 ZONE_HIGHMEM 分配内存?
【问题讨论】:
标签:
memory-management
linux-kernel
vmalloc
【解决方案1】:
vmalloc 首选ZONE_HIGHMEM,如果存在,但可以回退到ZONE_NORMAL。
但是,在 1GB 或更多的机器(即任何现代机器)中,vmalloc 受虚拟内存(vmalloc 区域)的限制,而不是物理内存。
在这种情况下,vmalloc 区域为 128MB(除非被 vmalloc_reserve 放大),而ZONE_HIGHMEM 是 1GB 以上的所有内存 - 通常要大得多。
你放大的实际上是vmalloc 虚拟内存区域,放大它可以让你vmalloc 更多。这间接放大了ZONE_HIGHMEM,但这并不是很重要。