【问题标题】:How large VMALLOC space can be in 32bit x86?在 32 位 x86 中可以有多大的 VMALLOC 空间?
【发布时间】:2012-05-24 10:29:05
【问题描述】:

我的物理内存是 4G,我使用的是 32 位的 Android x86,启用了 HIGHMEM4G。我想尽可能地扩大vmalloc()空间。

正如我所尝试的,如果更改为 2G/2G VMsplit 并使 VMALLOC_RESERVED 更大,vmalloc() 空间有望达到 1G。但是如果我想获得更大的vmalloc(),例如2G,有可能吗?

Vmalloc() 从 ZONE_HIGHMEM 和 ZONE_NORMAL 分配。如果我有足够的物理内存,ZONE_HIGHMEM 就足够大了。将vmalloc()设为2G以上有帮助吗?或者vmalloc()受其虚拟空间的限制,所以如果内核虚拟空间总共2G,vmalloc()绝对不能大于这个?

【问题讨论】:

    标签: android linux-kernel 32-bit vmalloc


    【解决方案1】:

    您可以接近 2G(在 2G/2G 拆分时),但是当您这样做时,您的正常区域会缩小。
    大多数内核分配都是在正常区域完成的,因此您会开始看到那里出现短缺,从而导致严重的问题。

    将 VMALLOC_RESERVE 从 1G 增加到 2G 通常是一件坏事。例如。当从 1G 移动到 1.5G 时,vmalloc 增加了 50%,但正常区域缩小了一半。当您接近 2G 时,权衡变得更糟。

    我最好的建议是更改您的代码不要使用太多vmalloc
    您可以改用kmalloc__get_free_pages
    或者你可以想想为什么实际上需要这么多内核内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 2014-07-08
      • 2021-04-08
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 2012-02-25
      相关资源
      最近更新 更多