FastNetMon

Sunday, 16 March 2014

Установка и использование Intel dpdk 1.7.1 на Debian Wheezy

Что это и зачем: http://dpdk.org или http://www.intel.ru/content/dam/www/public/us/en/documents/presentation/dpdk-packet-processing-ia-overview-presentation.pdf Впрочем, если Вы нашли мою запись, то, очевидно, знаете, для чего оно Вам и что это =)


Оговоримся, что тесты идут с картой Intel 540 :
01:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)

Ставим зависимости:

apt-get install gcc-multilib
Компилируем:
cd /usr/src
wget http://dpdk.org/browse/dpdk/snapshot/dpdk-1.7.1.tar.gz
tar -xf dpdk-1.7.1.tar.gz
cd dpdk-1.7.1
make install T=x86_64-native-linuxapp-gcc
make install  T=x86_64-default-linuxapp-gcc
Грузим модули (Модуль Userspace I/O, он стандартный в Linux):
modprobe uio
Загружаем драйвер dpdk:
insmod ./x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
Биндим все интерфейсы на сетевых интел для работы с igb_uio.

Получаем адреса всех наших сетевых, которые планируется использовать для теста:
tools/dpdk_nic_bind.py --status

Network devices using DPDK-compatible driver
============================================
<none>

Network devices using kernel driver
===================================
0000:02:00.0 'I350 Gigabit Network Connection' if=eth0 drv=igb unused=igb_uio *Active*

Other network devices
=====================
0000:02:00.1 'I350 Gigabit Network Connection' unused=igb_uio
0000:02:00.2 'I350 Gigabit Network Connection' unused=igb_uio
0000:02:00.3 'I350 Gigabit Network Connection' unused=igb_uio
0000:0a:00.0 '82599EB 10-Gigabit SFI/SFP+ Network Connection' unused=igb_uio
0000:0a:00.1 '82599EB 10-Gigabit SFI/SFP+ Network Connection' unused=igb_uio
0000:0d:00.0 '82599EB 10-Gigabit SFI/SFP+ Network Connection' unused=igb_uio
0000:0d:00.1 '82599EB 10-Gigabit SFI/SFP+ Network Connection' unused=igb_uio
 И теперь для каждой сетевой, которую будем использовать с DPDK делаем вот так:
tools/dpdk_nic_bind.py --bind=igb_uio 0000:0d:00.1
После этого, убеждаемся, что все сетевые нужные нам появились в блоке "Network devices using DPDK-compatible driver":
tools/dpdk_nic_bind.py --status

Network devices using DPDK-compatible driver
============================================
0000:0a:00.0 '82599EB 10-Gigabit SFI/SFP+ Network Connection' drv=igb_uio unused=
0000:0a:00.1 '82599EB 10-Gigabit SFI/SFP+ Network Connection' drv=igb_uio unused=
0000:0d:00.0 '82599EB 10-Gigabit SFI/SFP+ Network Connection' drv=igb_uio unused=
0000:0d:00.1 '82599EB 10-Gigabit SFI/SFP+ Network Connection' drv=igb_uio unused=

Network devices using kernel driver
===================================
0000:02:00.0 'I350 Gigabit Network Connection' if=eth0 drv=igb unused=igb_uio *Active*

Other network devices
=====================
0000:02:00.1 'I350 Gigabit Network Connection' unused=igb_uio
0000:02:00.2 'I350 Gigabit Network Connection' unused=igb_uio
0000:02:00.3 'I350 Gigabit Network Connection' unused=igb_uio
После этого трафик прекратит захватываться по всем этим интерфейса и передаваться в сетевой стек Linux.


Теперь резервируем блок huge tlb pages, необходимых для работы приложения:
mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 64 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
Выставляем высшую частоту процессора:
for gov in /sys/devices/system/cpu/*/cpufreq/scaling_governor ; do echo performance >$gov ; done
Собираем примеры:
cd examples
export RTE_TARGET=x86_64-native-linuxapp-gcc
export RTE_SDK=/usr/src/dpdk-1.7.1
make
Запускаем:
build/helloworld -n 2 -c 7
Как тестер еще можно использовать:
build/app/testpmd -c7 -n3 -- -i --nb-cores=2 --nb-ports=1
Вот пример дефрагментатора пакетов:
./ip_fragmentation -c 1 -n 1 -- -p 1
Источник: http://blog.csdn.net/linzhaolover/article/details/9452641



No comments :

Post a Comment

Note: only a member of this blog may post a comment.