在 32 位 x86 平台上,如果 vmalloc() 可以从 ZONE_NORMAL 或 ZONE_HIGHMEM 分配内存,是否意味着即使我放大 ZONE_HIGHMEM,vmalloc() 可以使用的实际总范围不变?我做了一个放大ZONE_HIGHMEM的测试,vmalloc()的一次分配可以比以前大很多。那么这是否意味着 vmalloc() 实际上仅从 ZONE_HIGHMEM 分配内存?
问问题
1521 次
1 回答
6
vmalloc
喜欢ZONE_HIGHMEM
,如果它存在,但可以回退到ZONE_NORMAL
.
但是,在具有 1GB 或更大容量的机器(即任何现代机器)中,vmalloc
受限于虚拟内存(vmalloc
区域),而不是物理内存。
在这种情况下,该vmalloc
区域为 128MB(除非按 放大vmalloc_reserve
),而ZONE_HIGHMEM
1GB 以上的所有内存为 128MB - 通常要大得多。
你扩大的实际上是vmalloc
虚拟内存区域,扩大它可以让你vmalloc
更多。这间接放大ZONE_HIGHMEM
了,但这不是很重要。
于 2012-05-14T21:06:01.500 回答