Профиль: Аноним (вход | регистрация) неRU opennet.me  
OpenNET

[ новости /+++ | форум | теги |    ]

Опубликован сетевой стек F-Stack 2.0, работающий в пользовательском пространстве

22.10.2026 14:23 (MSK)

Состоялся релиз проекта F-Stack 2.0, развивающего редакцию сетевого стека FreeBSD, адаптированную для обособленной работы в пользовательском пространстве в форме библиотеки. Проект создан крупнейшей в Китае телекоммуникационной компанией Tencent и используется в её продуктах и сервисах. Код написан на языке Си и распространяется под лицензией BSD. Поддерживается работа в Linux и FreeBSD. Проектом также поддерживаются переведённые на использование F-Stack редакции Nginx 1.28 и СУБД Redis 6.2.6, демонстрирующие производительность выше обычных сборок, работающих поверх системного сетевого стека.

F-Stack позволяет задействовать в приложениях собственный локальный сетевой стек, не зависящий от сетевого стека операционной системы, функционирующий в пользовательском пространстве и напрямую работающий с сетевым оборудованием. F-Stack позиционируется как решение, позволяющее повысить производительность обработчиков сетевых запросов в условиях, когда штатный TCP/IP стек ядра Linux становится узким местом и ограничивает масштабирование. Теоретически F-Stack позволяет достигнуть потолка сетевой производительности, возможного для используемой сетевой карты, и в некоторых ситуациях даёт возможность в разы увеличить число обрабатываемых мелких сетевых запросов.

Повышение производительности достигается за счёт исключения таких операций, как копирования сетевых пакетов, планирование потоков, обработка прерываний и обращение к системным вызовам. Для взаимодействия с сетевой картой, минуя интерфейсы ядра операционной системы, применяется фреймворк DPDK (Data Plane Development Kit), развивающий набор библиотек для низкоуровневой работы с сетевыми адаптерами. DPDK даёт возможность снизить накладные расходы и уложиться в минимальное число циклов CPU при приёме или отправке сетевых пакетов.

Функциональность стека TCP/IP соответствует сетевому стеку FreeBSD 15 и выделена из данной операционной системы в независимую библиотеку. Для разработки приложений можно использовать стандартный API POSIX (socket, epoll, kqueue) или собственный программный интерфейс на основе микропотоков, упрощающий создание сетевых приложений и позволяющий обойтись без сложной логики асинхронной обработки запросов. Возможно использование с немодифицированными приложениями с загрузкой через LD_PRELOAD.

