Na anderhalf jaar ontwikkeling de release van het project , die een hoge prestaties netwerkstack ontwikkelt die in de gebruikersruimte werkt, gebaseerd op het framework en de TCP/IP-stack van FreeBSD (F-Stack is niet gebonden aan FreeBSD en beschouwt Linux als de primaire toepassing). Het project wordt gebruikt in verschillende producten en diensten , de grootste telecommunicatiebedrijf in China. De code is onder de BSD-licentie. De werking in Linux en FreeBSD wordt ondersteund.
F-Stack maakt het mogelijk om netwerkcommunicatie in applicaties te organiseren door in plaats van de netwerkstack van het besturingssysteem een eigen netwerkstack te gebruiken, die in de gebruikersruimte functioneert en direct samenwerkt met netwerkhardware. gespecialiseerde versies van Nginx en Redis aangeboden, aangepast voor gebruik met F-Stack.
Voor de ontwikkeling van applicaties is er zowel de standaard Posix API (Socket, Epoll, Kqueue), die de overgang naar F-Stack voor bestaande applicaties vergemakkelijkt, als een eigen programmeerinterface op basis van coroutines (micro-threads), die het eenvoudiger maakt om netwerken applicaties te maken en ingewikkelde logica voor asynchrone verzoekverwerking overbodig maakt. F-Stack biedt ook middelen om de toepassing in applicaties met een multi-processarchitectuur te vergemakkelijken.
Voor interactie met de netwerkkaart, terwijl de interfaces van de kernel van het besturingssysteem worden overgeslagen, wordt het framework (Data Plane Development Kit) gebruikt, dat een verzameling bibliotheken biedt voor lage-niveau interactie met netwerkadapters, samenwerking in multi-core systemen, het gebruik van ringbuffers en grote pagina's geheugen (āhuge pageā). Het gebruik van DPDK maakt het mogelijk om netwerkpakketten te ontvangen en te verzenden met het uitvoeren van een minimaal aantal CPU-cycli (ongeveer 80 cycli per pakket) en om hoge prestaties netwerkstackcomponenten te ontwikkelen. De functionaliteit van de TCP/IP-stack is rechtstreeks overgenomen uit FreeBSD 11.1 en in een besturingssysteem-onafhankelijke bibliotheek geplaatst.
F-Stack positioneert zich als een oplossing die kan worden toegepast om de prestaties van netwerkverzoekverwerkers te verbeteren in situaties waarin de standaard TCP/IP-stack van de Linux-kernel een bottleneck vormt en de schaalbaarheid beperkt. Het gebruik van F-Stack biedt aanzienlijke optimalisatie en maakt het in sommige gevallen mogelijk om het aantal verwerkte kleine verzoeken aanzienlijk te verhogen.
De prestatieverbetering wordt bereikt door het uitsluiten van operaties zoals het kopiƫren van netwerkpakketten, threadplanning, interruptverwerking en systeemaanroepen. F-Stack maakt het mogelijk om de netwerkkapaciteit te bereiken die beschikbaar is voor de gebruikte netwerkkaart. Zo hebben oplossingen op basis van F-Stack aangetoond in staat te zijn om 10 miljoen gelijktijdige verbindingen, 5 miljoen verzoeken per seconde en 1 miljoen verbindingen per seconde te verwerken.
In de nieuwe release:
- Ondersteuning voor VLAN is toegevoegd;
- Er is ondersteuning voor isolatie van containers op basis van Docker;
- Interfaces ff_dup, ff_dup2, ff_ioctl_freebsd, ff_getsockopt_freebsd en ff_setsockopt_freebsd zijn geĆÆmplementeerd;
- De parameter 'idle_sleep' is toegevoegd om de CPU-belasting te verminderen wanneer er geen binnenkomende pakketten zijn.
- Ondersteuning voor het bouwen voor de ARM64-architectuur is toegevoegd;
- In de naar F-Stack vertaalde versie van Nginx zijn de handlers getpeername, getsockname en shutdown vervangen;
- Een overstap naar de nieuwe versie DPDK 17.11.4 LTS is gemaakt;
- Er is een nieuwe tool toegevoegd, om het huidige verkeer te tonen dat door applicaties op basis van F-Stack wordt verwerkt (vergelijkbaar met trafshow).
Toekomstige plannen omvatten ondersteuning voor IPv6, het bieden van API's voor de programmeertalen Python, PHP en Go, ondersteuning voor de API Cyptodev (), gebruik van zerocopy bij het verzenden van pakketten, ondersteuning voor en de mogelijkheid om als achtergrondproces uit te voeren.
Bron: opennet.ru
