Что это и зачем: http://dpdk.org или http://www.intel.ru/content/dam/www/public/us/en/documents/presentation/dpdk-packet-processing-ia-overview-presentation.pdf Впрочем, если Вы нашли мою запись, то, очевидно, знаете, для чего оно Вам и что это =)
Оговоримся, что тесты идут с картой Intel 540 :
Ставим зависимости:
Грузим модули (Модуль Userspace I/O, он стандартный в Linux):
Получаем адреса всех наших сетевых, которые планируется использовать для теста:
Теперь резервируем блок huge tlb pages, необходимых для работы приложения:
Оговоримся, что тесты идут с картой 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/srcmake install T=x86_64-default-linuxapp-gcc
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
Грузим модули (Модуль 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И теперь для каждой сетевой, которую будем использовать с DPDK делаем вот так:
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
tools/dpdk_nic_bind.py --bind=igb_uio 0000:0d:00.1После этого, убеждаемся, что все сетевые нужные нам появились в блоке "Network devices using DPDK-compatible driver":
tools/dpdk_nic_bind.py --statusПосле этого трафик прекратит захватываться по всем этим интерфейса и передаваться в сетевой стек Linux.
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
Теперь резервируем блок 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.