架构: x86-64
Linux版本: 4.11.3
这是参考下面的Stack Overflow帖子: -
Allocating more than 4 MB of pinned contiguous memory in the Linux Kernel
我看到问题是要求PCI驱动程序,它要求内核中有超过4 MB的连续内存。但是,我的意图是使用另一个函数代替kzalloc_node
函数(或修改它!)。我想修改内核代码(如果可行的话),以便我可以分配超过4 MB的连续内存,kzalloc_node
不允许我这样做。当然,修改MAX_ORDER
很困难,因为它可能会导致编译器错误。此外,kzalloc_node
函数正在计算与CPU对应的节点 - 因此内存分配发生在节点级别。
背景
基本上我正在尝试增加 sampling 缓冲区的大小,以减少它在充满时产生的开销,并且需要引发中断以从缓冲区读取数据。所以我试图减少中断的数量,从而需要增加缓冲区的大小。内核代码使用kzalloc_node
来分配内存,因此它不能获得超过4 MB的连续内存。我想知道我有什么机制来替换这个函数/分配更多的内存?
我可以更换此功能吗?由于我试图修改内核代码,这里适用相同的启动时分配方法吗?我读到这个机制适用于设备驱动程序,我也可以使用它吗?