Zpráva o vývoji projektu FreeBSD od dubna do června 2019. Mezi změnami lze vyzdvihnout:
- Obecné a systémové otázky
- Jádro týmu se rozhodlo ustanovit pracovní skupinu na studium možnosti převodu zdrojových textů z centralizovaného systému správy zdrojových kódů Subversion do decentralizovaného systému Git.
- Bylo provedeno fuzzingové testování jádra FreeBSD pomocí systému a byla opravena řada zjištěných chyb. Přidána vrstva pro fuzzingové testování knihoven pro kompatibilitu s 32bitovým prostředím na systémech s 64bitovým jádrem. Byla implementována možnost spuštění syzkalleru ve virtuálních strojích založených na bhyve. V následující fázi se plánuje rozšířit pokrytí testováním systémových volání, využít LLVM sanitizer pro kontrolu jádra, použít netdump pro uchovávání dumpů jádra během selhání při fuzzingovém testování atd.
- Začala práce na aktualizaci implementace zlib na úrovni jádra. Pro přístup jádra kódu zlib byl adresář contrib/zlib přejmenován na sys/contrib/zlib, také byl přejmenován hlavičkový soubor crc.h, aby se předešlo konfliktu s zlib/crc.h. Bylo provedeno čištění zastaralého kódu, který byl závislý na zlib a inflate. Dále se plánuje zajistit možnost sestavení jádra současně se starou a novou verzí zlib pro postupný přechod na novou verzi funkcí využívajících kompresi;
- Byla aktualizována infrastruktura emulace prostředí Linux (Linuxulator). Byla rozšířena podpora ladicích nástrojů Linux, jako je utilita strace. Do portů byl přidán balíček linux-c7-strace, který může být použit pro trasování spustitelných souborů Linux místo standardních utilit truss a ktrace, které dosud nemohou dekódovat některé specifické pro Linux přepínače a struktury. Kromě toho byl přidán balíček linux-ltp s spustitelnými soubory Linux Test Project a byly vyřešeny problémy s kompatibilitou se spustitelnými soubory, které byly zkompilovány s novými verzemi glibc;
- Implementace operací odloženého zneplatnění vazeb na fyzické stránky paměti (delayed invalidation) v mechanismu pmap byla převedena na použití algoritmu pro zpracování fronty, který pracuje bez zámků, což umožnilo vyřešit problémy se škálovatelností při provádění velkého počtu paralelních operací unmap;
- Byl změněn mechanismus blokování vnode během vykonávání systémových volání ze skupiny execve(), což umožnilo zvýšit efektivitu práce při současném vykonávání execve() pro stejný soubor (například při provádění operací sestavení s paralelním spuštěním překladače);
- Bezpečnost
- V hypervizoru bhyve pokračovalo vylepšení podpory Live migrace hostitelských prostředí z jednoho hostitele na druhý a funkčnosti Save/Restore, která umožňuje zmrazit hostitelský systém se zachováním stavu do souboru a poté obnovit jeho vykonávání.
- Pomocí knihovny libvdsk byla do bhyve přidána podpora diskových obrazů ve formátu QCOW2. Pro práci je nutné nainstalovat
verzi bhyve, která byla převedena na používání obsluhovačů souborových operací na bázi libvdsk. V reportovaném období byla v libvdsk také provedena práce na zjednodušení integrace podpory nových formátů, zlepšena výkonnost čtení a zápisu, přidána podpora Copy-On-Write. Z zbývajících úkolů je třeba zmínit integraci libvdsk do hlavního jádra bhyve; - Do portů byla přidána systém sběru informací o provozu
, který umožňuje vytvářet pasti pro škodlivé síťové požadavky (ověřují se IP a domény ze černých seznamů) a posílat informace o zjištěné aktivitě na centralizovaný server pro následnou blokaci nebo analýzu pokusů o útok; - Do portů byla přidána platforma pro odhalování útoků, analýzu logů a sledování integrity souborů ([fork Ossec s podporou integrace s );
- Síťová subsystém
- Byl aktualizován ovladač ena s podporou druhé generace síťových adaptéru ENAv2 (Elastic Network Adapter), používaných v infrastruktuře Elastic Compute Cloud (EC2) pro organizaci spojení mezi uzly EC2 při rychlostech až 25 Gb/s. Do ovladače ena byla přidána podpora NETMAP.
- Do FreeBSD HEAD byl přijat nový MMC/SD stack, založený na frameworku CAM, který umožňuje připojovat zařízení s rozhraním SDIO (Secure Digital I/O). Například, SDIO se používá v WiFi a Bluetooth modulech pro mnoho desek, jako je Raspberry Pi 3. Nový stack také umožňuje použít rozhraní CAM pro odesílání SD příkazů z aplikací v uživatelském prostoru, což otevírá možnost vytváření ovladačů zařízení běžících na úrovni uživatele. Práce na vytváření ovladačů pro bezdrátové čipy Broadcom, běžící v režimu FullMAC (na straně čipu vykonává svou operaci podobnou systémovému softwaru s realizací vlastního bezdrátového stacku 802.11), byla zahájena.
- Probíhá práce na implementaci NFSv4.2 (RFC-7862) pro FreeBSD. V nové verzi NFS byla přidána podpora funkcí posix_fadvise, posix_fallocate, režimů SEEKHOLE/SEEKDATA v lseek a operace místního kopírování částí souboru na serveru (bez předávání klientovi).
V současnosti byla pro FreeBSD již implementována základní podpora operací LayoutError, IOAdvise, Allocate a Copy. Zůstává implementovat operaci Seek, která je nezbytná pro používání lseek(SEEKHOLE/SEEKDATA) s NFS. Podpora NFSv4.2 má být zahrnuta do FreeBSD 13.
- Systémy ukládání a souborové systémy
- Projekt na přepracování ovladače subsystému FUSE (File system in USErspace) se blíží k závěru, což umožňuje vytvářet implementace souborových systémů v uživatelském prostoru. Původně dodávaný ovladač byl zastaralý a obsahoval mnoho chyb. V rámci projektu modernizace ovladače byla implementována podpora protokolu FUSE 7.23 (dříve byla podporována verze 7.8, vydaná před 11 lety), byla přidána kontrola práv přístupu na straně jádra („-o default_permissions“), přidány volání VOP_MKNOD, VOP_BMAP a VOP_ADVLOCK, zajištěna možnost přerušení operací FUSE, přidána podpora anonymních kanálů a unixových soketů v fusefs, byla zavedena možnost využití kqueue pro /dev/fuse, umožněno aktualizaci parametrů připojení prostřednictvím „mount -u“, přidána podpora exportu fusefs přes NFS, implementováno sledování RLIMIT_FSIZE, přidány příznaky FOPEN_KEEP_CACHE a FUSE_ASYNC_READ, bylo provedeno významné zrychlení výkonu a zlepšení organizace kešování.
- Do kódu pro vyřazování stránek paměti do oddílu swap (swap pager) byla přidána podpora operace BIO_DELETE, která umožňuje používat příkaz TRIM při odstraňování bloků SSD úložišť pro zvýšení jejich životnosti.
- Podpora hardwaru
- Pokračuje se v implementaci podpory ARM64 SoC Broadcom BCM5871X s procesory ARMv8 Cortex-A57, zaměřenými na použití v routerech, bránách a síťových úložištích. Během vykazovaného období byla zlepšena podpora interních a externích sběrnic iProc PCIe, přidána podpora BNXT Ethernet a pracuje se na využití vestavěného kryptografického enginu pro urychlení IPsec. Integrace kódu do větve HEAD se očekává ve druhé polovině roku.
- Začala práce na podpoře 64bitového SoC NXP LS1046A na základě procesoru ARMv8 Cortex-A72 s integrovaným enginem pro akceleraci zpracování síťových paketů, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 a USB 3.0. Již byla realizována podpora základní platformy (multi-user SMP) a SATA 3.0. V přípravě je podpora USB 3.0, SD/MMC a I2C. V plánu je podpora Ethernet, GPIO a QSPI. Dokončení práce a zařazení do větve HEAD se očekává ve 4. čtvrtletí 2019.
- Byly aktualizovány ovladače mlx5en a mlx5ib pro adaptér Ethernet a InfiniBand Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] a ConnectX-6 [Dx]. Přidána podpora adaptérů Mellanox Socket Direct (ConnectX-6), umožňujících dosáhnout propustnosti až 200Gb/s na sběrnici PCIe Gen 3.0. Pro vícejádrové čipy „BlueField“ byla přidána podpora ovladače RShim. Do portů byl přidán balíček mstflint s sadou diagnostických utilit pro adaptéry Mellanox.
- Aplikace a systém portů
- Byly aktualizovány komponenty grafického stacku. Bylo provedeno portování ovladače drm.ko (Direct Rendering Manager) z jádra Linux 5.0. Tento ovladač je považován za experimentální a byl přidán do stromu portů jako graphics/drm-devel-kmod. Vzhledem k tomu, že ovladač používá aktualizovaný framework Linux KPI pro kompatibilitu s DRM API jádra Linux, je k práci vyžadováno FreeBSD CURRENT. Z Linuxu byl také portován drm-ovladač vboxvideo.ko pro virtuální GPU VirtualBox. Balíček Mesa byl aktualizován na vydání 18.3.2 a přepnut na využívání LLVM z portu devel/llvm80 místo devel/llvm60.
- Strom portů FreeBSD překonal hranici 37000 portů, počet nezavřených PR se drží na úrovni 2146. Během vykazovaného období bylo provedeno 7837 změn od 172 vývojářů. Práva komitenta získali tři noví účastníci. Mezi významnými aktualizacemi verzí v portech se objevují: MySQL 5.7, Python 3.6, Ruby 2.5, Samba 4.8, Julia 1.0, Firefox 68.0, Chromium 75.0.3770.100. Všechny porty v jazyce Go byly převedeny na používání příznaku „USES=go“. Byly přidány příznaky „USES=cabal“ pro balíčkový manažer Cabal, který se používá pro kód v Haskellu. Byl zahrnut přísný režim ochrany zásobníku. Jako výchozí byla nabídnuta verze Python 3.6 místo 2.7.
- Byl připraven vydání nástroje , který nabízí ekvivalent k /sbin/sysctl, používající pro výstup a poskytující rozšířenou sadu možností. Nsysctl může být použit pro vizuální sledování stavu hodnot sysctl a prezentaci informací o objektech ve strukturované podobě. Možný výstup ve formátech XML, JSON a HTML;
Zdroj: opennet.ru
