2016-12-26 78 views
0

下面是我遇到的問題:如何在mips32上啓用hugetlb

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。

謝謝!

+0

如果你想「使用共享內存/ MMAP以避免數據複製」,然後使用它。您沒有TLB缺失問題,並且在此階段可能不需要大量頁面。 – osgx

回答

0

請問你的核心列表支持非4KB頁的TLB的文件?如果不支持,你應該修改你的CPU(有一些支持更大的頁面替換它,或重新設計你的CPU做出新的芯片)。

但很可能你是在錯誤的軌道,和TLB缺失還沒有被證明是問題(和2MB巨大的頁面是錯解爲8KB或15KB包)。我會告訴你「zero-copy」和/或用戶空間網絡(netmap,snabb,PF_RING,DPDK,用戶空間中的網絡堆棧)或用戶空間網絡驅動程序;或基於內核的數據處理程序。但是其中許多工具僅適用於較新的內核。