Održano je izdanje projekta F-Stack 2.0, koji razvija verziju mrežnog steka FreeBSD, prilagođenu za rad u korisničkom prostoru kao biblioteka. Projekt je stvorila najveća telekomunikacijska kompanija u Kini, Tencent, i koristi se u njenim proizvodima i uslugama. Kod je napisan u programskom jeziku C i distribuira se pod BSD licencom. Podržava rad na Linuxu i FreeBSD-u. Projekt također podržava prilagođene verzije Nginx 1.28 i baze podataka Redis 6.2.6, koje pokazuju performanse iznad uobičajenih verzija koje rade s sistemskim mrežnim stekom.
F-Stack omogućuje aplikacijama da koriste vlastiti lokalni mrežni stek, neovisno o mrežnom steku operativnog sistema, koji funkcioniše u korisničkom prostoru i direktno komunicira s mrežnom opremom. F-Stack se pozicionira kao rješenje koje poboljšava performanse procesora mrežnih zahtjeva u uvjetima kada standardni TCP/IP stek jezgre Linux postane usko grlo i ograničava skalabilnost. Teoretski, F-Stack omogućava postizanje maksimalnih mrežnih performansi koje su moguće za korištenu mrežnu karticu, i u nekim situacijama omogućava višestruko povećanje broja obrađenih malih mrežnih zahtjeva.
Povećanje performansi postiže se isključivanjem operacija poput kopiranja mrežnih paketa, zakazivanja niti, obrade prekida i pozivanja sistemskih poziva. Za interakciju s mrežnom karticom, zaobilazeći sučelja jezgre operativnog sistema, koristi se DPDK okvir (Data Plane Development Kit), koji razvija skup biblioteka za niskonivo rad s mrežnim adapterima. DPDK omogućava smanjenje troškova i minimiziranje broja CPU ciklusa prilikom primanja ili slanja mrežnih paketa.
Funkcionalnost TCP/IP stoga odgovara mrežnom stogu FreeBSD 15 i izdvojena je iz ovog operativnog sistema u neovisnu biblioteku. Za razvoj aplikacija može se koristiti standardni POSIX API (socket, epoll, kqueue) ili vlastiti programski interfejs baziran na mikrotokovima, koji pojednostavljuje kreiranje mrežnih aplikacija i omogućava izbjegavanje složene logike asinkronog obrade upita. Moguće je korištenje s nemodificiranim aplikacijama uz učitavanje putem LD_PRELOAD.
Najznačajnije promjene u novom izdanju:
- Komponente mrežnog stoga ažurirane su na stanje FreeBSD 15 (ranije se koristio FreeBSD 13).
- Implementiran je režim višedretvenog rada (thread_mode=1) u jednom procesu, koji dopunjuje ranije dostupni višeposlovni režim.
- Dodana je lagana radna režim (primary_slim), pri kojem osnovni proces obavlja samo osnovne zadatke inicijalizacije i koordinacije rada, dok se prijem paketa i obrada redova prijema/transfera (rx/tx) odvijaju samo na strani podređenih procesa.
- Dodana je podrška za mehanizam hardverskog ubrzanja.
TSO (TCP Segmentation Offload) za premještanje operacija spajanja paketa na stranu mrežne kartice, s mogućnošću povratka na softversku implementaciju. Poboljšana je podrška za TSO (TCP Segmentation Offload, premještanje obrade segmenata paketa na mrežnu karticu) za IPv6. - Dodana je mogućnost promjene veličine MTU (Maximum transmission unit) i implementirana je podrška za jumbo-okvire.
- Proširene su mogućnosti upravljanja hardverskim ubrzanjem izračunavanja kontrolnih suma poslanih paketa.
- Dodana je funkcija ff_zc_recv() za primanje podataka bez međubufferiranja (zero-copy). Redizajnirana je slična funkcija ff_zc_send() za slanje. Optimizirana je i dopunjena. podrškom za IPv6 funkcija ff_rss_check().
- Dodana je opcija FF_KERNEL_COEXIST za rad zajedno s mrežnim stakom jezgra.
- Omogućeno je čuvanje informacija o prometu u pcap-dumpovima s nanosakundnom preciznošću.
- U config.ini dodani su novi parametri idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms i reload_udp_idle_ms.
- U specijalizovanoj verziji nginx implementirana je podrška za ponovno učitavanje konfiguracije i ažuriranje binarnog fajla bez prekida veza (graceful_reload=1).
Izvor: opennet.ru
