Собственно процесс установки extfilter довольно прост.
Дано:
ПК (как оказалось есть нюансы):
CPU AMD Ryzen 7
16gb RAM
LAN Intel i350-t2
Требования у меня оказались минимальны, трафика у нас не много, в итоге главное:
- сетевая на intel с очередями > 3 (на i350 говорят очень не плохо работает) с минимум 2 портами (на вход и для отправки)
- любая сетевая для менеджмента (у меня встроенная в мать)
- CPU с поддержкой SSE
Поток в 300мбит
Все это дело собиралось на CentOS 7
Linux filter 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Итак, установка:
обновим систему до актуальной
yum update
yum upgrade
необходимые компоненты
yum install epel-release
yum install python-pyelftools
yum install git mc htop wget gcc make automake kernel-devel zip unzip
yum install net-tools (ifconfiga иначе нет)
yum groupinstall ‘Development Tools’
yum install libpcap-devel
я все сложил в /usr/src/
cd /usr/src/
git clone https://github.com/max197616/extfilter.git
wget http://fast.dpdk.org/rel/dpdk-17.05.1.tar.xz
wget https://pocoproject.org/releases/poco-1.9.0/poco-1.9.0-all.tar.gz
Распаковываем и устанавливаем POCO
tar xf poco-1.9.0-all.tar.gz
cd /poco-1.9.0
./configure
make
make install
cd ../
распаковываем DPDK
tar xf dpdk-17.05.1.tar.xz
cd /dpdk-stable-17.05.1
make config T=x86_64-native-linuxapp-gcc
sed -ri 's,(PMD_PCAP=).*,\1y,' build/.config
make
make install
mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
cp /usr/src/dpdk-stable-17.05.1/build/kmod/igb_uio.ko /lib/modules/`uname -r`/kernel/net
depmod -a
cd ../
Собираем сам extfilter
cd /extfilter
./autogen.sh
./configure --with-dpdk_target=build --with-dpdk_home=/usr/src/dpdk-stable-17.05.1 --enable-native-code
make
make install
Теперь нам надо настроить загрузку ядра
Если у Вас не UEFI, то это можно сделать так:
Создаем в каталоге /usr/lib/tuned папку dpdk-tune
Создаем в dpdk-tune файл tuned.conf:
[main]
include=latency-performance
[bootloader]
cmdline=isolcpus=1,2,3 default_hugepagesz=1G hugepagesz=1G hugepages=4
применяем настройки
tuned-adm profile dpdk-tune
Перезагружаем.
Если у Вас UEFI и в момент прочтения вышеизложенный вариант еще не исправили, а проверить с какими параметрами грузится ядро можно так
cat /proc/cmdline
Идем таким путем:
в /etc/default/grub
в строке GRUB_CMDLINE_LINUX после всего дописываем
isolcpus=1,2,3 default_hugepagesz=1G hugepagesz=1G hugepages=8
делаем
grub2-mkconfig -o /etc/grub2-efi.cfg
и перезагружаемся.
Проверяем что все как положено:
[root@filter ~]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-862.14.4.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet iommu=amd iommu=soft isolcpus=1,2,3 default_hugepagesz=1G hugepagesz=1G hugepages=8
[root@filter ~]# grep Huge /proc/meminfo
AnonHugePages: 6144 kB
HugePages_Total: 8
HugePages_Free: 8
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 1048576 kB
Теперь запускаем
Смотрим сетевые командой
/usr/src/dpdk-stable-17.05.1/usertools/dpdk-devbind.py —status
нас интересует этот раздел:
Network devices using kernel driver
===================================
0000:21:00.0 ‘RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller 8168’ if=enp33s0 drv=r8169 unused= *Active*
0000:22:00.0 ‘I350 Gigabit Network Connection 1521’ if=enp34s0f0 drv=igb unused=
0000:22:00.1 ‘I350 Gigabit Network Connection 1521’ if=enp34s0f1 drv=igb unused=
загружаем нужные
modprobe uio
modprobe igb_uio
добавляем в дпдк сетевые
/usr/src/dpdk-stable-17.05.1/usertools/dpdk-devbind.py —bind=igb_uio 0000:22:00.1
/usr/src/dpdk-stable-17.05.1/usertools/dpdk-devbind.py —bind=igb_uio 0000:22:00.0
Запускаем фильтр
/usr/local/bin/extFilter —config-file=/usr/src/extfilter/etc/extfilter.ini —pidfile=/var/run/extfilter.pid
конфиг с чем испытывал и запускалось
Если повезло, все запустится, если нет, вылетит с ошибкой.
Если в логах messages Вы увидите такое:
Oct 13 13:38:25 filter kernel: AMD-Vi: Event logged [IO_PAGE_FAULT device=22:00.0 domain=0x000d address=0x00000003fc107e80 flags=0x0000]
Oct 13 13:38:30 filter kernel: AMD-Vi: Event logged [IO_PAGE_FAULT device=22:00.1 domain=0x000d address=0x00000003fc08c300 flags=0x0000]
Oct 13 13:38:30 filter kernel: AMD-Vi: Event logged [IO_PAGE_FAULT device=22:00.1 domain=0x000d address=0x00000003fc0aee00 flags=0x0000]
Oct 13 13:38:30 filter kernel: AMD-Vi: Event logged [IO_PAGE_FAULT device=22:00.1 domain=0x000d address=0x00000003fc069800 flags=0x0000]
а фильтр запустившись, все пакеты попадают в missed
в настройки grub необходимо еще такое добавить:
iommu=amd iommu=soft
перезагрузившись, все должно пойти как положено.
Сайт фильтра
https://github.com/max197616/extfilter