如何创建100M字节缓冲区

时间:2011-05-01 04:53:07

标签: linux-kernel

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

1 个答案:

答案 0 :(得分: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,只为你。 / p>

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