Информация
Настройка
Новости
Контакты
Новинка
Распродажа
Оплата
Доставка
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    fasttrack x86

    fasttrack x86

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    fasttrack x86, RouterOS
     
    SMARTNETTT
    Guest
    #1
    0
    20.04.2024 20:41:00
    Fasttrack соединение работает на x86? Да или нет, Mikrotik это знает???
     
     
     
    SMARTNETTT
    Guest
    #2
    0
    01.03.2025 18:21:00
    Не объясняй, если это для x86, ты запутался.
     
     
     
    chechito
    Guest
    #3
    0
    01.03.2025 19:23:00
    Думаю, это работает, но иногда не улучшает производительность так сильно, как на RouterBOARD.
     
     
     
    dang21000
    Guest
    #4
    0
    01.03.2025 19:42:00
    fasttrack, а теперь fasttrack6 с версии 7.18 — это полностью программный процесс в RouterOS. Аппаратное ускорение — это другое и независимое от fasttrack решение, и, как уже говорилось, его производительность и доступность зависят от железа.
     
     
     
    mada3k
    Guest
    #5
    0
    02.03.2025 14:01:00
    Насколько я знаю, fasttrack — это фирменное решение Mikrotik, при котором трафик обрабатывается на уровне драйвера и не требует прохода через всю инфраструктуру ядра. Не путать с L3HW ускорением/выгрузкой.
     
     
     
    yuripg1
    Guest
    #6
    0
    02.03.2025 21:20:00
    Я понимаю, что за FastTrack стоят два разных аспекта: «action=fasttrack-connection» и «hw-offload=yes». Считаю, что «action=fasttrack-connection» работает на любой платформе — то есть сразу переходит к FastPath. Это само по себе должно дать некоторое улучшение. А вот «hw-offload=yes», как мне кажется, связано с интеграцией с чипом коммутатора, что может ещё больше сократить программные операции, но, вероятно, поддерживается только на конкретном оборудовании MikroTik.
     
     
     
    wrkq
    Guest
    #7
    0
    02.03.2025 22:08:00
    «action=fasttrack-connection» активирует стандартный программный FastTrack, который должен работать практически везде. Он устанавливает специальный флаг в механизме отслеживания соединений (IP>Firewall>Connections), чтобы все последующие пакеты, относящиеся к этому соединению, обходили множество программных этапов, экономя ресурсы процессора. «hw-offload=yes» работает только если у вас есть устройство с коммутатором, поддерживающим L3HW Offload, и если на нем включена поддержка L3HW. Это «простой вариант» использования L3HW. По сути, когда механизм FastTrack «включается», он также программирует функции L3HW в чипе для обработки данного соединения, обходя процессор. (Однако это создаёт эквивалент «правила коммутатора» для каждого аппаратного fasttrack-соединения, поэтому существую относительно невысокие ограничения на общее количество соединений, которые можно обработать таким образом одновременно. Вручную настроенные «правила коммутатора» можно сделать так, чтобы они применялись ко всей категории соединений, что позволяет значительно увеличить объём аппаратного разгрузки.)
     
     
     
    NathanA
    Guest
    #8
    0
    23.03.2025 23:44:00
    Fastpath и Fasttrack, в общем-то, не работают на x86. Правда, это никак не связано с аппаратным оффлоадом. Однако обе эти функции требуют специальной поддержки в драйвере сетевого интерфейса (сетевой чип и прочее). MikroTik заморачивается только с драйверами для оборудования, которое стоит в RouterBOARD. Пока мне не попадалась сетевая карта сторонних производителей, которую поддерживает ROS x86 и которая включала бы Fastpath/Fasttrack. Но учитывая, сколько CPU-мощностей можно выделить под x86, это обычно не проблема (во всяком случае у нас так было).
     
     
     
    cstarritt
    Guest
    #9
    0
    24.03.2025 14:56:00
    Я заметил значительное снижение нагрузки на CPU при использовании fasttrack на x86, когда работает довольно много правил фильтрации в цепочке forward, но это не так впечатляет, как на tile ccr с той интеграцией интерфейса, про которую ты говорил.
     
     
     
    Larsa
    Guest
    #10
    0
    24.03.2025 15:39:00
    Знаете, как это на самом деле работает внутри? Я думаю, что Mikrotik использует свои собственные атрибуты skb (скорее всего внутри skb->cb), чтобы помечать пакеты, которые могут обходить такие вещи, как файрвол, NAT или очереди. Это работает на всех архитектурах, включая x86, и не требует специальной поддержки драйверов. Кстати, если ещё не сделали, MT действительно стоит задуматься о переходе на XDP/BPF — это современно, гибко и даёт лучшую производительность.
     
     
     
    NathanA
    Guest
    #11
    0
    24.03.2025 19:37:00
    Я не читал исходный код, поэтому нет. Я основываю свои комментарии как на общедоступной информации, так и на собственных наблюдениях. Касательно последнего: если я запускаю ROS на x86, добавляю пару интерфейсов Intel E1000, убеждаюсь, что Fast Path включён и все требования выполнены (например, conntrack отключён, нет правил файрвола и т.п.), то в IP > Settings будет показано, что Fast Path активен, но счётчики останутся на 0 и не будут расти при передаче пакетов. Аналогично, если на том же роутере включить conntrack, добавить правило NAT masquerade и прописать соответствующее действие fasttrack-connection в фильтрах файрвола IPv4, Fast Path станет неактивен, Fast Track активируется в IP > Settings, и счётчики правила фильтра fasttrack в IP > Firewall > Filter будут увеличиваться. Но счётчики Fast Track в IP > Settings НЕ изменятся и останутся равны 0. Документация по обеим функциям чётко указывает, что они доступны только на определённом железе, и в некоторых случаях только на выбранных интерфейсах/портах на конкретных моделях (например, пакеты, идущие через ether12 или ether13 на RB1100, НЕ могут обрабатываться через Fast Path или Fast Track, и известно, что эти два порта на этой модели не связаны напрямую с SoC, а управляются отдельными сетевыми контроллерами, подключёнными к PCI-шине, как ясно показано на блок-схеме в руководстве (страница 10))! Это значит, что драйверы для соответствующих интерфейсов (ether1-ether11 в случае RB1100) были специально доработаны для поддержки. В той же документации ясно сказано, что Fast Track зависит от Fast Path… значит, если конкретный интерфейс (а значит и его драйвер) не поддерживает Fast Path, он не поддержит и Fast Track. Fast Track описывается как «обработчик» Fast Path:  
    `FastTrack доступен > на устройствах с поддержкой FastPath >. FastTrack = FastPath + Connection Tracking.` (выделено мной)  
    Сотрудник MikroTik в этом посте говорит о драйверах, которые «поддерживают» Fast Path. На слайде 12 презентации с прошедшего MUM по Fast Path чётко указано, что поддержка драйвера — обязательное требование:  
    `FastPath — это > расширение драйвера интерфейса >, которое позволяет принимать/обрабатывать/отправлять трафик без лишней обработки.  
    ● > Драйвер интерфейса > теперь может напрямую взаимодействовать с определёнными процессами RouterOS, минуя остальные  
    ● Требования к FastPath: – > поддержка драйвера интерфейса […]`
    В этом посте есть ссылка на ту же презентацию и делаются аналогичные утверждения в обсуждении поддержки Fast Path на RB850Gx2. К сожалению, я могу лично подтвердить, что RB850Gx2 не поддерживает ни Fast Path, ни Fast Track. Все интерфейсы 850Gx2 ведут себя точно так же, как интерфейс E1000 на x86. В итоге, конкретная поддержка должна быть добавлена в драйверы оборудования, чтобы соответствующий интерфейс на определённом роутере мог работать с Fast Path или Fast Track. Думаю, это не исключает возможности добавить поддержку Fast Path в драйверы Ethernet-интерфейсов на x86, но, судя по всему, MikroTik этого либо не сделал, либо сделал очень скромно — я так и не встретил распространённый PCI/PCIe Ethernet-чипсет с работающим Fast Path на x86. Хочу уточнить, что всё вышесказанное относится главным образом к ROS 6. Возможно, в ROS 7 ситуация изменилась.
     
     
     
    Larsa
    Guest
    #12
    0
    24.03.2025 20:38:00
    Моё мнение: честно говоря, я думаю, что «расширение драйвера интерфейса» скорее всего означает использование чего-то вроде контрольного буфера skb->cb для внутреннего помечания пакетов. Этот буфер специально предназначен для хранения временных метаданных на каждый пакет и часто используется разными подсистемами (включая Netfilter и QoS), чтобы влиять на обработку без необходимости менять драйверы. С точки зрения конструкции, такой подход логичен: он переносим на разные архитектуры, не требует патчей или перекомпиляции драйверов сетевых карт и даёт Mikrotik полный контроль прямо в ROS. Я не вижу технических причин, почему им нужно чинить стандартные драйверы Linux только ради реализации FastPath/FastTrack.

    Но, с другой стороны, признаю, что «поддержка драйвера интерфейса» может не обязательно значить изменение самого драйвера. Это может означать, что драйвер и железо не должны мешать требованиям FastPath — например, избегать задержек на шине PCI, обеспечивать пути прямой передачи DMA или поддерживать базовые оффлоады вроде проверки контрольной суммы или TSO. Это объясняет, почему некоторые интерфейсы (например, на RB1100 или RB850Gx2) не подходят, даже если драйверы при этом не менялись.

    Так что нет, вы меня пока полностью не убедили, но разговор получился очень интересным!
     
     
     
    NathanA
    Guest
    #13
    0
    24.03.2025 22:11:00
    Эх, моооожет быть? Но если это так, придется во время работы проверять кучу всего у потенциального драйвера, чтобы убедиться, что его безопасно поддерживать. Если предположить, что это действительно так, на месте разработчиков MT я бы просто вел белый список драйверов, которым разрешен Fast Path, потому что иначе какая-нибудь неожиданная реализация или баг в драйвере могут вызвать непредсказуемое поведение или проблемы, даже если в остальном он вроде подходит. В любом случае, это не какое-то невероятное или неслыханное событие, что MT патчит ethernet-драйверы. Они уже делают это, чтобы добавить поддержку L2MTU. Известно, что поддержка L2MTU явно нужна в драйвере, потому что интерфейсы на базе драйверов без этой поддержки показывают «0» как L2MTU, и это значение нельзя изменить... И у таких интерфейсов MTU по факту считается равным L2MTU.

    Если бегло просмотреть патчи ядра RouterOS 6, то там есть очень небольшие обновления для минимальной поддержки L2MTU у некоторых драйверов стороннего (x86) оборудования, например, Intel e1000e. А некоторые драйверы, например ixgbe, по какой-то странной причине не получили такую (очень маленькую) доработку.

    Так что, глянув очень поверхностно на патчи от MT (повторюсь, для ROS6, на базе Linux 3.3.5), я не совсем уверен, что они предоставили нам всё необходимое для понимания реализации Fast Path / Fast Track (но это всего лишь мой ОЧЕНЬ беглый осмотр). Совпадений с чем-то вроде «fast.*path» почти нет.

    Одно, что стоит отметить — в структуру net_device_ops в netdevice.h добавлен указатель на функцию *ndo_fast_path_xmit(). Это очень сильно намекает на то, что драйвер устройства должен реализовать эту функцию, чтобы поддерживать Fast Path. Возможно, есть и универсальная версия, от которой можно унаследовать, но я пока её не заметил. (В той же структуре есть похожий указатель *ndo_change_l2mtu(), который, вероятно, нужно реализовать, прежде чем конкретный интерфейс позволит пользователю задавать или менять L2MTU.)

    Хотя можно понимать это по-разному, лично я считаю, что когда MT в конце своей таблицы поддержки устройств Fast Path пишет «Other devices: Not supported», они хотят сказать не «Всё может быть», а то, что любое устройство, НЕ включённое в этот список — а это значит все x86 маршрутизаторы — — это жёсткое «нет».
     
     
     
    Larsa
    Guest
    #14
    0
    25.03.2025 11:24:00
    Привет, хорошие замечания и классное расследование! Справедливо отметить, что Mikrotik действительно патчил драйверы, как ты упомянул с L2MTU — но это в основном касалось ROS 6.x. Когда ROS v6 строился на Linux 3.3.5, было довольно много ограничений в работе с L2MTU, как в сетевом стеке, так и во многих драйверах. Поэтому я полностью верю, что тогда Mikrotik приходилось патчить драйверы гораздо активнее, чтобы всё работало нормально. Но с ROS v7 (сейчас на Linux 5.6.3) полная поддержка L2MTU есть в ядре через netlink, и большинство современных драйверов уже реализуют нужные хуки. Хотя некоторые очень старые драйверы — особенно наследие Realtek и некоторые Broadcom — могут по-прежнему не поддерживать корректно L2MTU, если оригинальный вендор не обновлял совместимость с новыми API ядра. В таких случаях Mikrotik, скорее всего, всё ещё приходится патчить их вручную.

    Твоё открытие указателя функции в “net_device_ops” под названием “ndo_fast_path_xmit()” не означает автоматически, что это связано с глубоко патченым или нестандартным драйвером. Скорее наоборот — скорее всего, это просто стандартный хук трансивера, определённый Mikrotik, примерно так:

    struct net_device_ops {  
    …  
    netdev_tx_t (*ndo_fast_path_xmit)(struct sk_buff *skb, struct net_device *dev);  
    };

    К тому же, если бы драйвер отвечал за решение, когда применять FastPath к пакету, это означало бы, что вся логика выбора пакетов — например, активен ли conntrack, используется ли NAT, есть ли правила файрвола, применяются ли очереди и т. п. — должна была бы жить внутри драйвера. Это выглядит архитектурно неудобно и плохо масштабируется. По сути, это означало бы, что каждый драйвер NIC для ROS нужно кардинально перерабатывать, что кажется маловероятным и излишне сложным.

    Твои наблюдения (например, счётчики остаются нулём) могут также указывать на то, что сами метрики FastPath просто неправильно собираются, а не на полное отсутствие работы FastPath. То, что ROS показывает FastPath активным на x86, даже если счётчики нулевые, всё равно говорит о том, что механизм есть и может включаться.

    Кроме того, в целом я не стал бы воспринимать “Другие устройства: Не поддерживается” как «никогда не заработает». Документация Mikrotik печально известна своей расплывчатостью и порой прямым противоречием по техническим деталям. Для меня ключевой вопрос остаётся таким: требует ли FastPath жёсткой зависимости от патченных драйверов, или ROS может работать со skb и стандартными хуками? Я всё ещё уверен, что верно второе — то есть это можно абстрагировать внутри без вмешательства в драйверы.

    В любом случае, спасибо за подробный ответ!
     
     
     
    NathanA
    Guest
    #15
    0
    25.03.2025 18:56:00
    Да, конечно. Именно это мы и обсуждаем. К сожалению, на данный момент у меня складывается ощущение, что мы (снаружи инженерии MT) не располагаем достаточными доказательствами, чтобы однозначно сказать «да» или «нет», и что мы оба можем смотреть на одни и те же данные и при этом вполне обоснованно прийти к диаметрально противоположным выводам. Например…

    …Я не считаю твой вывод здесь неизбежным. Я с такой же легкостью могу утверждать, что отчёты Fast Path и Fast Track в ROS — это всего лишь индикатор того, что выполнены все «мягкие» требования (то есть нет пользовательской конфигурации — например, правил фильтрации в брандмауэре и т.п., — которые бы мешали работе, если бы аппаратно это действительно поддерживалось), а не однозначный знак того, что Fast-Path реально происходит. RB850Gx2, который как известно не поддерживает Fast Path, тоже будет показывать «ipv4-fast-path-active: yes» или «ipv4-fast-track-active: yes», как только [эти](https://wiki.mikrotik.com/Manual:Fast_Path#IPv4_handler) условия [будут выполнены](https://wiki.mikrotik.com/Manual:IP/Fasttrack#Requirements). Тут я соглашусь. 😂 Я не слышал и не знал о том, что в свежих ветках Linux появилось новое ядро поддержки L2MTU, но даже если это так, насколько я могу судить, глядя на патчи MikroTik к версии 5.6.3, они не используют никакой новой «родной» поддержки L2MTU. Большая часть их кастомных разработок L2MTU, которые были в патчах 3.3.5, кажется, просто перенесена почти в первозданном виде (+ там ещё есть новый «MPLSMTU», реализованный примерно так же).

    Признаюсь, я совсем не спец по внутренностям ядра Linux, уж тем более в части сетевого стека. Тем не менее, кажется, что там происходит что-то большее, хотя я могу сильно неправильно всё интерпретировать (см. предыдущую фразу). Вот реальное определение функции, о которой идёт речь:

    int (*ndo_fast_path_xmit) (struct net_device *dev, struct fp_buf *fpb);

    То есть вызовы этой функции передают не обычный sk_buff вместе с dev-структурой, а какой-то другой буфер пакета (мета?-)структуру, который тоже (по всей видимости) новый. _**Чёрт побери**_, я так и не нашёл определение этой структуры нигде — ни в патчах MT, ни в полном исходном дереве Linux с применённым патчем. Структура объявлена вперёд (forward declaration) прямо перед определением net_device_ops в патче, чтобы можно было использовать её как параметр fast_path_xmit...

    struct fp_buf;

    struct net_device_ops {
    [...]

    …но это всё, что я смог найти. Определения структуры и её полей нет нигде. В принципе, возможно, что это просто алиас на sk_buff, но мы этого просто не знаем! Есть ещё несколько других структур, связанных с Fast Path, названия которых начинаются с «fp_», и многие из них тоже не имеют определений, за исключением fp_dev (кажется, что все остальные объявлены вперёд, так как поля fp_dev сделаны именно из этих типов):

    struct fp_stuff;

    struct fp_dev_pcpu_stats;

    struct fp_stats_rcu;

    struct fp_dev {
          struct fp_stuff *stuff;
          int (*xmit)(struct net_device *dev, struct fp_buf *fpb);
          struct hlist_node list;
          struct fp_dev_pcpu_stats __percpu *stats;
          struct fp_stats_rcu *stats_rcu;
          u64 sp_rx_packet;
          u64 sp_tx_packet;
          u64 sp_rx_byte;
          u64 sp_tx_byte;
          u64 fp_rx_packet;
          u64 fp_tx_packet;
          u64 fp_rx_byte;
          u64 fp_tx_byte;
          u64 tx_drop;
    };

    Видим, что это куча счётчиков и переменная с загадочным названием «stuff», хех. Похоже, что та же функция ndo_fast_path_xmit фигурирует и здесь, только под более коротким именем.

    Структура fp_dev вложена в net_device:

    struct net_device {
    [...]
           unsigned                devid;
           struct fp_dev fp;
           unsigned long list_bitmap[256 / BITS_PER_LONG];

    Однако я не нашёл ни одного места в исходниках Linux, где бы к dev.fp или dev->fp обращались или что-то с ним делали.

    Также есть куча других заявленных функций, связанных с Fast Path, объявленных в include/linux/netdevice.h:

    extern void (*fp_ptype_all_changed)(int);
    extern void (*fp_nf_changed)(int, int pf);
    extern void (*fp_xfrm_changed)(int);

    Они экспортируются из net/core/dev.c. Но при этом **_на самом деле код всех этих функций отсутствует!_**

    void (*ipv4_routing_changed)(void);
    void (*fp_ptype_all_changed)(int);
    void (*fp_nf_changed)(int, int pf);
    void (*fp_xfrm_changed)(int);
    EXPORT_SYMBOL(ipv4_routing_changed);
    EXPORT_SYMBOL(fp_ptype_all_changed);
    EXPORT_SYMBOL(fp_nf_changed);
    EXPORT_SYMBOL(fp_xfrm_changed);

    Я нашёл несколько вызовов этих функций разбросанных по коду, но реализации не нашёл. Это всё, что есть.

    Наконец, есть ещё один указатель на функцию, добавленный в net_device_ops сразу под fast_path_xmit:

    int (*ndo_xmit_commit) (struct net_device *dev);

    Честно говоря, я не уверен, что это связано с Fast Path, но, наверное, да? Во всяком случае, я не нашёл ни одной реализации ни ndo_fast_path_xmit, ни ndo_xmit_commit вообще.

    Так что либо я слеп как крот, либо MikroTik по какой-то причине оставил кучу нужного кода вне своих патчей GPL ядра.

    К слову, у меня сохранился набор патчей ядра от кандидата на релиз версии 6.5, и ndo_fast_path_xmit там было определено так:

    netdev_tx_t (*ndo_fast_path_xmit) (struct net_device *dev, struct net_device *port, void *buf);
     
     
     
    Larsa
    Guest
    #16
    0
    25.03.2025 19:51:00
    Да, но ты забыл добавить мой мощный вывод: я всё ещё уверен, что речь о втором варианте — то есть это можно сделать внутри, без ломания драйверов. Кстати... Чтобы добавить пустую строку, не нужно использовать обратный апостроф, достаточно поставить пробел и перейти на новую строку, вот так: start end
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры