FastNetMon

Friday 17 April 2015

Сборка модуля netmap на Debian 7/8 с сетевой Intel 82599 с использование драйверов SourceForge

Если Вас устраивают обычные драйверы из дистрибутива, используйте вот эту инструкцию, она намного проще: http://www.stableit.ru/2015/03/netmap-ixgbe.html

Проект netmap не блещет понятной информацией, но я постараюсь упростить Вам немного жизнь.

Вам можно взять пропатченную мною версию драйвера, прошу, в спец репо (там лежит самая новая на 2е марта 2015го года версия драйвера ixgbe с Sourceforge): https://github.com/pavel-odintsov/ixgbe-linux-netmap  Эта версия отлично работает как с ядром 3.2 (Wheezy), так и с ядром 3.16 (Jessie).

Для работ нам нужно будет  установить довольно фундаментальных тулзы:
apt-get install -y make git gcc

Для начала создадим фейковую иерархию повторяющую структуру попок ядра Linux и положим в нее уже пропатченный драйвер ixgbe c Sourceforge:
cd /usr/src
git clone https://github.com/pavel-odintsov/ixgbe-linux-netmap.git
После этого приступаем к сборке модуля netmap вместе с драйвером ixgbe (почему мы собираемся из ветки next потому что стабильная имеет крайне критичные баги):
# Debian 7
apt-get install -y linux-headers-3.2.0-4-amd64
# Debian 8
apt-get install -y linux-headers-3.16.0-4-amd64
cd /usr/src
git clone https://github.com/luigirizzo/netmap.git
cd netmap/LINUX/
Накладывем патч sed'ом:
sed -i 's/#define ixgbe_driver_name netmap_ixgbe_driver_name/\/\/\0/' ixgbe_netmap_linux.h
sed -i 's/^char ixgbe_driver_name\[\]/\/\/\0/' ixgbe_netmap_linux.h
Создаем override конфиг:
vim ixgbe-override
Следующим содержимым:
ixgbe-dst := ixgbe
ixgbe-patch := #(leave empty)
ixgbe-src := /usr/src/ixgbe-linux-netmap/ixgbe-3.23.2.1/src/
Также можно заменить ixgbe-3.23.2.1 на ixgbe-4.1.5, чтобы использовать обновленную версию драйвера.

