Release af projektet F-Stack 2.0, som udvikler en udgave af det netværksstak FreeBSD, tilpasset til at arbejde isoleret i brugerens rum i form af et bibliotek. Projektet er skabt af den største telekommunikationsvirksomhed i Kina, Tencent, og anvendes i dens produkter og tjenester. Koden er skrevet i C og distribueres under BSD-licensen. Der er støtte til at arbejde i Linux og FreeBSD. Projektet understøtter også oversatte versioner af Nginx 1.28 og databasehåndteringssystemet Redis 6.2.6, som demonstrerer ydeevne over det normale niveau for samlinger, der kører oven på systemets netværksstak.
F-Stack gør det muligt at udnytte en lokal netværksstak i applikationer, der ikke er afhængige af operativsystemets netværksstak, fungerer i brugerens rum og arbejder direkte med netværksudstyret. F-Stack positioneres som en løsning, der kan øge ydeevnen af netværksanmodningsbehandlere i situationer, hvor Linux' indbyggede TCP/IP-stak bliver en flaskehals og begrænser skaleringen. Teoretisk set muliggør F-Stack at nå det maksimale netværksydelsesloft, som er muligt for det anvendte netværkskort, og i nogle tilfælde giver det mulighed for at øge antallet af håndterede små netværksanmodninger mange gange.
Ydeevnen øges ved at undgå operationer som kopiering af netværkspakker, planlægning af tråde, behandling af afbrydelser og opkald af systemopkald. For at interagere med netværkskortet og omgå operativsystemets kerneinterfacer anvendes DPDK (Data Plane Development Kit) rammeværket, der udvikler et sæt biblioteker til lavniveauarbejde med netværksadaptere. DPDK giver mulighed for at reducere overhead og minimere antallet af CPU-cyklusser ved modtagelse eller afsendelse af netværkspakker.
Funktionaliteten af TCP/IP-stakken svarer til netværksstakken i FreeBSD 15 og er adskilt fra dette operativsystem i et uafhængigt bibliotek. Til udvikling af applikationer kan man bruge standard POSIX API (socket, epoll, kqueue) eller et eget API baseret på mikrosæt, der forenkler oprettelsen af netværksapplikationer og muliggør at undgå kompliceret logik til asynkron behandlingen af forespørgsler. Mulighed for brug med umodificerede applikationer ved indlæsning via LD_PRELOAD.
De mest mærkbare ændringer i den nye udgave:
- Komponenterne i netværksstakken er opdateret til tilstand FreeBSD 15 (tidligere blev FreeBSD 13 brugt).
- Der er implementeret en tilstand for multitrådede operationer (thread_mode=1) i en enkelt proces, der supplerer den tidligere tilgængelige multiprocessormode.
- Der er tilføjet en letvægtig driftsmode (primary_slim), hvor hovedprocessen kun udfører grundlæggende opgaver for initialisering og koordinering af arbejdet, mens modtagelse af pakker og behandling af modtagelses-/overførselskøer (rx/tx) kun udføres af underprocesserne.
- Der er tilføjet støtte til mekanismen for hardwareacceleration.
TSO (TCP Segmentation Offload) til at outsource operationer med pakke-samling til netværkskortet, med mulighed for at falde tilbage til softwareimplementering. Støtten til TSO (TCP Segmentation Offload, outsourcing af behandling af segmenterede pakker til netværkskortet) for IPv6 er forbedret. - Der er tilføjet mulighed for at ændre MTU (Maximum Transmission Unit) størrelsen og implementeret støtte til jumbo-rammer.
- Mulighederne for styring af hardwareacceleration af beregning af kontrolsummer for sendte pakker er blevet udvidet.
- Funktionen ff_zc_recv() er tilføjet for at modtage data uden mellembuffering (zero-copy). Den tilsvarende funktion ff_zc_send() er blevet redesignet til afsendelse. Den er optimeret og udvidet. støtte til IPv6 funktionen ff_rss_check().
- Muligheden FF_KERNEL_COEXIST er tilføjet for at arbejde sammen med kernelens netværksstak.
- Muligheden for at gemme trafikoplysninger i pcap-dumps med nanosekunders nøjagtighed er blevet givet.
- Der er tilføjet nye parametre i config.ini såsom idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms og reload_udp_idle_ms.
- I den specialiserede samling af nginx er understøttelsen af genindlæsning af konfigurationen og opdatering af den binære fil uden at bryde forbindelserne (graceful_reload=1) implementeret.
Kilde: opennet.ru
