3

我的物理内存是 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()绝对不能大于那个?

4

1 回答 1

2

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

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

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

于 2012-05-17T06:48:50.597 回答