【问题标题】:how to enable hugetlb on mips32如何在 mips32 上启用hugetlb
【发布时间】:2017-05-10 14:52:26
【问题描述】:

这是我遇到的问题:

内核驱动程序中的 rx/tx 数据包。用户空间程序需要访问这些数据包中的每一个。因此,内核和用户空间之间存在大量数据传输。 (数据流:kernel rx -> 用户空间进程 -> kernel 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。

谢谢!

【问题讨论】:

  • 如果你想“使用共享内存/mmap来避免数据复制”,那就使用它。您没有 TLB 未命中问题,并且在此阶段可能不需要大页面。

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


【解决方案1】:

您的核心列表文档是否支持其 TLB 中的非 4KB 页面?如果不支持你应该修改你的CPU(用一些支持更大页面的替换它,或者重新设计你的CPU并制作新的芯片)。

但很可能你走错了路,而且 tlb 缺失还没有被证明是问题所在(并且 2MB 大页面对于 8KB 或 15KB 数据包是错误的解决方案)。

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

【讨论】:

    猜你喜欢
    • 2018-07-19
    • 1970-01-01
    • 2018-03-12
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多