Rapport om udviklingen af FreeBSD-projektet fra april til juni 2019. Ændringerne inkluderer:
- Generelle og systemmæssige spørgsmål
- Kerneholdet har besluttet at oprette en arbejdsgruppe til at undersøge muligheden for at oversætte kildekoder fra det centraliserede versionsstyringssystem Subversion til det decentrale system Git.
- Der er udført fuzzing-test af FreeBSD-kernen ved hjælp af systemet og en række fejl, der blev fundet undervejs, er blevet rettet. En ny lag er tilføjet til fuzzing-testening af biblioteker for at sikre kompatibilitet med 32-bit miljøer på systemer med 64-bit kerner. Muligheden for at køre syzkaller i virtuelle maskiner baseret på bhyve er blevet implementeret. Næste skridt er at udvide dækningen af systemopkaldstestning, benytte LLVM-sanitizer til kontrol af kernen, anvende netdump til at gemme kernedumps under nedbrud ved fuzzing-testning osv.
- Arbejdet med at opdatere implementeringen af zlib på kerneniveau er startet. For at give kernen adgang til zlib-koden er kataloget contrib/zlib blevet omdøbt til sys/contrib/zlib, og headerfilen crc.h er også blevet omdøbt for at undgå konflikt med zlib/crc.h. Forældet kode, der er afhængig af zlib og inflate, er blevet renset. Fremadrettet planlægges det at muliggøre kompilering af kernen med både den gamle og den nye zlib for gradvist at overføre funktioner, der bruger kompression;
- Infrastrukturen til emulering af Linux-miljøet (Linuxulator) er blevet opdateret. Støtten til Linux-debugging værktøjer, såsom strace, er blevet udvidet. Der er tilføjet en pakke linux-c7-strace til portene, som kan bruges til at spore Linux-udkørbare filer i stedet for de standardværktøjer, der kaldes truss og ktrace, som endnu ikke kan dekode nogle specifikke Linux-flags og -strukturer. Derudover er pakken linux-ltp blevet tilføjet med Linux Test Project-udkørbare filer og problemer med kompatibilitet med udkørbare filer, der er linket med nye versioner af glibc, er blevet løst;
- Implementeringen af operationer for forsinket invalidation af bindninger til fysiske hukommelsessider (delayed invalidation) i pmap-mekanismen er overført til at bruge en algoritme til købehandling, der fungerer uden låsninger, hvilket har løst problemer med skalerbarhed ved udførelse af et stort antal parallelle unmap-operationer.
- Blokeringen af vnode i systemopkaldene i execve()-familien er blevet ændret, hvilket har øget effektiviteten ved samtidig udførelse af execve() for den samme fil (for eksempel ved kompilering med parallelt kørende kompilatorer);
- Sikkerhed
- I hypervisoren bhyve er der fortsat forbedringer af understøttelsen af Live-migrering af gæstemiljøer fra en vært til en anden samt funktionaliteten Save/Restore, der gør det muligt at fryse gæstesystemet og gemme tilstanden i en fil, som derefter kan genoptages.
- Gennem brug af biblioteket libvdsk er der tilføjet understøttelse af diskbilleder i QCOW2-format i bhyve. Installation er påkrævet
version af bhyve, der er tilpasset til at bruge filoperation-handlere baseret på libvdsk. I den rapporterede periode er der også blevet arbejdet på at forenkle integrationen af nye formater i libvdsk, forbedret læse- og skriveydelsen, samt tilføjet Copy-On-Write-understøttelse. Restopgaver inkluderer integrationen af libvdsk i den grundlæggende struktur af bhyve; - Der er tilføjet et system til indsamling af trafikoplysninger til portene,
, der gør det muligt at oprette fælder til ondsindede netværksanmodninger (IP-adresser og domæner i sortlister kontrolleres) og sende oplysninger om identificeret aktivitet til en central server til efterfølgende blokering eller analyse af angrebsforsøg; - Der er tilføjet platforme til identificering af angreb, loganalyse og overvågning af filintegritet til portene, (en fork af Ossec med støtte til integration med );
- Netværkssubsystem
- Den opdaterede ena-driver understøtter anden generations netværksadaptere ENAv2 (Elastic Network Adapter), der bruges i Elastic Compute Cloud (EC2) infrastrukturen til at organisere kommunikation mellem EC2-noder med hastigheder op til 25 Gb/s. Driveren ena har fået support for NETMAP.
- I FreeBSD HEAD er der blevet accepteret en ny MMC/SD-stak baseret på CAM-rammen, som muliggør tilslutning af enheder med SDIO (Secure Digital I/O) interface. For eksempel bruges SDIO i WiFi- og Bluetooth-moduler til mange boards, såsom Raspberry Pi 3. Den nye stak gør det også muligt at bruge CAM-interfacet til at sende SD-kommandoer fra programmer i brugerrummet, hvilket giver mulighed for at skabe enhedsdrivere, der fungerer på brugerniveau. Arbejdet med at udvikle drivere til Broadcoms trådløse chips, der arbejder i FullMAC-tilstand (hvor chipsiden udfører noget, der ligner sit eget operativsystem med implementering af sin egen trådløse 802.11 stak), er blevet påbegyndt.
- Der arbejdes på implementeringen af NFSv4.2 (RFC-7862) til FreeBSD. I den nye version af NFS er der tilføjet support til funktioner som posix_fadvise, posix_fallocate, og tilstandene SEEKHOLE/SEEKDATA i lseek, samt lokale kopieringsoperationer af fildele på serveren (uden at overføre til klienten).
I øjeblikket er der allerede grundlæggende støtte til operationerne LayoutError, IOAdvise, Allocate og Copy implementeret for FreeBSD. Operationen Seek, som er nødvendig for at bruge lseek(SEEKHOLE/SEEKDATA) med NFS, skal stadig implementeres. Støtte til NFSv4.2 forventes at blive inkluderet i FreeBSD 13.
- Lagringssystemer og filsystemer
- Projektet om redesign af FUSE (File system in USErspace) driversystemet, der muliggør oprettelse af filsystemimplementationer i brugerrummet, nærmer sig sin afslutning. Den oprindeligt leverede driver er forældet og indeholder mange fejl. I forbindelse med opgraderingsprojektet er support for FUSE-protokol 7.23 blevet implementeret (tidligere understøttedes version 7.8, der blev udgivet for 11 år siden), der er tilføjet kode til at kontrollere adgangsrettigheder på kerne-siden (‘-o default_permissions’), der er tilføjet opkald til VOP_MKNOD, VOP_BMAP og VOP_ADVLOCK, der er gjort mulighed for at afbryde FUSE-operationer, der er tilføjet support for unavngivne kanaler og unix-sockets i fusefs, der er mulighed for at bruge kqueue til /dev/fuse, opdatering af monteringsparametre gennem ‘mount -u’ er blevet tilladt, der er tilføjet support for eksport af fusefs via NFS, RLIMIT_FSIZE er blevet taget i betragtning, der er tilføjet flag FOPEN_KEEP_CACHE og FUSE_ASYNC_READ, der er foretaget betydelige præstationsoptimeringer og forbedret caching-organisation.
- I koden for sidenødsopdeling (swap pager) er der tilføjet support for operationen BIO_DELETE, som gør det muligt at bruge TRIM-kommandoen under sletning af blokke fra SSD-drev for at forlænge deres levetid.
- Hardwareunderstøttelse
- Arbejdet med at implementere støtte til ARM64 SoC Broadcom BCM5871X med ARMv8 Cortex-A57 processorer, der er rettet mod brug i routere, gateways og netværkslagersystemer, er fortsat. I den rapporterende periode er understøttelsen af interne og eksterne iProc PCIe-busser forbedret, understøttelsen af BNXT Ethernet er tilføjet, og der arbejdes på at aktivere den indbyggede krypteringsmotor for at accelerere IPsec. Integration af koden i HEAD-grenen forventes i andet halvår;
- Arbejdet er begyndt med at understøtte den 64-bit SoC NXP LS1046A baseret på ARMv8 Cortex-A72 processoren med en integreret motor til acceleration af netværkspakker, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 og USB 3.0. Grundlæggende platformunderstøttelse (multi-user SMP) og SATA 3.0 er allerede implementeret. Understøttelse af USB 3.0, SD/MMC og I2C er under udvikling. Der er planer om at støtte Ethernet, GPIO og QSPI. Færdiggørelsen af arbejdet og integrationen i HEAD-grenen forventes i 4. kvartal 2019.
- Driverne mlx5en og mlx5ib er blevet opdateret til Ethernet- og InfiniBand-adaptere fra Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] og ConnectX-6 [Dx]. Understøttelsen af Mellanox Socket Direct-adaptere (ConnectX-6), som muliggør opnåelse af en båndbredde på op til 200 Gb/s på PCIe Gen 3.0-bussen, er tilføjet. For multicore-chips 'BlueField' er understøttelsen af RShim-driveren tilføjet. Pakken mstflint med et sæt diagnostiske værktøjer til Mellanox-adaptere er blevet tilføjet;
- Applikationer og portsystem
- Komponenterne i den grafiske stack er blevet opdateret. Driveren drm.ko (Direct Rendering Manager) er blevet portet fra Linux-kernen 5.0. Denne driver betragtes som eksperimentel og er tilføjet til porttree som graphics/drm-devel-kmod. Da driveren bruger den opdaterede Linux KPI-ramme til kompatibilitet med DRM API i Linux-kernen, kræves FreeBSD CURRENT for drift. Desuden er drm-driveren vboxvideo.ko til den virtuelle GPU VirtualBox også blevet portet fra Linux. Mesa-pakken er opdateret til udgivelsen 18.3.2 og er blevet overført til brug af LLVM fra porten devel/llvm80 i stedet for devel/llvm60.
- FreeBSD-porttree har passeret tærsklen på 37000 porte, og antallet af uafsluttede PR'er ligger på 2146. I den rapporterende periode er der foretaget 7837 ændringer af 172 udviklere. Tre nye deltagere har fået commit-rettigheder. Blandt de betydelige versionsopdateringer i portene kan nævnes: MySQL 5.7, Python 3.6, Ruby 2.5, Samba 4.8, Julia 1.0, Firefox 68.0, Chromium 75.0.3770.100. Alle Go-sprogporte er blevet overført til brugen af flaget 'USES=go'. Flaget 'USES=cabal' er blevet tilføjet til pakkehåndtereren Cabal, der bruges til Haskell-kode. Der er indført streng stackbeskyttelsesmode. Python 3.6 tilbydes som standardversion i stedet for 2.7.
- Udgaven værktøj , der tilbyder en analog til /sbin/sysctl, som bruger til output og giver et udvidet sæt muligheder. Nsysctl kan anvendes til visuelt at overvåge tilstanden af sysctl-værdierne og præsentere information om objekterne i struktureret form. Output kan ske i formaterne XML, JSON og HTML;
Kilde: opennet.ru
