Я выделение большого блока разделяемой памяти с использованием shmget на встроенной системе:Как система V IPC имеет дело с фрагментацией при распределении большого блока памяти с помощью «shmget»?
shmid = shmget(key, 16777216, IPC_CREAT | 0666)
Система работает под управлением uClinux (2.6.28 ядра Linux) с помощью Slab аллокатора. У меня нет MMU на процессоре.
Время от времени, при выполнении указанной команды shmget, я получаю отказ в распределении страниц. Это также происходит, когда у меня заканчивается доступная оперативная память, но это также случается раз в то время, когда у меня есть много доступных RAA.
Я подозреваю, что виновник является фрагментацией, но я не совсем уверен, поэтому мои вопросы могут возникнуть из-за того, что подсистема IPC требует непрерывной физической сегмента 16 Мб для этой процедуры и не может найти ее из-за фрагментации память, бросая отказ в распределении, или проблема лежит в другом месте?
Если это связано с фрагментацией, ваш журнал ядра будет иметь что-то в строке «Ошибка выделения страницы: порядок x» и несколько строк ниже списка свободных фрагментов памяти: 'x * 4Kb y * 8Kb z * 16Kb ... 'и так далее. «Порядок» - это количество бит, которое вы меняете, чтобы получить размер выделения. – ninjalj
@ninjalj yup, это ошибка, которую я получаю. – lxe