Howto创建100M字节缓冲区

问题描述:

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

+0

相关http://*.com/questions/116343/what-is-the-difference-between-vmalloc-and-kmalloc – 2011-05-01 05:05:54

我以为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,仅供您使用。

但是你知道,你应该把你的巨大缓冲区分成许多小的缓冲区,它会更容易,更像真实的应用程序。

+0

谢谢Heandel。我正在写司机。已经尝试过使用便笺式方法,并且在中间没有成功。让我再试一次:) – Midson 2011-05-01 13:25:40

+0

最初,我也认为,kmalloc不能分配更多,然后128KB。但在我的测试中,它分配了950KB。顺便说一下,测试是在ARM上进行的。会不会有任何拱门特定差异? – Midson 2011-05-01 13:43:44