这是我遇到的问题:
内核驱动程序中的 rx/tx 数据包。用户空间程序需要访问这些数据包中的每一个。因此,内核和用户空间之间存在大量数据传输。(数据流:内核 rx -> 用户空间进程 -> 内核 tx)
吞吐量是 KPI。
我决定使用共享内存/mmap 来避免数据复制。虽然我没有测试过,但其他人告诉我缺少 tlb将是一个问题。
我使用的系统是
- mips32 系统(mips74kc,单核)
- 默认页面大小 4KB。
- 内核 2.6.32
它只能容纳在一个数据包中。在数据转换过程中,会丢失大量影响吞吐量的 tlb。
我发现大页面可能是一个解决方案。但是,目前似乎只有 mips64 支持 hugetlbfs。
https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt https://www.linux-mips.org/archives/linux-mips/2009-05/msg00429.html
所以,我的问题是:如何在 mips32 上使用 hugetlbfs。还是有其他方法可以解决吞吐量问题。(我必须在用户空间做数据处理部分)
根据 ddaney 的补丁,
目前该补丁仅适用于 64 位内核,因为 32 位内核中的 PTRS_PER_PTE 值使得不可能拥有有效的 PageMask。认为通过调整页面分配方案,未来可以支持 32 位内核。
这似乎是可能的。有人可以给我一个提示,需要修改什么,以启用hugetlb。
谢谢你!