2016-12-26 20 views
0

Вот проблема, которая у меня есть:как включить hugetlb на mips32

rx/tx пакет в драйвере ядра. Программе пользовательского пространства необходимо получить доступ к каждому из этих пакетов. Таким образом, существует огромное количество передачи данных между ядром и пользовательским пространством. (поток данных: ядро ​​rx -> пользовательский космический процесс -> ядро ​​tx)

пропускная способность - это KPI.

Я решил использовать память общего доступа/mmap, чтобы избежать копирования данных. хотя я не тестировал его, другие сказали мне, что tlb отсутствует будет проблемой.

Система, которую я использую систему MIPS32

  • (mips74kc, одноядерный)
  • по умолчанию размер страницы 4KB.
  • ядро ​​2.6.32

Она может фиксироваться только в одном пакете данных. Во время преобразования данных будет много ошибок, которые не будут иметь такой пропускной способности.

Я нашел огромную страницу, возможно, решение. Но, похоже, только mips64 поддерживает hugetlbfs в настоящее время.

https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt https://www.linux-mips.org/archives/linux-mips/2009-05/msg00429.html

Итак, мой вопрос: как я могу использовать hugetlbfs на MIPS32. или есть другой способ решить проблему пропускной способности. (я должен сделать процесс данных часть в пользовательском пространстве)

Согласно пластыря ddaney, в

В настоящее время патч работает только для 64-разрядных ядер, так как значение PTRS_PER_PTE в 32-битных ядрах таково, что невозможно иметь действительную PageMask . Считается, что путем настройки схемы размещения страниц в будущем могут поддерживаться 32-разрядные ядра.

Кажется возможным. Может ли кто-нибудь дать мне подсказку, что нужно изменить, чтобы включить hugetlb.

спасибо!

+0

Если вы хотите «использовать общую память/mmap, чтобы избежать копирования данных», используйте ее. У вас нет проблем с пропуском TLB, и на данном этапе, вероятно, не должно быть огромных страниц. – osgx

ответ

0

Имеет ли документация вашего основного списка поддержка страницы не 4 КБ в ее TLB? Если он не поддерживается, вы должны изменить свой процессор (замените его на некоторые из них, которые поддерживают более крупные страницы, или перепроектируют ваш процессор и создают новый чип).

Но, скорее всего, вы на неправильном пути, а tlb отсутствует, пока не доказано, что проблема (и 2MB огромная страница - неправильное решение для 8KB или 15KB пакетов).

Я расскажу вам об «нулевой копии» и/или сети в пространстве пользователя (netmap, snabb, PF_RING, DPDK, сетевой стек в пользовательском пространстве) или драйвер сети пользовательского пространства; или обработчик данных на основе ядра. Но многие из этих инструментов предназначены только для новых ядер.