Приложение DPDK не может работать без бесплатной огромной страницы - PullRequest
0 голосов
/ 08 января 2019

Я создаю приложение Helloworld в DPDK. Я получаю сообщение об ошибке No free hugepages reported in hugepages-1048567.

(1) Я строю DPDK-18.11, используя RTE_TARGET=x86_64-linuxapp-native-gcc.

(2) Я запускаю usertools/dpdk-setup.sh, запускаю [15] (сборка DPDK).

(3) запустить [22], выделить огромные страницы. Я установил 1024 огромных страницы.

(4) запустить [18], вставить igb_uio модуль.

(5) запустить [24], привязать мой сетевой адаптер (e1000e) к igb_uio модулю.

Затем я перехожу на examples/helloworld/, запускаю make, чтобы собрать приложение. Когда я бегу ./build/app/helloworld -l 0-1 -n 4, я получаю следующее сообщение (без огромной страницы):

xiarui@wcf-OptiPlex-7060:~/dpdk/dpdk-18.11/examples/helloworld/build/app$ sudo ./helloworld -l 0 -n 4
EAL: Detected 12 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: PCI device 0000:00:1f.6 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:15bb net_e1000_em
hello from core 0

Я уже выделил hugepages в скрипте установки и получаю следующий вывод:

AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:    1024
HugePages_Free:     1024
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

Более того, я считаю, что e1000e не может привязаться к VFIO, поэтому я использую только драйвер igb_uio.

Network devices using DPDK-compatible driver
============================================
0000:00:1f.6 'Ethernet Connection (7) I219-LM 15bb' drv=igb_uio unused=e1000e

Мой профиль хоста: CPU:

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              12
On-line CPU(s) list: 0-11
Thread(s) per core:  2
Core(s) per socket:  6
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               158
Model name:          Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz
Stepping:            10
CPU MHz:             800.493
CPU max MHz:         4600.0000
CPU min MHz:         800.0000
BogoMIPS:            6384.00
Virtualization:      VT-x
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            12288K
NUMA node0 CPU(s):   0-11

Память:

xiarui@wcf-OptiPlex-7060:~/dpdk/dpdk-18.11/examples/helloworld/build/app$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        2.4G        4.4G        159M        809M        4.8G
Swap:          2.0G          0B        2.0G

Все становится хуже, когда я бегу pktgen-3.6.0. Я получаю следующую ошибку:

>>> sdk '/home/xiarui/dpdk/dpdk-18.11', target 'x86_64-native-linuxapp-gcc'
   Trying ./app/x86_64-native-linuxapp-gcc/pktgen
sudo -E ./app/x86_64-native-linuxapp-gcc/pktgen -l 0-1 -n 4 --proc-type auto --log-level 7 --file-prefix pg -- -T -P --crc-strip -m 1.0 -f themes/black-yellow.theme

Copyright (c) <2010-2019>, Intel Corporation. All rights reserved. Powered by DPDK
EAL: Detected 12 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Auto-detected process type: PRIMARY
EAL: Multi-process socket /var/run/dpdk/pg/mp_socket
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: PCI device 0000:00:1f.6 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:15bb net_e1000_em
Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio

*** Copyright (c) <2010-2019>, Intel Corporation. All rights reserved.
*** Pktgen created by: Keith Wiles -- >>> Powered by DPDK <<<

Initialize Port 0 -- TxQ 1, RxQ 1,  Src MAC 8c:ec:4b:a5:17:4f

eth_em_start(): Unable to initialize the hardware
!PANIC!: rte_eth_dev_start: port=0, Input/output error
PANIC in pktgen_config_ports():
rte_eth_dev_start: port=0, Input/output error6: [./app/x86_64-native-linuxapp-gcc/pktgen(_start+0x2a) [0x56038a3d29ba]]
5: [/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7) [0x7fe0b33a3b97]]
4: [./app/x86_64-native-linuxapp-gcc/pktgen(main+0xe52) [0x56038a3ca782]]
3: [./app/x86_64-native-linuxapp-gcc/pktgen(pktgen_config_ports+0x1ef1) [0x56038a403761]]
2: [./app/x86_64-native-linuxapp-gcc/pktgen(__rte_panic+0xc5) [0x56038a3bb544]]
1: [./app/x86_64-native-linuxapp-gcc/pktgen(rte_dump_stack+0x2e) [0x56038a4f5f4e]]

Не могли бы вы поделиться какой-нибудь идеей? Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Я запускаю testpmd в usertools/dpdk-setup.sh, и все плохо. Я получаю следующую ошибку:

Launching app
EAL: Detected 12 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: PCI device 0000:00:1f.6 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:15bb net_e1000_em
Interactive-mode selected
testpmd: create a new mbuf pool <mbuf_pool_socket_0>: n=203456, size=2176, socket=0
testpmd: preferred mempool ops selected: ring_mp_mc
EAL: Error - exiting with code: 1
  Cause: Creation of mbuf pool for socket 0 failed: Cannot allocate memory

Кажется, приложение не может выделить память из огромных страниц, я думаю.

Спасибо за ваше время.

РЕДАКТИРОВАТЬ

Полагаю, я был слишком жесток для hugepage allocation. Поэтому я стараюсь выделить 2000*2MB огромных страниц. Тогда все отлично работает.

bitmask: 0x0f
Launching app
EAL: Detected 12 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: PCI device 0000:00:1f.6 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:15bb net_e1000_em
testpmd: No probed ethernet devices
Interactive-mode selected
testpmd: create a new mbuf pool <mbuf_pool_socket_0>: n=171456, size=2176, socket=0
testpmd: preferred mempool ops selected: ring_mp_mc
Done
testpmd>

Я обнаружил в своем VBox, что у меня есть только два lcores, я выделяю только 128 огромных страниц, и все работает нормально. Однако, когда я использую рабочий стол с 12 ядрами, 128 огромных страниц недостаточно.

Не могли бы вы поделиться некоторыми принципами распределения огромных страниц? или просто чем больше, тем лучше. Спасибо за то, что вы поделились своими идеями.

0 голосов
/ 08 января 2019
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: PCI device 0000:00:1f.6 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:15bb net_e1000_em
hello from core 0

Нет свободных 1ГБ огромных страниц - это не ошибка, это просто информация.

Вы получили вывод hello from core 0, так что ваше приложение hello world работает просто отлично, поздравляем!

...