Release des Benutzerraum-Netzwerkstacks F-Stack 1.13

Nach anderthalb Jahren Entwicklung hat stattgefunden Projektveröffentlichung F-Stack 1.13, der einen leistungsstarken Netzwerkstack im Benutzerraum entwickelt, der auf dem Framework basiert DPDK 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 Tencent, dem größten Telekommunikationsunternehmen in China. Der Code wird verbreitet 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. Es werden spezialisierte Editionen von Nginx und Redis bereitgestellt, die auf die Verwendung von F-Stack umgestellt wurden.

Für die Anwendungsentwicklung wird unterstützt 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 DPDK (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.

Release des Benutzerraum-Netzwerkstacks F-Stack 1.13

Release des Benutzerraum-Netzwerkstacks F-Stack 1.13

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 traffic 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 wird vermerkt Unterstützung für IPv6, Bereitstellung von APIs für Python, PHP und Go, Unterstützung des APIs von Cyptodev (Intel QAT), Verwendung von Zerocopy beim Versenden von Paketen, Unterstützung von SPDK und die Möglichkeit, als Hintergrundprozess zu laufen.

Quelle: opennet.ru

60GB SSD 8Gb DDR4