【问题标题】: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,但这并不是很重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-24
      • 2010-10-09
      • 2014-08-29
      • 2013-10-23
      • 2020-03-26
      • 2015-03-09
      • 1970-01-01
      • 2017-03-05
      相关资源
      最近更新 更多