И наконец-то собираемся:
./configure  --override=ixgbe-override --drivers=ixgbe
make
Выгружаем текущий драйвер ixgbe (обычно он идет из поставки ядра) - будьте внимательны, не выгрузите драйвер той сетевой по которой находитесь на машине:
rmmod ixgbe
Загружаем (последовательность важна):
insmod /usr/src/netmap/LINUX/netmap.ko
insmod /usr/src/netmap/LINUX/ixgbe/ixgbe.ko
Убеждаемся, что netmap поднялся:
ls -al /dev/netmap
crw------- 1 root root 10, 59 Oct 29 03:51 /dev/netmap
Кроме этого, вот так выглядит dmesg, если все подцепилось успешно:
[153334.585563] 291.669424 [3083] netmap_init               run mknod /dev/netmap c 10 59 # error 0
[153334.585631] netmap: loaded module
[153334.855803] Intel(R) 10 Gigabit PCI Express Network Driver - version 3.23.2.1
[153334.855853] Copyright (c) 1999-2014 Intel Corporation.
[153334.856074] ixgbe 0000:0a:00.0: setting latency timer to 64
[153334.856209] ixgbe: 0000:0a:00.0: ixgbe_check_options: FCoE Offload feature enabled
[153335.015669] ixgbe 0000:0a:00.0: irq 74 for MSI/MSI-X
[153335.015681] ixgbe 0000:0a:00.0: irq 75 for MSI/MSI-X
[153335.015690] ixgbe 0000:0a:00.0: irq 76 for MSI/MSI-X
[153335.015699] ixgbe 0000:0a:00.0: irq 77 for MSI/MSI-X
[153335.015708] ixgbe 0000:0a:00.0: irq 78 for MSI/MSI-X
[153335.017961] ixgbe 0000:0a:00.0: PCI Express bandwidth of 32GT/s available
[153335.017987] ixgbe 0000:0a:00.0: (Speed:5.0GT/s, Width: x8, Encoding Loss:20%)
[153335.018104] ixgbe 0000:0a:00.0: eth4: MAC: 2, PHY: 9, SFP+: 3, PBA No: E68793-006
[153335.018141] ixgbe 0000:0a:00.0: 90:e2:ba:4a:d8:dc
[153335.018164] ixgbe 0000:0a:00.0: eth4: Enabled Features: RxQ: 4 TxQ: 4 FdirHash DCA RSC
[153335.019351] ixgbe 0000:0a:00.0: eth4: Intel(R) 10 Gigabit Network Connection
[153335.019380] 292.103764 [2720] netmap_attach             success for eth4 tx 4/512 rx 4/512 queues/slots
[153335.019536] ixgbe 0000:0a:00.1: setting latency timer to 64
[153335.019669] ixgbe: 0000:0a:00.1: ixgbe_check_options: FCoE Offload feature enabled
[153336.166573] ixgbe 0000:0a:00.1: irq 89 for MSI/MSI-X
[153336.166584] ixgbe 0000:0a:00.1: irq 90 for MSI/MSI-X
[153336.166593] ixgbe 0000:0a:00.1: irq 91 for MSI/MSI-X
[153336.166602] ixgbe 0000:0a:00.1: irq 92 for MSI/MSI-X
[153336.166611] ixgbe 0000:0a:00.1: irq 93 for MSI/MSI-X
[153336.168899] ixgbe 0000:0a:00.1: PCI Express bandwidth of 32GT/s available
[153336.168927] ixgbe 0000:0a:00.1: (Speed:5.0GT/s, Width: x8, Encoding Loss:20%)
[153336.169044] ixgbe 0000:0a:00.1: eth5: MAC: 2, PHY: 1, PBA No: E68793-006
[153336.169069] ixgbe 0000:0a:00.1: 90:e2:ba:4a:d8:dd
[153336.169092] ixgbe 0000:0a:00.1: eth5: Enabled Features: RxQ: 4 TxQ: 4 FdirHash DCA RSC
[153336.170307] ixgbe 0000:0a:00.1: eth5: Intel(R) 10 Gigabit Network Connection
[153336.170338] 293.256101 [2720] netmap_attach             success for eth5 tx 4/512 rx 4/512 queues/slots
[153336.170491] ixgbe 0000:0d:00.0: setting latency timer to 64
[153336.170624] ixgbe: 0000:0d:00.0: ixgbe_check_options: FCoE Offload feature enabled
[153336.330127] ixgbe 0000:0d:00.0: irq 94 for MSI/MSI-X
[153336.330138] ixgbe 0000:0d:00.0: irq 95 for MSI/MSI-X
[153336.330147] ixgbe 0000:0d:00.0: irq 96 for MSI/MSI-X
[153336.330156] ixgbe 0000:0d:00.0: irq 97 for MSI/MSI-X
[153336.330165] ixgbe 0000:0d:00.0: irq 98 for MSI/MSI-X
[153336.332445] ixgbe 0000:0d:00.0: PCI Express bandwidth of 32GT/s available
[153336.332474] ixgbe 0000:0d:00.0: (Speed:5.0GT/s, Width: x8, Encoding Loss:20%)
[153336.332591] ixgbe 0000:0d:00.0: eth6: MAC: 2, PHY: 9, SFP+: 3, PBA No: E68793-006
[153336.332628] ixgbe 0000:0d:00.0: 90:e2:ba:4a:d8:e8
[153336.332651] ixgbe 0000:0d:00.0: eth6: Enabled Features: RxQ: 4 TxQ: 4 FdirHash DCA RSC
[153336.333845] ixgbe 0000:0d:00.0: eth6: Intel(R) 10 Gigabit Network Connection
[153336.333875] 293.419834 [2720] netmap_attach             success for eth6 tx 4/512 rx 4/512 queues/slots
[153336.334038] ixgbe 0000:0d:00.1: setting latency timer to 64
[153336.334174] ixgbe: 0000:0d:00.1: ixgbe_check_options: FCoE Offload feature enabled
[153337.477010] ixgbe 0000:0d:00.1: irq 99 for MSI/MSI-X
[153337.477021] ixgbe 0000:0d:00.1: irq 100 for MSI/MSI-X
[153337.477030] ixgbe 0000:0d:00.1: irq 101 for MSI/MSI-X
[153337.477039] ixgbe 0000:0d:00.1: irq 102 for MSI/MSI-X
[153337.477048] ixgbe 0000:0d:00.1: irq 103 for MSI/MSI-X
[153337.479378] ixgbe 0000:0d:00.1: PCI Express bandwidth of 32GT/s available
[153337.479406] ixgbe 0000:0d:00.1: (Speed:5.0GT/s, Width: x8, Encoding Loss:20%)
[153337.479523] ixgbe 0000:0d:00.1: eth7: MAC: 2, PHY: 1, PBA No: E68793-006
[153337.479548] ixgbe 0000:0d:00.1: 90:e2:ba:4a:d8:e9
[153337.479570] ixgbe 0000:0d:00.1: eth7: Enabled Features: RxQ: 4 TxQ: 4 FdirHash DCA RSC
[153337.480771] ixgbe 0000:0d:00.1: eth7: Intel(R) 10 Gigabit Network Connection
[153337.480800] 294.568133 [2720] netmap_attach             success for eth7 tx 4/512 rx 4/512 queues/slots


После этого в случае мирроринга трафика включаем передатчики и активируем режим прослушки:
ifconfig eth3 up
ifconfig eth4 up
ifconfig eth3 promisc
ifconfig eth4 promisc

Собираем примеры:
cd /usr/src/netmap/examples
make
Пробуем послушать трафик:
./pkt-gen -i eth3 -f rx
После этого радуемся пришедшему трафику:
./pkt-gen -i eth3 -f rx
680.697796 main [1624] interface is eth3
680.698022 extract_ip_range [275] range is 10.0.0.1:0 to 10.0.0.1:0
680.698032 extract_ip_range [275] range is 10.1.0.1:0 to 10.1.0.1:0
680.979194 main [1807] mapped 334980KB at 0x7f25d7fd4000
Receiving from netmap:eth3: 8 queues, 1 threads and 1 cpus.
680.979231 main [1887] Wait 2 secs for phy reset
682.979291 main [1889] Ready...
682.979330 nm_open [457] overriding ifname eth3 ringid 0x0 flags 0x1
683.980349 main_thread [1421] 137263 pps (137391 pkts in 1000935 usec)
684.981295 main_thread [1421] 124018 pps (124135 pkts in 1000945 usec)
685.259717 main_thread [1421] 120051 pps (33425 pkts in 278423 usec)

5 comments :

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