U lançua projekti F-Stack 2.0, që zhvillon një redaktim të stack-ut rrjetit FreeBSD, të adaptuar për punim të veçuar në hapësirën e përdoruesit në formë biblioteke. Projekti është krijuar nga kompania më e madhe të telekomunikacionit në Kinë, Tencent, dhe përdoret në produktet dhe shërbimet e saj. Kodi është shkruar në gjuhën C dhe shpërndahet nën licencën BSD. Përdoret njëkohësisht me Linux dhe FreeBSD. Projekti gjithashtu mbështet redakimet e Nginx 1.28 dhe sistemit të menaxhimit të bazave të të dhënave Redis 6.2.6, të përkthyer për përdorim me F-Stack, duke treguar performancë më të lartë se ndarjet standarde që përdorin stack-un rrjetor të sistemit.
F-Stack lejon aplikacioneve të përdorin stack-un e tyre lokal rrjetësor, që nuk varet nga stack-u rrjetor i sistemit operativ, duke funksionuar në hapësirën e përdoruesit dhe duke punuar drejtpërdrejt me pajisjet rrjetësore. F-Stack pozicionohet si një zgjidhje të cilat rrit performancën e trajtuesve të kërkesave rrjetësore në kushte kur TCP/IP i sistemit Linux bëhet një pikë e ngushtë dhe kufizon shkallëzimin. Teorikisht, F-Stack mund të arrijë tavanin e performancës rrjetësore të mundshme për kartën rrjetësore që përdoret dhe në disa raste ofron mundësinë për të rritur ndjeshëm numrin e kërkesave të vogla rrjetësore që trajtohen.
Rritja e performancës arrihet përmes përjashtimit të operacioneve të tilla si kopjimi i paketimeve rrjetësore, planifikimi i rrjedhave, përpunimi i ndërprerjeve dhe thirrja e thirrjeve sistemore. Për të bashkëvepruar me kartën rrjetësore, duke anashkaluar ndërfaqet e bërthamës së sistemit operativ, përdoret korniza DPDK (Data Plane Development Kit), e cila zhvillon një grup bibliotekash për punë të ulët me adapterat rrjetësorë. DPDK ofron mundësinë për të reduktuar shpenzimet dhe për të përmbushur numrin minimal të cikleve CPU gjatë pranimit ose dërgimit të paketimeve rrjetësore.
Funksionaliteti i stack-ut TCP/IP pĂ«rputhet me stack-un rrjetor FreeBSD 15 dhe Ă«shtĂ« ndarĂ« nga ky sistem operativ nĂ« njĂ« bibliotekĂ« tĂ« pavarur. PĂ«r zhvillimin e aplikacioneve, mund tĂ« pĂ«rdoret API standard POSIX (socket, epoll, kqueue) ose njĂ« ndĂ«rfaqe programimi e vetme mbi mikropjesĂ«, qĂ« thjeshton krijimin e aplikacioneve rrjet dhe lejon shmangien e logjikĂ«s sĂ« ndĂ«rlikuar pĂ«r pĂ«rpunimin asinkron tĂ« kĂ«rkesave. ĂshtĂ« e mundur pĂ«rdorimi me aplikacione tĂ« pa modifikuara duke ngarkuar pĂ«rmes LD_PRELOAD.
Ndryshimet më të dukshme në versionin e ri:
- Komponentët e stack-ut rrjetor janë azhuruar në gjendjen FreeBSD 15 (më parë ishte përdorur FreeBSD 13).
- ĂshtĂ« realizuar njĂ« funksionim me shumĂ« thread-e (thread_mode=1) brenda njĂ« procesi, duke plotĂ«suar llojin e mĂ«parshĂ«m me shumĂ« procese.
- ĂshtĂ« shtuar njĂ« mod i lehtĂ« funksionimi (primary_slim), ku procesi kryesor kryen vetĂ«m detyrat bazike tĂ« inicializimit dhe koordinimit tĂ« punĂ«s, ndĂ«rsa marrja e paketave dhe pĂ«rpunimi i radhĂ«ve tĂ« marrjes/dhĂ«nies (rx/tx) bĂ«het vetĂ«m nĂ« anĂ«n e proceseve tĂ« bij.
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r mekanizmin e pĂ«rshpejtimit harduerik.
TSO (TCP Segmentation Offload) pĂ«r tĂ« anashkaluar operacionet e bashkimit tĂ« pakove nĂ« kartĂ«n rrjet, duke e lejuar rikthimin nĂ« zbatimin programor. ĂshtĂ« pĂ«rmirĂ«suar mbĂ«shtetja pĂ«r TSO (TCP Segmentation Offload, anashkalimi i pĂ«rpunimit tĂ« segmenteve tĂ« paketave nĂ« kartĂ«n rrjet) pĂ«r IPv6. - ĂshtĂ« shtuar mundĂ«sia pĂ«r tĂ« ndryshuar madhĂ«sinĂ« e MTU (NjĂ«sia maksimale e transmetimit) dhe Ă«shtĂ« realizuar mbĂ«shtetje pĂ«r jumbo-frames.
- Janë zgjeruar mundësitë për menaxhimin e përshpejtimit harduerik të llogaritjeve të checksum-eve të paketave të dërguara.
- ĂshtĂ« shtuar funksioni ff_zc_recv() pĂ«r marrjen e tĂ« dhĂ«nave pa buferim tĂ« ndĂ«rmjetshĂ«m (zero-copy). ĂshtĂ« riparuar funksioni e ngjashĂ«m ff_zc_send() pĂ«r dĂ«rgimin. ĂshtĂ« optimizuar dhe kompletuar mbĂ«shtetje pĂ«r IPv6 funksioni ff_rss_check().
- ĂshtĂ« shtuar opsioni FF_KERNEL_COEXIST pĂ«r tĂ« punuar sĂ« bashku me stack-un rrjetor tĂ« kernel-it.
- ĂshtĂ« ofruar mundĂ«sia pĂ«r ruajtjen e informacionit mbi trafikun nĂ« pcap-dumps me saktĂ«si nanosekondĂ«she.
- Në config.ini janë shtuar parametrat e rinj idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms dhe reload_udp_idle_ms.
- Në ndërtimin e specializuar të nginx, është realizuar mbështetje për ri-ngarkimin e konfiguracionit dhe përditësimin e skedarit binar pa ndërprerje të lidhjeve (graceful_reload=1).
Burimi: opennet.ru
