我正在测试 Linux 上接口的吞吐量。我正在使用 DMA 进行数据传输。 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 的访问权限。
但你知道,你应该将巨大的缓冲区分成许多小的缓冲区,这会更容易,而且更像现实生活中的应用程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)