2016-12-26 22 views
0

여기에 내가 가지고있는 문제가 있습니다.mips32에서 hugetlb을 활성화하는 방법

커널 드라이버의 rx/tx 패킷. 사용자 공간 프로그램은 이러한 패킷 각각에 액세스해야합니다. 따라서 커널과 사용자 공간 사이에 엄청난 양의 데이터 전송이 있습니다. (데이터 스트림 : 커널 rx -> 사용자 공간 프로세스 -> 커널 tx)

처리량은 KPI입니다.

공유 메모리/mmap을 사용하여 데이터 복사를 피하기로 결정했습니다. 나는 그것을 테스트하지는 않았지만, 다른 사람들은 tlb가 누락되었다고 말했습니다.은 문제가 될 것입니다.

내가 사용하는이 시스템은

  • MIPS32 시스템 (mips74kc, 싱글 코어)
  • 기본 페이지 크기 4킬로바이트입니다.
  • 커널 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을 사용할 수 있습니다. 또는 처리량 문제를 해결하기 위해 다른 방법이있다.

은 현재 패치가 64 비트 커널에서 작동 ddaney의 패치에 따르면

(나는 사용자 공간에서의 데이터 처리 부분을 수행해야합니다) 때문에 32 비트 커널에서 PTRS_PER_PTE의 값은 유효한 PageMask를 가질 수 없도록되어 있습니다. 페이지 할당 구성표를 조정하면 나중에 32 비트 커널을 지원할 수 있다고 생각됩니다.

가능성이 있습니다. hugetlb를 사용하려면 누군가가 수정해야 할 힌트를 줄 수 있습니까?

감사합니다.

+0

공유 메모리/mmap을 사용하여 데이터 복사를 방지하려면 사용하십시오. 당신은 TLB 미스 문제가 없으며이 단계에서는 거대한 페이지가 필요 없을 것입니다. – osgx

답변

0

코어 목록의 문서가 TLB의 4KB가 아닌 페이지를 지원합니까? 지원되지 않는 경우 CPU를 수정해야합니다 (더 큰 페이지를 지원하는 CPU로 대체하거나 CPU를 다시 설계하여 새 칩을 만드십시오).

하지만 대부분의 경우 잘못된 경로에 있으며 tlb 누락이 아직 문제가되지 않았습니다 (2MB의 거대한 페이지는 8KB 또는 15KB 패킷에 대한 잘못된 솔루션 임).

사용자 공간 네트워킹 (netmap, snabb, PF_RING, DPDK, 사용자 공간의 네트워크 스택) 또는 사용자 공간 네트워크 드라이버를 알려줍니다. 또는 커널 기반 데이터 핸들러. 그러나 이들 도구 중 많은 것들이 새로운 커널을위한 것입니다.