Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
page_pool: recycling buffer failed: queue ring empty Linux / DevOps

page_pool: recycling buffer failed — Ошибка буферов Page Pool сетевых карт

Обновлено: 18.08.2026  ·  Официальная база знаний

Архитектура ошибки и симптомы сбоя

Сообщение «page_pool: recycling buffer failed: queue ring empty» генерируется подсистемой ядра Page Pool API (net/core/page_pool.c). Подсистема page_pool отвечает за сверхбыстрое повторное использование физических страниц памяти (Zero-Allocation Page Recycling) сетевыми драйверами (mlx5, i40e, ice, igc, virtio_net) при работе с высокими нагрузками и XDP (eXpress Data Path). Ошибка означает, что возврат страницы в кольцевой пул переработки не удался, кольцо пусто, и драйвер вынужден сбрасывать пакеты или совершать медленные аллокации из основного менеджера памяти.

Диагностическая таблица параметров сбоя

ПараметрЗначениеИнженерный смысл сбоя
Page PoolDriver Fast Buffer CacheБыстрый локальный кэш физических страниц для сетевых RX-дескрипторов.
Recycling FailureRing Descriptors StarvationСтраницы удерживаются приложением или XDP-сокетом дольше положенного времени.
ImpactPacket Drops / SoftIRQ CPU SpikesРост счетчиков потерь кадров RX и деградация пропускной способности сети.

Пошаговое дерево решений и сценарии траблшутинга

Сценарий 1: Проверка счетчиков Page Pool и сброшенных пакетов

# Просмотр статистики сетевой карты по page_pool (утилита ethtool / devlink):
ethtool -S eth0 | grep -E "(page_pool|rx_dropped|rx_missed|rx_alloc_failed)"

# Проверка статистики page_pool через интерфейс ethtool (Linux 5.19+):
sudo ethtool --json -S eth0 | grep -A 5 "page_pool"

Сценарий 2: Увеличение аппаратных кольцевых буферов RX сетевого адаптера

# Просмотр максимального поддерживаемого размера буфера:
sudo ethtool -g eth0

# Установка кольцевых буферов в максимальный размер (например, 4096):
sudo ethtool -G eth0 rx 4096 tx 4096

Сценарий 3: Тюнинг параметров NAPI и бюджета сетевой обработки

Увеличьте вес обработки очередей пакетов NAPI в /etc/sysctl.d/99-network-pool.conf:

cat <<EOF | sudo tee /etc/sysctl.d/99-network-pool.conf
net.core.netdev_budget = 600
net.core.netdev_budget_usecs = 4000
net.core.netdev_max_backlog = 10000
EOF
sudo sysctl -p /etc/sysctl.d/99-network-pool.conf

Сценарий 4: Оптимизация времени удержания страниц в XDP AF_XDP (UMEM)

Если вы используете XDP сокеты (AF_XDP), увеличьте размер очередей UMEM Fill Ring и Completion Ring в конфигурации вашего сетевого сервиса (например, FD.io VPP, Suricata, Open vSwitch).

Высокие потери пакетов при обработке сетевого трафика 40G/100G в XDP?
ITSTM настроит оптимальный лэйаут памяти Page Pool, тюнинг UMEM очередей AF_XDP и привязку очередей сетевых карт по NUMA узлам.
Практический опыт инженера: При развертывании XDP/eBPF фаерволов на сетевых картах Intel E810/Mellanox ConnectX-6 всегда синхронизируйте размер кольца RX Ring (ethtool -G rx 4096) с размером XSK UMEM Fill Ring для предотвращения голодания пула дескрипторов.

Частые вопросы (FAQ)

Зачем был создан механизм Page Pool в ядре Linux?

Традиционное выделение страниц памяти на каждый входящий пакет через alloc_pages() создает огромную нагрузку на аллокатор страниц Buddy. Page Pool позволяет сетевой карте мгновенно переиспользовать уже очищенную память без блокировок и вызовов mm ядра.

Почему возникает ошибка queue ring empty?

Она возникает, когда сетевой стек или пользовательское приложение удерживают сетевые пакеты (skb/xdp_buff) в сокетах дольше, чем сетевой контроллер успевает заполнять кольцо приема RX, что приводит к исчерпанию пула готовых страниц.

Влияет ли включение Gro / Lro на работу Page Pool?

Да. Механизм Generic Receive Offload (GRO) объединяет множество мелких страниц в один агрегированный пакет skb, задерживая их возврат в Page Pool до завершения обработки пакета ядром.

Как проверить количество очередей RSS сетевого адаптера?

Выполните команду: sudo ethtool -l eth0. Количество очередей Combined должно соответствовать числу физических ядер процессора.