如何创建100M字节缓冲区

Mid*_*son 4 linux-kernel

我正在测试Linux上接口的吞吐量.我正在使用DMA todo进行数据传输.DMA需要连续的内存位置.但是kmalloc无法分配超过1MB.有没有其他方法可以创建高达100M字节的大缓冲区位置?

use*_*016 5

我以为kmalloc无法分配超过128kB,你是如何分配1MB的呢?

无论如何,假设您正在使用刚启动的系统,您最多可以保留2048个连续页面.页面一般是4k,所以这个8MB.

_get_free_pages(_GFP_DMA, get_order(2048));

但是,如果需要更多内存,则应在引导时进行分配.如果您正在编写驱动程序,可以使用这些alloc_bootmem_*功能实现.如果您正在编写模块,则必须将mem=参数传递给内核并稍后使用ioremap.

例如,如果你有2GB,你可以传递mem=1GB禁止内核使用上面的1GB,然后调用ioremap(0x40000000, 0x40000000)以获得访问上面的1GB,只为你.

但是你知道,你应该将你的巨大缓冲区拆分成许多小缓冲区,这将更容易,更像现实生活中的应用程序.