Nach anderthalb Jahren Entwicklung Projektveröffentlichung , der einen leistungsstarken Netzwerkstack im Benutzerraum entwickelt, der auf dem Framework basiert und dem TCP/IP-Stack von FreeBSD (F-Stack ist nicht an FreeBSD gebunden und betrachtet Linux als primĂ€re Plattform fĂŒr die Anwendung). Das Projekt wird in verschiedenen Produkten und Dienstleistungen eingesetzt , dem gröĂten Telekommunikationsunternehmen in China. Der Code unterliegt der BSD-Lizenz. Es wird die Verwendung unter Linux und FreeBSD unterstĂŒtzt.
F-Stack ermöglicht die Organisation der Netzwerkinteraktion in Anwendungen, indem statt des Netzwerkstacks des Betriebssystems ein eigener Netzwerkstack verwendet wird, der im Benutzerraum funktioniert und direkt mit der NetzwerkausrĂŒstung zusammenarbeitet. spezialisierte Editionen von Nginx und Redis bereitgestellt, die auf die Verwendung von F-Stack umgestellt wurden.
FĂŒr die Anwendungsentwicklung gibt es sowohl die native Posix-API (Socket, Epoll, Kqueue), die die Migration bestehender Anwendungen auf F-Stack erleichtert, als auch eine eigene Programmierschnittstelle auf Basis von Koroutinen (Mikro-Threads), die die Erstellung von Netzwerkapplikationen vereinfacht und auf komplexe Logik zur asynchronen Verarbeitung von Anfragen verzichtet. F-Stack bietet auch Werkzeuge zur Vereinfachung der Anwendung in Anwendungen mit multiprozessorarchitekturen.
FĂŒr die Interaktion mit der Netzwerkkarte, um die Schnittstellen des Betriebssystemkerns zu umgehen, wird das Framework (Data Plane Development Kit) verwendet, das eine Sammlung von Bibliotheken fĂŒr die niederlevelige Arbeit mit Netzwerkadaptern, die Interaktion in Mehrkernsystemen, die Nutzung von Ringpuffern und groĂen Seiten im Speicher ("huge page") bereitstellt. Der Einsatz von DPDK ermöglicht es, Netzwerkpakete mit minimalen CPU-Zyklen (etwa 80 Zyklen pro Paket) zu empfangen und zu senden und leistungsstarke Komponenten des Netzwerkstacks zu entwickeln. Die FunktionalitĂ€t des TCP/IP-Stacks stammt direkt aus FreeBSD 11.1 und wurde in eine betriebssystemunabhĂ€ngige Bibliothek ausgegliedert.
F-Stack wird als Lösung positioniert, die zur Steigerung der Leistung von Netzwerkanfragenverarbeitern eingesetzt werden kann, wenn der Standard-TCP/IP-Stack des Linux-Kernels zum Engpass wird und das Skalieren einschrĂ€nkt. Dabei bietet die Verwendung von F-Stack eine spĂŒrbare Optimierung und ermöglicht es in bestimmten Situationen, die Anzahl der bearbeiteten kleinen Anfragen erheblich zu erhöhen.
Die Leistungssteigerung wird durch den Ausschluss von Operationen wie dem Kopieren von Netzwerkpaketen, der Planung von Threads, der Interruptverarbeitung und dem Einsatz von Systemaufrufen erreicht. F-Stack ermöglicht es, die maximal verfĂŒgbare Netzwerkleistung der verwendeten Netzwerkkarte zu erreichen. Zum Beispiel haben Lösungen auf Basis von F-Stack die Möglichkeit demonstriert, 10 Millionen parallele Verbindungen, 5 Millionen Anfragen pro Sekunde und 1 Million Verbindungen pro Sekunde zu verarbeiten.
In der neuen Version:
- UnterstĂŒtzung fĂŒr VLAN hinzugefĂŒgt;
- Die Möglichkeit, in isolierten Containern basierend auf Docker zu arbeiten, wurde sichergestellt;
- Schnittstellen ff_dup, ff_dup2, ff_ioctl_freebsd, ff_getsockopt_freebsd und ff_setsockopt_freebsd implementiert;
- Der Parameter âidle_sleepâ wurde hinzugefĂŒgt, um die CPU-Belastung in Zeiten ohne eingehende Pakete zu verringern.
- UnterstĂŒtzung fĂŒr den ARM64-Architektur-Build hinzugefĂŒgt;
- In der auf F-Stack portierten Version von Nginx wurden die Handler getpeername, getsockname und shutdown ersetzt;
- Ein Upgrade auf die neue DPDK-Version 17.11.4 LTS wurde vollzogen;
- Das Tool wurde hinzugefĂŒgt, um den aktuellen Datenverkehr, der von Anwendungen auf Basis von F-Stack verarbeitet wird, anzuzeigen (Ă€hnlich wie trafshow).
ZukĂŒnftige PlĂ€ne UnterstĂŒtzung fĂŒr IPv6, Bereitstellung von APIs fĂŒr Python, PHP und Go, UnterstĂŒtzung des APIs von Cyptodev (), Verwendung von Zerocopy beim Versenden von Paketen, UnterstĂŒtzung von und die Möglichkeit, als Hintergrundprozess zu laufen.
Quelle: opennet.ru
