На 32-битной платформе x86, если vmalloc() может выделять память из ZONE_NORMAL или ZONE_HIGHMEM, означает ли это, что даже если я увеличиваю ZONE_HIGHMEM, фактический общий диапазон, который может использовать vmalloc(), не изменяется? Я сделал тест для увеличения ZONE_HIGHMEM, однократное выделение vmalloc() может быть намного больше, чем раньше. Значит ли это, что vmalloc() фактически выделяет память только из ZONE_HIGHMEM?Имеет ли vmalloc() только память от ZONE_HIGHMEM на 32-битной x86?
3
A
ответ
6
vmalloc
предпочитает ZONE_HIGHMEM
, если он существует, но может вернуться на ZONE_NORMAL
.
Однако на машине с 1 ГБ или более (то есть на любой современной машине) vmalloc
ограничен виртуальной памятью (область vmalloc
), а не физической памятью.
В таком случае область vmalloc
составляет 128 МБ (если не увеличена на vmalloc_reserve
), а ZONE_HIGHMEM
- это то, что плюс память выше 1 ГБ - обычно намного больше.
Что вы увеличиваете, фактически является областью виртуальной памяти vmalloc
, а ее увеличение позволяет вам vmalloc
. Это косвенно увеличивает ZONE_HIGHMEM
, но это не очень импотентное.