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, но это не очень важно.

Другие вопросы по тегам