Prosjektet F-Stack 2.0 er lansert og utvikler en versjon av nettverksstakken FreeBSD, tilpasset for isolert drift i brukerens rom som et bibliotek. Prosjektet er skapt av Kinas største telekommunikasjonsfirma Tencent og brukes i deres produkter og tjenester. Koden er skrevet i C og distribueres under BSD-lisens. Det støtter drift på Linux og FreeBSD. Prosjektet støtter også overførte versjoner av Nginx 1.28 og databasesystemet Redis 6.2.6, som demonstrerer ytelse over vanlig distribusjoner som kjører på systemnettverksstakken.
F-Stack gjør det mulig å bruke sin egen lokale nettverksstakk i applikasjoner, uavhengig av nettverksstakken til operativsystemet, fungerer i brukerens rom og arbeider direkte med nettverksutstyret. F-Stack posisjonerer seg som en løsning for å øke ytelsen til nettverksforespørselshåndterere når den vanlige TCP/IP-stakken til Linux-kjernen blir en flaskehals og begrenser skalerbarheten. Teoretisk sett lar F-Stack deg nå den maksimale nettverksytelsen mulig for det brukte nettverkskortet, og i noen situasjoner gir det mulighet for å øke antall behandlede små nettverksforespørselene flere ganger.
Ytelsesforbedringen oppnås ved å utelukke operasjoner som kopiering av nettverkspakker, trådplanlegging, behandling av avbrudd og tilgang til systemanrop. For å samhandle med nettverkskortet, utenom grensesnittene til operativsystemkjernen, brukes rammeverket DPDK (Data Plane Development Kit), som utvikler et sett med biblioteker for lavnivå arbeid med nettverksadaptere. DPDK gjør det mulig å redusere overhead og holde seg innenfor et minimalt antall CPU-sykluser ved mottak eller sending av nettverkspakker.
Funksjonaliteten til TCP/IP-stakken samsvarer med nettverksstakken i FreeBSD 15 og er skilt ut fra dette operativsystemet i et uavhengig bibliotek. For utvikling av applikasjoner kan standard POSIX API (socket, epoll, kqueue) eller et eget programgrensesnitt basert på mikrottråder brukes, som forenkler opprettelsen av nettverksapplikasjoner og gjør det mulig å unngå komplisert logikk for asynkron behandling av forespørselene. Det er mulig å bruke det med uendret applikasjoner som lastes inn via LD_PRELOAD.
De mest merkbare endringene i den nye utgaven:
- Komponentene i nettverksstakken er oppdatert til FreeBSD 15 (tidligere ble FreeBSD 13 brukt).
- En trådmodus (thread_mode=1) er implementert i én prosess, som utfyller den tidligere tilgjengelige prosessmodus.
- Det er lagt til en lettvektsdriftsmodus (primary_slim), der hovedprosessen kun utfører grunnleggende oppgaver for initiering og koordinering av arbeid, mens mottak av pakker og behandling av inn-/utgående køer (rx/tx) bare utføres på siden av barneprosessene.
- Støtte for mekanismen for maskinvareakselerasjon er lagt til.
TSO (TCP Segmentation Offload) for å flytte sammenkoblingsoperasjoner av pakker til nettverkskortet, med mulighet for å gå tilbake til programvareimplementeringen. Støtten for TSO (TCP Segmentation Offload, flytting til nettverkskortet for behandling av pakets segmenter) for IPv6 er forbedret. - Muligheten for å endre størrelsen på MTU (Maximum transmission unit) er lagt til, og støtte for jumbo-rammer er implementert.
- Muligheten til å styre maskinvareakselerasjon for beregning av sjekksummer for sendte pakker er utvidet.
- Funksjonen ff_zc_recv() er lagt til for å motta data uten mellomlagring (zero-copy). Den tilsvarende funksjonen ff_zc_send() for sending er omarbeidet. Optimalisert og utvidet. støtte for IPv6 funksjonen ff_rss_check().
- Alternativet FF_KERNEL_COEXIST er lagt til for å arbeide sammen med nettverksstakken i kjernen.
- Muligheten for å lagre informasjon om trafikk i pcap-dumpar med nanosekunds presisjon er gitt.
- Det er lagt til nye parametere i config.ini: idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms og reload_udp_idle_ms.
- I en spesialisert nginx-pakke er det implementert støtte for å laste inn konfigurasjonen og oppdatere den binære filen uten å bryte forbindelsene (graceful_reload=1).
Kilde: opennet.ru