Наиболее заметные изменения в новом выпуске:

  • Компоненты сетевого стека обновлены до состояния FreeBSD 15 (ранее использовался FreeBSD 13).
  • Реализован режим многопоточной работы (thread_mode=1) в одном процессе, дополняющий ранее доступный многопроцессный режим.
  • Добавлен легковесный режим работы (primary_slim), при котором основной процесс выполняет только базовые задачи инициализации и координации работы, а приём пакетов и обработка очередей приёма/передачи (rx/tx) производится только на стороне дочерних процессов.
  • Добавлена поддержка механизма аппаратного ускорения TSO (TCP Segmentation Offload) для выноса на сторону сетевой карты операций объединения пакетов, с возможностью отката на программную реализацию. Улучшена поддержка TSO (TCP Segmentation Offload, вынос на сетевую карту обработки сегментов пакетов) для IPv6.
  • Добавлена возможность изменения размера MTU (Maximum transmission unit) и реализована поддержка jumbo-кадров.
  • Расширены возможности управления аппаратным ускорением вычисления контрольных сумм отправляемых пакетов
  • Добавлена функция ff_zc_recv() для получения данных в без промежуточной буферизации (zero-copy). Переработана аналогичная функция ff_zc_send() для отправки. Оптимизирована и дополнена поддержкой IPv6 функция ff_rss_check().
  • Добавлен опция FF_KERNEL_COEXIST для работы совместно с сетевым стеком ядра.
  • Предоставлена возможность сохранения информации о трафике в pcap-дампах с наносекундной точностью.
  • В config.ini добавлены новые параметры idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms и reload_udp_idle_ms.
  • В специализированной сборке nginx реализована поддержка перезагрузки конфигурации и обновления бинарного файла без разрыва соединений (graceful_reload=1).


  1. Главная ссылка к новости (https://github.com/F-Stack/f-s...)
  2. OpenNews: Выпуск DPDK 18.02, фреймворка для высокопроизводительных сетевых приложений
  3. OpenNews: Оценка способности сетевого стека Linux обрабатывать миллион пакетов в секунду
  4. OpenNews: Проект LibOS развивает вариант ядра Linux с сетевым стеком в форме библиотеки
  5. OpenNews: Intel представил сокращённый вариант сетевого стека для Linux
  6. OpenNews: Fastsocket - новая высокомасштабируемая реализация сетевой подсистемы ядра Linux
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/66526-f-stack
Ключевые слова: f-stack, dpdk
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (47) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Андрей (??), 14:50, 22/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/–
    DPDK + FreeBSD-15 stack in userland = вот это сила!

    По отдельности всё проверено, правда без userland. Точно работает.

     
     
  • 2.10, Аноним (10), 15:17, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    > DPDK (Data Plane Development Kit), развивающий набор библиотек для низкоуровневой работы с сетевыми адаптерами.

    Низкоуровневый доступ к сетевым адаптерам требует прав root. А поскольку это библиотеки, динамически слинкованные с прграммой, то она тоже должна работать под root?

     
     
  • 3.14, Аноним (14), 15:23, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Ты в курсе что такое IOMMU и DMA и почему тут приложению не требуется рут?
     
     
  • 4.17, Аноним (10), 15:29, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Ага, а доступ к контроллеру DMA уже позволен простому юзеру?
     
     
  • 5.19, Kilrathi (ok), 15:39, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    sudo chown nginx-user:fstacknetgroup /dev/...
    sudo setcap ... /user/local/bin/fstack-nginx
     
     
  • 6.21, Аноним (10), 16:02, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    И какие CAP надо дать для позволения записывать в регистры управления контроллеров?
     
     
  • 7.26, Kilrathi (ok), 16:18, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    > И какие CAP надо дать для позволения записывать в регистры управления контроллеров?

    таки классическая "драйверная" cap_sys_rawio для mmap к отображению регистров в памяти

     
     
  • 8.28, Аноним (10), 16:57, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    В случае, если взломают эту одну прогу, считай, что зарутовали весь остальной се... текст свёрнут, показать
     
     
  • 9.35, Аноним (35), 18:03, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    А другой безопасности в юниксвее не предусмотрено Пользуйтесь чем-то другим ... текст свёрнут, показать
     
     
  • 10.43, Аноним (10), 18:56, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    В чём-то другом всё хуже В данном случае, нам предлагают не юниксвей Это, скор... текст свёрнут, показать
     

  • 1.2, sena (ok), 14:53, 22/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    Я так понимаю, подразумевается, что приложение получает в эксклюзивное пользование сетевую карту и дальше всё рулит самостоятельно? ОК это понятно.

    А возможность поделиться сетью с другим приложениями есть? Может как-то в виде прокси?

     
     
  • 2.8, Kilrathi (ok), 15:11, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    В данном случае userspace означает взаимодействие с сетевушкой напрямую в обход ядра/системы.
    А так это почти обычный сетевой интерфейс
    Ничто не мешает собрать комплект сетевых приложений на общий компонент доступа

    Можно поднять проксирование, но пропадет весь смысл прямого эксклюзивного взаимодействия с железом

     

  • 1.3, Аноним (3), 14:55, 22/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/–
    >Проект создан крупнейшей в Китае телекоммуникационной компанией Tencent и используется в её продуктах и сервисах

    Дальше не читал. Занавес.

     
     
  • 2.5, Аноним (5), 15:04, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Код открыт или какая там стандартная мантра?
     
     
  • 3.9, Kilrathi (ok), 15:12, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    https://github.com/F-Stack/f-stack
     
  • 2.7, Pahanivo (ok), 15:09, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    А зря. Там еще много приколов )) Там например одна приложуха может уронить весь стек ибо он в юзерспейсе, и все встает раком - на семь бед только ресет.
     
     
  • 3.11, Kilrathi (ok), 15:20, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Насколько я понял с доков: там одна из фишек в привязке к ядрам и сетевушкам, т.е. рухнет только конкретный сервис, висящий на конкретной связке для повышения сетевой производительности и антидоса.
    Соответственно, просто по стороннему каналу (второй-третьей... штатной "ядерной" сетевушке) подключаешься и перезапускаешь, если не озадачился системой контроля, занимающейся постоянным мониторингом и, при необходимости, перезапуском.
     
  • 3.12, Аноним (14), 15:20, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    Ядерный стек никуда не исчез. Так что без сети остальные приложения не останутся.
     
     
  • 4.18, Pahanivo (ok), 15:36, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Наличие ядерного стека не противоречит тому, что все привязанное к неядерному упало ...
     
     
  • 5.23, Аноним (35), 16:08, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Ну упало и упало. Systemd поднимет. Ядерный стек когда падает, за ним следом всё ядро улетает.
     
  • 5.39, Аноним (14), 18:31, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    И что? Это ж прям микроядренная ОС получается с дровами и сетевым стеком в юзерспейсе со всеми его плюсами, разве нет?
     
     
  • 6.45, Аноним (10), 19:02, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    В микроядерной ОС сетевой стек хоть и на пользовательском уровне привилегий, но в отдельном адресном пространстве от приложений.
     
     
  • 7.46, Аноним (14), 19:05, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    А что, при использовании сабжа виртуальная память вдруг отключается?
     
  • 3.37, Аноним (37), 18:23, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Не весь а только свой, и нет, не встаёт - приложение перезапускается вместе со стеком. Вобщем-то всё ожидаемо.
     
  • 2.40, aname (ok), 18:31, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    "Тысячи глаз" ©®™ не осилили.

    Занавес

     

  • 1.6, Аноним1234 (?), 15:07, 22/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    То есть нужно запустить с правами рута своё сетевое прилоежние, чтобы оно могло низкоуровнево общаться с сетевой картой.
     
     
  • 2.13, Аноним (14), 15:22, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    Ты в курсе что такое IOMMU и DMA?
     

  • 1.15, Инопланетянин (?), 15:25, 22/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/–
    Что по производительности?
     
     
  • 2.25, Хру (?), 16:13, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Дохрена:) Выжимает в асфальт 400Gbit, если оборудование тянет и одно ядро отдать тупо под опрос очереди и еще несколько на роутинг.
     

  • 1.16, Инопланетянин (?), 15:27, 22/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    В чем отличие от passt https://passt.top/passt/about/ ?
     
     
  • 2.24, Хру (?), 16:11, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Теплое с мягким:) Паста это про связать виртуалку с хостом, а сабж это про стек в юзерспейсе и обработку пакетов опросом очереди карты, а не через прерывания.
     

  • 1.20, Аноним (20), 15:50, 22/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/–
    А еще уефи ругали за доступ к инету... Теперь цве в опен сурс само будет просматривать котиков без разрешения.
     
     
  • 2.22, Аноним (10), 16:06, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Согласен, с точки зрения сетевой безопасности, это большое "технологическое отверстие".
     
  • 2.41, Аноним (14), 18:47, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Кто ругал? UEFI обычный код выполняемый на CPU, почему он вдруг не может иметь доступ в Интернет? Так-то и BIOS умел PXE-загрузку, а значит и в Инет спокойно мог так же вылезти - TCP/IP то у него есть. BIOS тож ругали?
     

  • 1.27, Ivan_83 (ok), 16:36, 22/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    Если там же есть поддержка загружаемых TCP стёков то линуксоиды наконец то смогут попробовать нормальный CC=rack от нетфликса вместо дурацких bbr от гугла :)
     
  • 1.29, beany (?), 17:03, 22/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    Во фряху тащят драйвера из линукса, в линукс портируют сетевой стек из фряхи. Весело и задорно, а главное, что все при деле!
     
     
  • 2.33, Аноним1234 (?), 17:36, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    > в линукс портируют сетевой стек из фряхи.

    Его бы взяли из Линукса, но в тут он GPL-ный.

     

  • 1.30, Аноним (30), 17:08, 22/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    Уважаемые эксперты опеннета, объясните почему сетевой стэк в юзерспейсе должен работать быстрее чем в ядре? Обычно же догма что в ядре быстрее и за что обычно критикуют дизайн микроядерных ос.
     
     
  • 2.31, Ivan_83 (ok), 17:32, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Обычно ответ на такой вопрос: batching.
    Когда пакеты обрабатываются сразу пачками в рамках одного потока, без переключения контекста.
    Во фряхе тоже можно выставить net.isr.dispatch=direct и это будет близко по смыслу.
    Да и ядерные потоки более лёгкие чем юзерспейсные.

    Ещё в юзерспейсе доступны SIMD, но не уверен что для IPv4 это даёт какие то заметные улучшения.
    В общем для фаерволинга/роутинга мне трудно с ходу сказать о плюсах f-stack.

    Если смотреть на связку f-stack+nginx то здесь явно уйдут переключения контекста с ядерного на юзерспейсный и копирования из ядра в пространство процесса и обратно. (как минимум их можно исключить приложив усилия)

    Но лучше поискать работы тех кто делал или хотя бы на сайте фстака почитать.

     
  • 2.32, Аноним1234 (?), 17:35, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Из-за корутин прежде всего.
     
     
  • 3.34, Ivan_83 (ok), 17:38, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Покажите где вы в сабже увидели корутины?
     
     
  • 4.36, Аноним1234 (?), 18:07, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    > Покажите где вы в сабже увидели корутины?

    "Provides micro thread interface. Various applications with stateful applications can easily use F-Stack to get high performance without processing complex asynchronous logic."

     
     
  • 5.48, Ivan_83 (ok), 19:31, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    https://github.com/F-Stack/f-stack/blob/dev/adapter/micro_thread/micro_thread.
    Это больше похоже не на корутины а на замену ядерным потокам.
    (Middleware adapters: micro_thread + syscall (builds libff_syscall.so for LD_PRELOAD))

    Но формально можно и корутинами назвать, поскольку с точки зрения ОС это будет один поток, а внутри будут переключения.

     
  • 2.38, Аноним (37), 18:24, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/–
    > Обычно же догма что в ядре быстрее

    Нет, ядро не быстрее. С чего ему быть быстрее?

    > и за что обычно критикуют дизайн микроядерных ос.

    Время занимает копирование данных туда-сюда.

     
  • 2.42, Аноним (14), 18:50, 22/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Потому что из ядра в юзерспейс и обратно пакеты надо как-то копировать, и постоянно переключать контекст сохраняя регистры в память и потом их восстанавливать обратно. А в сабж сетевой стек напрямую читает данные из примаппленной через DMA памяти.
     

  • 1.44, Аноним (44), 18:58, 22/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    > в пользовательском пространстве и напрямую работающий с сетевым оборудованием

    Что-то тут не сходится...

     
  • 1.47, vitalif (ok), 19:21, 22/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    >Добавлена возможность изменения размера MTU (Maximum transmission unit)

    Джва (на самом деле 7) лет ждал

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    XSQUARE
    Inferno Solutions
    Hosting by Hoster.ru
    Хоcтинг: