De release van het F-Stack 2.0-project heeft plaatsgevonden, dat de netwerkstack van FreeBSD ontwikkelt, aangepast voor geïsoleerd werken in de gebruikersruimte in de vorm van een bibliotheek. Het project is opgericht door het grootste telecommunicatiebedrijf in China, Tencent, en wordt gebruikt in zijn producten en diensten. De code is geschreven in de programmeertaal C en wordt verspreid onder de BSD-licentie. Er wordt ondersteuning geboden voor zowel Linux als FreeBSD. Het project ondersteunt ook bewerkingen van Nginx 1.28 en de database Redis 6.2.6, die zijn aangepast voor het gebruik van F-Stack en die een hogere prestatie tonen dan reguliere builds die gebruikmaken van de systeem netwerktechnologie.
F-Stack stelt applicaties in staat om hun eigen lokale netwerkstack te gebruiken, die onafhankelijk is van de netwerktechnologie van het besturingssysteem, functionerend in de gebruikersruimte en direct samenwerkend met netwerkhardware. F-Stack wordt gepositioneerd als een oplossing die de prestaties van netwerkverzoekverwerkers verbetert in situaties waarin de standaard TCP/IP-stack van de Linux-kernel een knelpunt wordt en schaalbaarheid beperkt. Theoretisch stelt F-Stack in staat om de plafondcapaciteit van netwerkprestaties te bereiken die mogelijk is voor de gebruikte netwerkkaart en in sommige situaties het aantal verwerkte kleine netwerkverzoeken aanzienlijk te verhogen.
De prestatieverbetering wordt bereikt door het uitsluiten van operaties zoals het kopiëren van netwerkpakketten, het plannen van threads, het afhandelen van onderbrekingen en het aanroepen van systeembewerkingen. Voor interactie met de netwerkkaart, waarbij de interfaces van het besturingssysteem worden omzeild, wordt het DPDK (Data Plane Development Kit) framework gebruikt, dat een set bibliotheken voor laag-niveau interactie met netwerkadapters ontwikkelt. DPDK vermindert de overhead en verbetert de efficiëntie door het aantal CPU-cycli te minimaliseren bij het ontvangen of verzenden van netwerkpakketten.
De functionaliteit van de TCP/IP-stack komt overeen met de netwerkstack van FreeBSD 15 en is uit dit besturingssysteem gehaald in een onafhankelijke bibliotheek. Voor de ontwikkeling van applicaties kan de standaard POSIX API (socket, epoll, kqueue) of een eigen programmeerinterface gebaseerd op micro-threads worden gebruikt, wat het creëren van netwerktoplossingen vereenvoudigt en het mogelijk maakt om zonder complexe logica voor asynchrone verwerking van aanvragen te werken. Het is mogelijk om met niet-gewijzigde applicaties te werken via LD_PRELOAD.
De meest opvallende wijzigingen in de nieuwe release:
- De componenten van de netwerkstack zijn bijgewerkt naar de staat van FreeBSD 15 (voorheen werd FreeBSD 13 gebruikt).
- Er is een modus voor multithreading (thread_mode=1) geïmplementeerd in één proces, die de eerder beschikbare multiprocessingmodus aanvult.
- Een lichtgewicht werkmodus (primary_slim) is toegevoegd, waarbij het hoofdproces alleen de basisinitialisatie- en coördinatietaken uitvoert, terwijl het ontvangen van pakketten en het verwerken van ontvangst-/verzendqueues (rx/tx) uitsluitend aan de zijden van de kindprocessen worden uitgevoerd.
- Ondersteuning voor hardwareversnelling is toegevoegd.
TSO (TCP Segmentation Offload) voor het verplaatsen van pakketbundelingsoperaties naar de netwerkkaart, met de mogelijkheid om terug te vallen op een software-implementatie. De ondersteuning voor TSO (TCP Segmentation Offload, verplaatsing naar de netwerkkaart voor segmentverwerking van pakketten) voor IPv6 is verbeterd. - De mogelijkheid om de MTU (Maximum Transmission Unit) te wijzigen is toegevoegd en ondersteuning voor jumbo-frames is geïmplementeerd.
- De mogelijkheden voor het beheer van hardwareversnelling voor het berekenen van controle-informatie van verzonden pakketten zijn uitgebreid.
- De functie ff_zc_recv() voor het ontvangen van gegevens zonder tussentijdse buffering (zero-copy) is toegevoegd. De corresponderende functie ff_zc_send() voor verzending is herzien. Geoptimaliseerd en aangevuld. ondersteuning voor IPv6 de functie ff_rss_check().
- De optie FF_KERNEL_COEXIST is toegevoegd voor samenwerking met de netwerkstack van de kernel.
- Er is een mogelijkheid geboden om informatie over verkeer op te slaan in pcap-dumps met nanosecondnauwkeurigheid.
- Nieuwe parameters idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms en reload_udp_idle_ms zijn toegevoegd in config.ini.
- In de gespecialiseerde versie van nginx is ondersteuning voor het herladen van de configuratie en het bijwerken van het binaire bestand zonder het verbreken van verbindingen (graceful_reload=1) geïmplementeerd.
Bron: opennet.ru
