Как создать 100M байтовый буфер - PullRequest
4 голосов
/ 01 мая 2011

Я тестирую пропускную способность интерфейса в Linux. Я использую DMA для передачи данных. DMA нуждается в непрерывном расположении памяти. Но kmalloc не может выделить больше 1 МБ. Есть ли другой способ создать большой буфер размером до 100 Мбайт?

1 Ответ

5 голосов
/ 01 мая 2011

Я думал, что kmalloc не может выделить более 128 КБ, как вы получили его, чтобы выделить 1 МБ?

В любом случае, если вы работаете над недавно загруженной системой, вы можете зарезервировать до 2048 непрерывных страниц.Страницы обычно имеют размер 4 КБ, поэтому это составляет 8 МБ.

_get_free_pages(_GFP_DMA, get_order(2048));

Однако, если вам требуется больше памяти, вы должны выполнить выделение во время загрузки.Если вы пишете драйвер, это может быть достигнуто с помощью функций alloc_bootmem_*.Если вы пишете модуль, вам нужно передать аргумент mem= в ваше ядро, а затем использовать ioremap.

Например, если у вас есть 2 ГБ, вы можете передать mem=1GB, чтобы запретить ядруиспользуя верхний 1 ГБ, а затем позвоните ioremap(0x40000000, 0x40000000), чтобы получить доступ к верхнему 1 ГБ, только для вас.

Но вы знаете, вы должны просто разделить ваш огромный буфер на множество маленьких, это будет оченьпроще и намного больше, как в реальных приложениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...