Знакомство с программным Ethernet Fast Path на отладочной плате P1020RDB



    Не смотря на то, что процессоры архитектуры ARM начинают активно завоевывать рынок систем широкополосной связи и сетевых технологий, процессоры PowerPC все еще занимают значительную долю рынка благодаря таким производителям, как Freescale.

    В рамках данной статьи мы познакомимся с техническими возможностями процессора Freescale P1020 в части обработки Ethernet-траффика. А также проверим производительность IP-маршрутизации на отладочной плате P1020RDB (внешний вид см. выше).

    Референс-плата (RDB) QorIQ P1020 — это многофункциональная платформа, которая может использоваться в самых разных типах устройств. Доступен 1 ГБ памяти DDR3 SDRAM (без буферизации), а также 16 Мб NOR flash и 32 Мб NAND flash (с возможностью загрузки с флэш-памяти NOR или NAND). Плата поддерживает шесть гигабитных портов через SGMII PHY, RGMII PHY и встроенный 4-портовый свитч, а также 2-порта USB On-The-Go (OTG), четыре FXS-порта и один FXO-порт (через реле).


    Структурная схема P1020RDB

    Подробнее о P1020RDB можно узнать на сайте freescale.com.

    Для ускорения обработки сетевого траффика Freescale предлагает использовать технологию ASF (Application Specific Fastpath) для Linux kernel.

    Реализация ASF представляет собой динамически загружаемые модули ядра Linux, которые можно подключать к стеку Linux во время работы. После подключения в стек Linux пакеты перехватываются c драйвера сетевого устройства Linux (Ethernet) на модуль канала передачи данных ASF.

    ASF рассчитан на наиболее распространенные приложения для передачи данных.

    Основные области применения

    ASF используется для ускорения пропускной способности:
    1. IPv4 Firewall + NAT / NAPT Forwarding
    2. IPv6 Firewall Forwarding
    3. IPv4 + IPv6 IPSec (ESP & AH) Forwarding
    4. Поддержка QoS

    Схема реализации ASF

    ASF интегрируется с различными модулями управления сетями Linux для извлечения информации для обработки данных. На рисунке ниже показано, как модуль ASF вписывается в общую систему на типовой архитектуре ПО сетевого процессора.


    Программная архитектура ASF

    На плате P1020RDB установлено ПО на: QorIO-SDK-1.7-20141218-yocto

    Для работы ASF необходимо включить в ядре от Freescale соответствующую опцию:
    Application Specific FastPath ( Disabled by Default )
      │   Location:                        
      │     -> Device Drivers        
      │       -> Network device support (NETDEVICES [=y])  
    

    Для тестирования пропускной способности будем использовать сетевой анализатор:


    Сетевой анализатор

    Настойка тестового сценария


    Тестировать производительность будем на типовой задаче IP-маршрутизации согласно RFC2544 – Benchmarking Methodology for Network Interconnect Devices.

    Поток данных с первого порта анализатора посылается через плату P1020RDB на второй порт. Полученный траффик отражается и посылается обратно через P1020RDB на первый порт анализатора. Таким образом, во время теста через P1020RDB протекают два разнонаправленных потока данных (Full Duplex). Для того чтобы выполнять полнодуплексную маршрутизацию 1 Гбит/с траффика, процессор должен успевать обрабатывать 2 Гбит данных в секунду.


    На схеме – тестируемая конфигурация

    Конфигурация P1020RDB


    Настройка адресов IPv4 и масок на интерфейсах eth0 and eth1:
    ifconfig eth0 192.168.1.100 netmask 255.255.0.0 up
    ifconfig eth1 10.10.10.100 netmask 255.0.0.0 up
    

    Включение маршрутизации на плате:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    

    Загрузка ASF-модулей ядра:
    insmod asf.ko
    insmod asfctrl.ko
    

    Увеличение числа возможных потоков:
    echo 140000 > /proc/sys/net/nf_conntrack_max
    

    Установка таймаута UDP равным 9000 с (для теста производительности):
    echo 9000 > /sys/asfctrl/ffp/asfctrl_ffp_udp_tmout
    

    Установка параметров групповой обработки кадров:
    ethtool -C eth0 rx-frames 12 rx-usecs 32
    ethtool -C eth1 rx-frames 12 rx-usecs 32
    

    Установка размеров Rx и Tx колец:
    ethtool -G eth0 rx 32 tx 32
    ethtool -G eth1 rx 32 tx 32
    

    Назначение ядра для обработки прерываний:
    echo 2 > /proc/irq/30/smp_affinity
    echo 1 > /proc/irq/36/smp_affinity
    

    Выключение PTP:
    echo 0 > /sys/class/net/eth0/ptp_1588
    echo 0 > /sys/class/net/eth1/ptp_1588
    

    Настройка сетевого анализатора:
    • Порт 1 настраивается в режим передачи UDP-потока на скорости 1 Гбит/с
    • Порт 2 настраивается в режим петли (Mirror mode)

    Запускаем тест пропускной способности.

    Пропускная способность (payload) IP-маршрутизации на P1020RDB с ASF


    Выводы:
    Application Specific Fastpath на P1020RDB работает, т.е. при выполнении IP forwarding на скорости 956,569 Мбит/с (кадр 1500 байт) загрузка процессора была на уровне 2% (по top).

    Стоит отметить, что при обработке траффика с помощью ASF он не проходит через стек Linux, это можно видеть по отсутствию активности на интерфейсе при запуске tcpdump.

    [!?] Спасибо за внимание! Вопросы и комментарии приветствуются. На них будет отвечать программист дизайн-центра электроники Promwad.
    Promwad
    Контрактная разработка и производство электроники

    Комментарии 7

      +1
      То есть, какие-либо манипуляции с пакетами в iptables невозможны?
        +1
        При использовании ASF стандартные сетевые утилиты Линукс такие как iproute2, ipsec-tools, iptables, tc и vconfig продолжают работать. При этом надо понимать, что в ASF реализованы механизмы обработки только типовых сценариев. Т.е. настроенный через iptables обычный NAT будет работать через ASF, а более сложный Stateful Packet Inspection будет по-прежнему работать через Линукс.
          0
          Ага, понятно, спасибо.
          А если некое правило не соответствует типовому сценарию, то только траффик подходящий под это правило пойдёт в обход ASF? Или весь?
            0
            Только этот «сложный» траффик пойдет через Linux Networking Stack.
        0
        Очень интересно как реализовано ускорение IPsec.
        Как именно встраиваетесь в XFRM? Встраиваетесь ли в crypto API как AEAD, или сами обрабатываете ESP/AH за один проход, подменяя соответствующий путь в XFRM? Как отслеживаете что создались новые SA и отжили свое старые? Какова производительность в режиме ESP/AES-128-CBC/HMAC-SHA1 по pps и по трафику? Умеете ли полностью оффлоадить ESP/AH после установления SA, или аппаратно ускорена только обработка «раздетого» пакета ESP/AH без аппаратного роутинга и NAT?
        Скорее всего секрет, но какой у вас криптомодуль (скорее всего готовое синтезированное ядро, не так ли)? Есть ли документация / SDK для криптоадаптера, или оно все вдоль и поперек закрытое?
        И еще: где и почем купить на «погонять»? :)
          0
          INSTE:

          С P1020 мы в IPSec и «криптомодули» не погружались, т.к наши проекты в другой области — а именно в промавтоматике / IEC-61850. Там важно -40+85 температурный диапазон, latency / время реакции, точное время IEEE-1588v2.

          На сайте Freescale P1020RDB $545, брали через дистрибьютора EBV — под реальный/коммерческий проект могут дать бесплатно на «погонять».

          Стоит отметить, что P1020 уже достаточно проверенное временем решение, реализованное во многих проектах, недавно у Freescale появилось более свежая линейка: T10xx — там повыше частота, получше техпроцесс и другие плюшки. Для новых проектов смотрите в сторону T10xx.
          0
          Ну и кстати просто делать IPv4 NAPT это очень тупо и неинтересно, сейчас все более-менее массовые и дешевые чипы для CPE это делают (включая RTL8196x, MT762x, RT6xxxx и Broadcom). А вот как дело обстоит с L2TP / PPPoE / GRE?

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое