Моей системной памяти достаточно (для сервера с 24 ГБ ). В моей системе пространство ядра выделено 320 МБ и 120 МБ для аварийного ядра. Остальная память используется для других целей. Однако, когда я использую __get_free_pages()
для выделения смежных страниц с порядком 11, ядро не может выделить 2^10 страниц. Почему?
Согласно makelinux
The maximum allowed value for order is 10 or 11 (corresponding to 1024 or 2048 pages), depending on the architecture. The chances of an order-10 allocation succeeding on anything other than a freshly booted system with a lot of memory are small, however.
Почему это так? Каждая страница в моей системе имеет размер 4 КБ (4096 байт ), 2^10 страниц = 1024 страницы, а общий размер составляет 1024 *4096 = 4 194 304 (байт )~. 4 МБ. Это всего 4 МБ непрерывного пространства, а ядро очень маленькое :vmlinuz — всего 2,1 МБ, а initrd — 15 МБ. Общее потребление памяти всего ядра составляет ~300 МБ. Этого должно быть более чем достаточно, чтобы ядро выделило 4 МБ смежных страниц. Даже на обычной машине с ядром/пользователем 1 ГБ/3 ГБ, и, конечно, ядро не будет использовать весь 1 ГБ. Но как может произойти сбой при выделении только 4 МБ смежных страниц? И я думаю, что в пространстве ядра память не разбросана по физической памяти (из-за отображения виртуальной памяти ), а является линейной и непрерывной.
Сначала я попытался загрузить модуль ядра с выделением 2^10 страниц, но это не удалось, и я выгрузил трассировку стека :
[ 6.037056] [] dump_trace+0x86/0x2de
[ 6.037063] [] dump_stack+0x69/0x6f
[ 6.037070] [] warn_alloc_failed+0x13f/0x151
[ 6.037076] [] __alloc_pages_nodemask+0x80a/0x871
[ 6.037081] [] __get_free_pages+0x12/0x50
-. 121 ---1370480-
С момента выпуска Xcode 4 я жил в сомнениях по поводу опции deployment target
. Есть два варианта установки.
Deployment Target
. Это служит для установки минимально возможной версии iOS, на которой может работать приложение.iOS Deployment Target
. Ну, это тот, с которым я не знаком.Может кто-нибудь объяснить мне, как правильно установить второй вариант, если я поддерживаю, скажем, iOS 4+?