Veröffentlichung des Netzwerkstacks F-Stack 1.24, der im Benutzermodus ausgeführt wird

Das Netzwerk-Stack F-Stack 1.24 wurde veröffentlicht, eine Abwandlung des FreeBSD-Netzwerk-Stacks, die im Benutzermodus arbeitet und das DPDK-Framework verwendet, um maximale Leistung zu erzielen. Das Projekt wurde vom größten Telekommunikationsunternehmen in China, Tencent, ins Leben gerufen und wird in dessen Produkten und Dienstleistungen verwendet. Der Code ist in C geschrieben und wird unter der BSD-Lizenz verbreitet. Es wird Unterstützung für Linux und FreeBSD geboten.

F-Stack ermöglicht es, in Anwendungen einen eigenen lokalen Netzwerk-Stack zu verwenden, der unabhängig vom Netzwerk-Stack des Betriebssystems funktioniert, im Benutzermodus arbeitet und direkt mit der Netzwerktechnologie kommuniziert. F-Stack wird als Lösung positioniert, die die Leistung von Netzwerkrequest-Handlern steigert, wenn der Standard-TCP/IP-Stack des Linux-Kernels zum Engpass wird und die Skalierung einschränkt — in einigen Situationen ermöglicht das Projekt eine signifikante Steigerung der Anzahl der bearbeiteten kleinen Netzwerkrequests. Theoretisch ermöglicht F-Stack das Erreichen der maximalen Netzwerkleistung, die für die verwendete Netzwerkkarte möglich ist.

Die Leistungssteigerung wird durch den Ausschluss von Operationen wie das Kopieren von Netzwerkpaketen, die Thread-Planung, die Interrupt-Verarbeitung und die Verwendung von Systemaufrufen erreicht. Zur Interaktion mit der Netzwerkkarte, ohne die Schnittstellen des Betriebssystemkerns zu nutzen, wird das DPDK (Data Plane Development Kit) verwendet, das eine Sammlung von Bibliotheken für die low-level Interaktion mit Netzwerkadaptern entwickelt. DPDK ermöglicht es, die Overhead-Kosten zu senken und die minimalen CPU-Zyklen beim Empfangen oder Senden von Netzwerkpaketen zu optimieren.

Die Funktionalität des TCP/IP-Stacks entspricht dem Netzwerk-Stack von FreeBSD 13 und wurde aus diesem Betriebssystem in eine unabhängige Bibliothek ausgegliedert. Für die Entwicklung von Anwendungen kann die Standard-API POSIX (socket, epoll, kqueue) oder die eigene Programmier-Schnittstelle auf Basis von Mikrotasks verwendet werden, die die Erstellung von Netzwerkapplikationen vereinfacht und es ermöglicht, auf komplexe Logik zur asynchronen Verarbeitung von Requests zu verzichten.

Das Projekt unterstützt übertragene Versionen der Nutzung von F-Stack für multimodale Server Nginx 1.25.2 und die Datenbank Redis 6.2.6 zeigen eine Leistung, die über der gewöhnlicher Builds liegt, die über den systemeigenen Netzwerkstack arbeiten.

Die auffälligsten Änderungen in der neuen Version:

  • In der Konfigurationsdatei config.ini wurde die Möglichkeit hinzugefügt, zwischen der Verwendung von KNI (Kernel NIC Interface) und virtio_user als Transport für die Paketübertragung zwischen dem Kernel und der Paketverarbeitungsanwendung auf Basis von DPDK zu wählen. Die Nutzung von ratelimit für KNI wurde hinzugefügt.
  • Unterstützung für die Aktivierung der Netzwerksstack-Einstellung „net.add_addr_allfibs=1“ zur Hinzufügung von Adressen in alle Routing-Tabellen wurde hinzugefügt.
  • Die API ff_get_traffic wurde hinzugefügt, um den Verkehr zu erfassen, beispielsweise zur Implementierung von QoS (Quality of Service).
  • Die Funktionen pthread_create und pthread_join wurden eingeführt, die den ähnlichen Funktionen aus POSIX ähneln.
  • Die API ff_dpdk_raw_packet_send wurde hinzugefügt, um raw-Pakete direkt über DPDK vom Programm aus zu senden, anstatt über einen Socket.
  • Unterstützung für die automatische Konfiguration von VLAN, Routing und Policy-Routing wurde implementiert.
  • Die Umstellung auf die DPDK-Version 22.11.6 LTS wurde vollzogen.
  • In der Implementierung von Nginx über F-Stack wurde die Unterstützung des Stream-Moduls hinzugefügt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4