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 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.