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