如何在mips32上启用hugetlb

时间:2016-12-26 03:33:37

标签: linux linux-kernel mmap tlb huge-pages

这是我遇到的问题:

内核驱动程序中的

rx / tx数据包。用户空间程序需要访问每个数据包。因此,内核和用户空间之间存在大量数据传输。 (数据流:内核rx - >用户空间进程 - >内核tx)

吞吐量是KPI。

我决定使用share memory / mmap来避免数据复制。虽然我没有测试过,但其他人告诉我 tlb缺失将是一个问题。

我使用的系统是

  • mips32 system(mips74kc,单核)
  • 默认页面大小4KB。
  • kernel 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。

谢谢你!

1 个答案:

答案 0 :(得分:1)

核心列表的文档是否支持TLB中的非4KB页面?如果不支持,则应修改CPU(将其替换为支持较大页面的CPU,或重新设计CPU并制作新芯片)。

但很可能你是在错误的轨道上,并且tlb丢失尚未被证明是问题(并且2MB大页面是8KB或15KB数据包的错误解决方案)。

我会告诉你"零拷贝"和/或用户空间网络(netmapsnabb,PF_RING,DPDK,用户空间中的网络堆栈)或用户空间网络驱动程序;或基于内核的数据处理程序。但其中许多工具仅适用于较新的内核。