3

私の物理メモリは4Gで、32ビットのAndroid x86を使用しており、HIGHMEM4Gが有効になっています。vmalloc()スペースをできるだけ拡大したい。

私が試したように、2G / 2G VMsplitに変更して、VMALLOC_RESERVEDを大きくすると、vmalloc()スペースが1Gに到達する可能性があります。しかし、2Gなどのより大きなvmalloc()を取得したい場合、それは可能ですか?

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です。代わりにand
を使用できます。 または、実際に多くのカーネル メモリが必要な理由を考えることができます。kmalloc__get_free_pages

于 2012-05-17T06:48:50.597 に答える