Troubleshooting
Не загружаются драйверы (modprobe)
Симптомы:
-
При загрузке модуля:
modprobe: FATAL: Module igb_uio not found in directory /lib/modules/4.9.0-6-amd64
-
При установке пакета:
Module build for kernel 4.9.0-6-amd64 was skipped since the kernel headers for this kernel does not seem to be installed.
Необходимо установить пакет linux-headers-amd64
(Debian) и убедиться,
что загружена версия ядра, соответствующая версии этого пакета, после чего выполнить:
dkms autoinstall
Не работает docker и docker-compose
По умолчанию эти команды работают только для пользователей группы
docker
и для root
. Это стандартная мера безопасности Docker.
Решение:
usermod -aG docker $USER
newgrp docker
Обработчик пакетов недоступен
Такое сообщение появляется в web-интерфейсе, если обработчик пакетов не
запустился или остановился. Диагностика (из /srv/mitigator
):
docker-compose logs dataplane
Ниже приводятся некоторые типовые проблемы и характерные сообщения.
EAL: Cannot get hugepage information
Сообщение:
EAL: No free hugepages reported in hugepages-2048kB
EAL: No free hugepages reported in hugepages-1048576kB
EAL: FATAL: Cannot get hugepage information.
EAL: Cannot get hugepage information.
Причина: не выделены или полностью заняты hugepages.
Проверить наличие свободных hugepages и убедиться, что значения
HugePages_Total
и Hugepagesize
совпадают с настроенными,
а HugePages_Free
равно HugePages_Total
(или отличается не более,
чем на несколько страниц):
grep Huge /proc/meminfo
EAL: set_mempolicy failed: Invalid argument
Сообщение:
EAL: Trying to obtain current memory policy.
EAL: Setting policy MPOL_PREFERRED for socket 1
EAL: set_mempolicy failed: Invalid argument
EAL: alloc_seg(): allocation happened on wrong socket (wanted 1, got 0)
EAL: Ask a virtual area of 0x40000000 bytes
EAL: Virtual area found at 0x11c0000000 (size = 0x40000000)
EAL: attempted to allocate 1 segments, but only 0 were allocated
Причина: не выделены hugepages на всех используемых приложением NUMA-нодах на многопроцессорной платформе.
Проверить вывод команд (для платформы с двумя NUMA-нодами):
ls /sys/devices/system/node/node0
ls /sys/devices/system/node/node1
Вывод должен содержать каталоги hugepages
и memory
и не должен сильно различаться.
Если таких каталогов нет — проверить машину на физическое наличие памяти на обоих CPU.
Посмотреть информацию по памяти в BIOS, проверить настройки NUMA в BIOS,
проверить настройки памяти и NUMA в OS.
no port found
Сообщение:
/dataplane/etc/dataplane.conf:0 no port found with name '04:00.0'
или
/dataplane/etc/dataplane.conf:0 no port found with pci address '04:00.0'
Нужно убедиться, что адрес устройства 04:00.0 соответствует действительности, и что устройство привязано к драйверу DPDK точно так же, как при подготовке системы.
Если устройство привязано, нужно поискать другие ошибки в логе, например:
EAL: PCI device 0000:04:00.0 on NUMA socket -1
EAL: Invalid NUMA socket, default to 0
EAL: probe driver: 8086:100f net_e1000_em
EAL: 0000:04:00.0 VFIO group is not viable! Not all devices in IOMMU group bound to VFIO or unbound
EAL: Requested device 0000:04:00.0 cannot be used
Эта ошибка означает, что не все устройства одной IOMMU-группы привязаны к драйверу
vfio-pci
. Для работы через vfio-pci
необходимо все порты одной карты привязать
к vfio-pci
, либо перейти на другой драйвер.
Аварийное завершение
При просмотре логов docker-compose logs dataplane
сообщение:
Segmentation fault (core dumped)
Для возобновления работы выполнить команду:
docker-compose up -d dataplane
Далее рекомендуется связаться с разработчиками с целью точной диагностики и исправления и направить им:
-
Описание ситуации, в которой произошла проблема (действий с MITIGATOR, входящего трафика).
-
Описание аппаратной конфигурации сервера:
- модель CPU и сетевых карт;
- размер памяти и конфигурация hugepages;
- версия ядра Linux, используемые драйвера для сетевых карт и их версии.
-
Файл
/srv/mitigator/dataplane.conf
. -
Файл dataplane.stacktrace, который по умолчанию сохраняется в
/var/lib/docker/volumes/mitigator_coredumps/_data/dataplane.stacktrace
. -
Core dump (слепок памяти процесса), который по умолчанию сохраняется в
/var/lib/docker/volumes/mitigator_coredumps/_data/core
. Его размер — гигабайты, но он обычно хорошо сжимается.В некоторых дистрибутивах (например, Ubuntu) файл
core
не появляется, потому что обработка сбоев настроена иначе. Проверить настройку можно так:cat /proc/sys/kernel/core_pattern
По умолчанию в Linux значение
core
. Если оно другое:-
Запомнить исходное значение:
cat /proc/sys/kernel/core_pattern > /tmp/old_core_pattern
-
Заменить его на
core
:echo core | tee /proc/sys/kernel/core_pattern
-
Воспроизвести проблему, получить файл
core
по указанному выше пути. -
Восстановить оригинальное значение:
cat /tmp/old_core_pattern | tee /proc/sys/kernel/core_pattern
-