LINUX.ORG.RU

[Kernel] Выделение большого кол-ва памяти

 


0

0

Возникла необходимость в кешировании большого кол-ва данных для ускорения процесса обработки. kmalloc мне больше чем ~30Мб за раз не отдает, необходимо около 200. Впринципе я его понимаю, в 1Гб достаточно сложно влезть. С другой стороны у меня на машине 4Гб оперативы, и йузерспейс кушает ну от силы 30Мб. Раньше помню была опция сплита памяти 1/3:3/1, в новом ядре найти не могу. Следовательно вопрос: как стоит поступить? Сделать индекс-вектор для разрозненных кусков памяти, выделить длинный кусок в HIGHMEM или таки поискать патчи для сплита?

vmalloc же, если ты ленивый. Но деологически кошерный способ - именно выделить много кусков поменьше.

tailgunner ★★★★★
()

может, vmalloc или, наоборот, прямо alloc_pages ? (смотря что нужно)

gavv
()
Ответ на: комментарий от gavv

>>vmalloc же

> только вот раз кеширование, может ему не хочется

Почему? vmalloc - это get_free_page + модификация таблицы страниц. Единственный недостаток - доступное для vmalloc виртуальное пространство сильно ограничено, но для 300М должно хватить.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

да, я имел в виду, может быть нужна смежная область

gavv
()
Ответ на: комментарий от tailgunner

Не хотелось бы на vmalloc завязываться, но разовый вызов овер 30000 kmalloc'ов повергает меня в отчаяние :D

vasily_pupkin ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

> Единственный недостаток - доступное для vmalloc виртуальное пространство сильно ограничено

я выделял 1.5Г на машине с 2Г оперативки (amd64), потом весь выделенный кусок обнулял и машина дальше работала :-)

Liosha_Syrnikov
()
Ответ на: комментарий от tailgunner

не, не понял.

А откуда ты это понял?

Я знаю про предел ядра в 890Мегов, но относиться это к 32бит архитектуре или не зависит от архитектуры я не в курсе. А когда получилось выделить и воспользоваться более 1Г памяти в ядре мне стало совсем безразлично откуда у этого ограничения ноги растут.

Liosha_Syrnikov
()
Ответ на: комментарий от Liosha_Syrnikov

> А откуда ты это понял?

Вот отсюда: "Раньше помню была опция сплита памяти 1/3:3/1". На 64-разрядных системах таких патчей не было.

tailgunner ★★★★★
()

> Раньше помню была опция сплита памяти 1/3:3/1, в новом ядре найти не могу

Она и сейчас есть: CONFIG_VMSPLIT_3G/2G/1G

См. arch/x86/Kconfig

eXire ★★
()

можно поинтересоваться, зачем тебе понадобилось кешировать такое количество данных, да еще и в ядре?
может стоит пересмотреть алгоритмы работы и/или структуру организации данных?
(я к тому, что отсутствует тег [хочется странного])

xydo ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.