3

在 32 位 x86 平台上,如果 vmalloc() 可以从 ZONE_NORMAL 或 ZONE_HIGHMEM 分配内存,是否意味着即使我放大 ZONE_HIGHMEM,vmalloc() 可以使用的实际总范围不变?我做了一个放大ZONE_HIGHMEM的测试,vmalloc()的一次分配可以比以前大很多。那么这是否意味着 vmalloc() 实际上仅从 ZONE_HIGHMEM 分配内存?

4

1 回答 1

6

vmalloc喜欢ZONE_HIGHMEM,如果它存在,但可以回退到ZONE_NORMAL.

但是,在具有 1GB 或更大容量的机器(即任何现代机器)中,vmalloc受限于虚拟内存(vmalloc区域),而不是物理内存。
在这种情况下,该vmalloc区域为 128MB(除非按 放大vmalloc_reserve),而ZONE_HIGHMEM1GB 以上的所有内存为 128MB - 通常要大得多。

你扩大的实际上是vmalloc虚拟内存区域,扩大它可以让你vmalloc更多。这间接放大ZONE_HIGHMEM了,但这不是很重要。

于 2012-05-14T21:06:01.500 回答