Die Veröffentlichung des Projekts F-Stack 2.0, das die FreeBSD-Netzwerkstapel-Edition weiterentwickelt, die fĂŒr den isolierten Betrieb im Benutzerspeicher in Form einer Bibliothek angepasst wurde. Das Projekt wurde von dem gröĂten Telekommunikationsunternehmen Chinas, Tencent, ins Leben gerufen und wird in seinen Produkten und Dienstleistungen eingesetzt. Der Code ist in C geschrieben und wird unter der BSD-Lizenz veröffentlicht. Die Nutzung in Linux und FreeBSD wird unterstĂŒtzt. Auch die in F-Stack integrierte Version von Nginx 1.28 und der Datenbank Redis 6.2.6 wurden angepasst, welche eine höhere Leistung als gewöhnliche Builds aufweisen, die ĂŒber den systemeigenen Netzwerkstapel arbeiten.
F-Stack ermöglicht es, in Anwendungen einen eigenen lokalen Netzwerkstapel zu verwenden, der unabhĂ€ngig vom Netzwerkstapel des Betriebssystems funktioniert, im Benutzerspeicher arbeitet und direkt mit der Netzwerktechnologie kommuniziert. F-Stack wird als Lösung positioniert, die die Leistung der Netzwerk-Request-Handler steigern kann, wenn der standardmĂ€Ăige TCP/IP-Stapel des Linux-Kernels zu einem Engpass wird und das Scaling einschrĂ€nkt. Theoretisch ermöglicht es F-Stack, die Netzwerkleistung zu erreichen, die fĂŒr die verwendete Netzwerkkarte möglich ist, und in bestimmten Situationen die Anzahl der verarbeiteten kleinen Netzwerkrequests erheblich zu steigern.
Die Leistungssteigerung wird erreicht, indem Operationen wie das Kopieren von Netzwerkpaketen, die Planung von Threads, die Behandlung von Interrupts und der Zugriff auf Systemaufrufe ausgeschlossen werden. Um mit der Netzwerkkarte zu interagieren, ohne ĂŒber die Schnittstellen des Betriebssystemkerns zu gehen, wird das DPDK-Framework (Data Plane Development Kit) verwendet, das eine Sammlung von Bibliotheken fĂŒr die nieder(Niedrig)-level-Arbeit mit Netzwerkadaptern bereitstellt. DPDK ermöglicht es, die Overhead-Kosten zu senken und die Anzahl der CPU-Zyklen beim Empfangen oder Senden von Netzwerkpaketen auf ein Minimum zu reduzieren.
Die FunktionalitĂ€t des TCP/IP-Stacks entspricht dem Netzwerk-Stack von FreeBSD 15 und wurde aus diesem Betriebssystem in eine unabhĂ€ngige Bibliothek ausgelagert. Zur Entwicklung von Anwendungen kann die Standard-API POSIX (socket, epoll, kqueue) oder eine eigene Schnittstelle basierend auf Mikrosystemen verwendet werden, die die Erstellung von Netzwerk-Anwendungen vereinfacht und es ermöglicht, ohne komplexe Logik der asynchronen Anfragenverarbeitung auszukommen. Eine Verwendung mit unverĂ€nderten Anwendungen ĂŒber LD_PRELOAD ist möglich.
Die auffĂ€lligsten Ănderungen in der neuen Version:
- Die Komponenten des Netzwerk-Stacks wurden auf den Stand FreeBSD 15 aktualisiert (zuvor kam FreeBSD 13 zum Einsatz).
- Ein Thread-Modus (thread_mode=1) wurde in einem Prozess implementiert, der den zuvor verfĂŒgbaren Multiprozessmodus ergĂ€nzt.
- Ein leichter Betriebsmodus (primary_slim) wurde hinzugefĂŒgt, bei dem der Hauptprozess nur die grundlegenden Initialisierungs- und Koordinationsaufgaben ĂŒbernimmt, wĂ€hrend das Empfangen von Paketen und die Verarbeitung von Rx/Tx-Warteschlangen nur von den Kindprozessen durchgefĂŒhrt wird.
- UnterstĂŒtzung fĂŒr Hardwarebeschleunigungsmechanismen wurde hinzugefĂŒgt.
TSO (TCP Segmentation Offload) zur Auslagerung der Paket-Kombinationsoperationen auf die Netzwerkkarte, mit der Möglichkeit, auf eine Software-Implementierung zurĂŒckzugreifen. Die UnterstĂŒtzung fĂŒr TSO (TCP Segmentation Offload, Auslagerung der Segmentierung von Paketen auf die Netzwerkkarte) fĂŒr IPv6 wurde verbessert. - Die Möglichkeit zur Anpassung der MTU (Maximum Transmission Unit) wurde hinzugefĂŒgt, und es wurde UnterstĂŒtzung fĂŒr Jumbo-Frames implementiert.
- Die Möglichkeiten zur Verwaltung des Hardwarebeschleunigung zur Berechnung der PrĂŒfziffern gesendeter Pakete wurden erweitert.
- Die Funktion ff_zc_recv() wurde hinzugefĂŒgt, um Daten ohne Zwischenpufferung (zero-copy) zu empfangen. Die Ă€hnliche Funktion ff_zc_send() zum Senden wurde umgestaltet und optimiert. IPv6-UnterstĂŒtzung Die Funktion ff_rss_check() wurde optimiert.
- Die Option FF_KERNEL_COEXIST wurde hinzugefĂŒgt, um zusammen mit dem Netzwerk-Stack des Kernels zu arbeiten.
- Die Möglichkeit wurde bereitgestellt, Informationen ĂŒber den Datenverkehr mit Nanosekunden-Genauigkeit in pcap-Dump-Dateien zu speichern.
- Neue Parameter idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms und reload_udp_idle_ms wurden in config.ini hinzugefĂŒgt.
- In der spezialisierten Nginx-Build-Version wurde die UnterstĂŒtzung fĂŒr die Nachladung der Konfiguration und die Aktualisierung der BinĂ€rdatei ohne Unterbrechung der Verbindungen (graceful_reload=1) implementiert.
Quelle: opennet.ru
