我正在测试Linux上接口的吞吐量.我正在使用DMA todo进行数据传输.DMA需要连续的内存位置.但是kmalloc无法分配超过1MB.有没有其他方法可以创建高达100M字节的大缓冲区位置?
我以为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,只为你.
但是你知道,你应该将你的巨大缓冲区拆分成许多小缓冲区,这将更容易,更像现实生活中的应用程序.
| 归档时间: |
|
| 查看次数: |
3144 次 |
| 最近记录: |