vmalloc()只能从32位x86上的ZONE_HIGHMEM获取内存吗?

Cin*_*bit 3 memory-management linux-kernel vmalloc

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

ugo*_*ren 6

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

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

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