FreeBSD utviklingsrapport for første kvartal 2020

publisert rapport om utviklingen av FreeBSD-prosjektet fra januar til mars 2020. Blant endringene kan vi merke oss:

  • Generelle og systemiske problemer
    • Fjernet GCC-kompilatorsettet fra FreeBSD-CURRENT kildetreet, så vel som de ubrukte verktøyene gperf, gcov og gtc (devicetree compiler). Alle plattformer som ikke støtter Clang har blitt byttet til å bruke eksterne byggeverktøy installert fra porter. Basesystemet sendte en utdatert utgivelse av GCC 4.2.1, og integrasjon av nyere versjoner var ikke mulig på grunn av overgangen av 4.2.2 til GPLv3-lisensen, som ble ansett som upassende for FreeBSD-basekomponentene. Gjeldende utgivelser av GCC, inkludert GCC 9, kan fortsatt installeres fra pakker og porter.
    • Linux-miljøemuleringsinfrastrukturen (Linuxulator) har lagt til støtte for sendfilsystemkallet, TCP_CORK-modus (påkrevd for nginx) og MAP_32BIT-flagget (løser problemet med å lansere pakker med Mono fra Ubuntu Bionic). Problemer med DNS-oppløsning ved bruk av glibc nyere enn 2.30 (for eksempel fra CentOS 8) er løst.
      Den kontinuerlige integrasjonsinfrastrukturen gir muligheten til å kjøre LTP (Linux Testing Project)-jobber som kjører Linuxulator for å teste forbedringer gjort i koden for å støtte Linux. Omtrent 400 tester mislykkes og krever fiksing (noen feil er forårsaket av falske positiver, noen krever trivielle rettinger, men det er andre som krever å legge til støtte for nye systemanrop for å fikse). Det har blitt jobbet med å rydde opp i Linuxulator-koden og forenkle feilsøking. Patcher med støtte for utvidede attributter og fexecve-systemkallet er utarbeidet, men ennå ikke gjennomgått.

    • Møter i arbeidsgruppen opprettet for å utføre migrering av kildekoder fra det sentraliserte kildekontrollsystemet Subversion til det desentraliserte systemet Git fortsetter. En rapport med forslag til migrering er under utarbeidelse.
    • В rtld (runtime linker) forbedret direkte kjøringsmodus ("/libexec/ld-elf.so.1 {bane} {argumenter}").
    • Prosjektet for fuzzing testing av FreeBSD-kjernen ved hjelp av syzkaller-systemet fortsetter å utvikle seg. I løpet av rapporteringsperioden ble problemer i nettverksstabelen og koden for arbeid med filbeskrivelsestabeller identifisert ved hjelp av syzkaller eliminert. Etter feildiagnosen er det lagt til endringer i SCTP-stakken for å gjøre feilsøkingen enklere. Regler er lagt til stress2-settet for å identifisere mulige regresjoner. Lagt til støtte for fuzz-testing av nye systemanrop, inkludert copy_file_range(), __realpathat() og Capsicum undersystemkall. Arbeidet fortsetter med å dekke Linux-emuleringslaget med fuzz-testing. Vi analyserte og eliminerte feil notert i de siste Coverity Scan-rapportene.
    • Det kontinuerlige integrasjonssystemet har gått over til å utføre alle hodegrentester kun ved å bruke clang/lld. Ved testing for RISC-V sikres dannelsen av et komplett diskbilde for å kjøre tester i QEMU ved bruk av OpenSBI. Lagt til nye oppgaver for å teste bilder og virtuelle powerpc64-maskiner (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • Det arbeides med å overføre Kyua-testpakken fra portene (devel/kyua) til basissystemet for å løse problemer (pakker installeres veldig sakte) som oppstår ved bruk av Kyua på nye arkitekturer, hvor utviklingen utføres ved hjelp av en emulator eller FPGA. Integrasjon i basissystemet vil betydelig forenkle testing av innebygde plattformer og grensesnitt med kontinuerlige integrasjonssystemer.
    • Et prosjekt har blitt lansert for å optimalisere ytelsen til nettverksbrodriveren hvis_bro, som bruker en enkelt mutex for å låse interne data, som ikke tillater å oppnå ønsket ytelse på systemer med et stort antall fengselsmiljøer eller virtuelle maskiner samlet i ett nettverk. På dette stadiet er det lagt til tester i koden for å hindre at det oppstår regresjoner under moderniseringen av arbeid med låser. Muligheten for å bruke ConcurrencyKit for å parallellisere dataoverføringsbehandlere (bridge_input(), bridge_output(), bridge_forward(), ...) vurderes.
    • Lagt til et nytt sigfastblock-systemkall for å tillate en tråd å spesifisere en minneblokk for en rask signalbehandler for å forbedre ytelsen til unntaksbehandlere.
    • Kjernen legger til støtte for LSE (Large System Extension) atominstruksjoner støttet av ARMv8.1-systemer. Disse instruksjonene er nødvendige for å forbedre ytelsen når du kjører på Cavium ThunderX2- og AWS Graviton 2-kort. De ekstra endringene oppdager LSE-støtte og aktiverer dynamisk atomimplementering basert på dem. Under testing gjorde bruken av LSE det mulig å redusere prosessortiden ved montering av kjernen med 15 %.
    • Ytelsesoptimalisering er utført og funksjonaliteten til verktøysettet er utvidet for kjørbare filer i ELF-format.
      Lagt til støtte for bufring av DWARF-feilsøkingsinformasjon, løste problemer i elfcopy/objcopy-verktøyene, lagt til DW_AT_ranges-behandling,
      readelf implementerer muligheten til å dekode PROTMAX_DISABLE, STKGAP_DISABLE og WXNEEDED flaggene, samt Xen og GNU Build-ID.

  • Безопасность
    • For å forbedre ytelsen til FreeBSD i Azure-skymiljøer, arbeides det med å gi støtte for HyperV Socket-mekanismen, som tillater bruk av et socket-grensesnitt for interaksjon mellom gjestesystemet og vertsmiljøet uten å sette opp et nettverk.
    • Arbeid pågår for å gi repeterbare bygg av FreeBSD, noe som gjør det mulig å sikre at de kjørbare filene til systemkomponentene er kompilert nøyaktig fra de deklarerte kildekodene og ikke inneholder uvedkommende endringer.
    • Evnen til å kontrollere inkluderingen av ekstra beskyttelsesmekanismer (ASLR, PROT_MAX, stack gap, W+X mapping) på nivået av individuelle prosesser er lagt til elfctl-verktøyet
  • Lagring og filsystemer
    • Det arbeides med å implementere muligheten for NFS til å operere over en kryptert kommunikasjonskanal basert på TLS 1.3, i stedet for å bruke Kerberos (sec=krb5p-modus), som er begrenset til å kryptere kun RPC-meldinger og kun implementeres i programvare. Den nye implementeringen bruker den kjerneleverte TLS-stakken for å aktivere maskinvareakselerasjon. NFS over TLS-koden er nesten klar for testing, men krever fortsatt arbeid for å støtte signerte klientsertifikater og tilpasse kjerne-TLS-stakken for å sende NFS-data (patcher for mottak er allerede klare).
  • Maskinvarestøtte
    • Det arbeides med å legge til støtte for kinesisk x86 CPU Hygon basert på AMD-teknologier;
    • Som en del av CheriBSD, en gaffel av FreeBSD for forskningsprosessorarkitektur CHERI (Capability Hardware Enhanced RISC Instructions), støtte for ARM Morello-prosessoren fortsetter å bli implementert, som vil støtte CHERI-minnetilgangskontrollsystemet basert på Capsicum-prosjektets sikkerhetsmodell. Morello-brikke planlegger utgivelse i 2021. Arbeidet er for tiden fokusert på å legge til støtte for Arm Neoverse N1-plattformen som driver Morello. En innledende port av CheriBSD for RISC-V-arkitekturen har blitt presentert. CheriBSD-utviklingen fortsetter for CHERI-referanseprototypen basert på MIPS64-arkitekturen.
    • FreeBSD-portering fortsetter for 64-bits SoC NXP LS1046A basert på ARMv8 Cortex-A72-prosessoren med en integrert nettverkspakkebehandlingsakselerasjonsmotor, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 og USB 3.0. For øyeblikket forberedes driverne QorIQ og LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI for overføring til hovedsammensetningen av FreeBSD.
    • Ena-driveren er oppdatert til versjon 2.1.1 med støtte for andre generasjon ENAv2 (Elastic Network Adapter) nettverkskort brukt i Elastic Compute Cloud (EC2) infrastrukturen for å organisere kommunikasjon mellom EC2 noder med hastigheter på opptil 25 Gb/ s. En oppdatering til ENA 2.2.0 er under utarbeidelse.
    • Forbedringer av FreeBSD-porten for powerpc64-plattformen fortsetter. Fokuset er på å levere kvalitetsytelse på systemer med IBM POWER8- og POWER9-prosessorer. I løpet av rapporteringsperioden ble FreeBSD-CURRENT overført til å bruke LLVM/Clang 10.0-kompilatoren og lld-linkeren i stedet for GCC. Som standard bruker powerpc64-systemer ELFv2 ABI og støtte for ELFv1 ABI har blitt avviklet. FreeBSD-STABLE har fortsatt gcc 4.2.1. Problemer med virtio-, aacraid- og ixl-drivere er løst. På powerpc64-systemer er det mulig å kjøre QEMU uten Huge Pages-støtte.
    • Arbeidet fortsetter med å implementere støtte for RISC-V-arkitekturen. I sin nåværende form starter FreeBSD allerede med suksess på SiFive Hifive Unleashed-brettet, som drivere er forberedt for
      UART, SPI og PRCI, støtter OpenSBI og SBI 0.2 firmware. I rapporteringsperioden ble arbeidet fokusert på migrasjon fra GCC til clang og lld.

  • Applikasjoner og havnesystem
    • FreeBSD-portsamlingen har krysset terskelen på 39 tusen porter, antallet ulukkede PR-er overstiger litt 2400, hvorav 640 PR-er ennå ikke er sortert. I løpet av rapporteringsperioden ble det gjort 8146 endringer fra 173 utviklere. Fire nye deltakere fikk committer-rettigheter (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore). Lagt til USES=qca-flagg og fjernet USES=zope-flagg (på grunn av inkompatibilitet med Python 3). Det arbeides med å fjerne Python 2.7 fra porttreet – alle Python 2-baserte porter må porteres til Python 3 eller vil bli fjernet. Pkg-pakkebehandlingen har blitt oppdatert til utgivelse 1.13.2.
    • Oppdaterte grafikkstabelkomponenter og xorg-relaterte porter.
      X.org-serveren har blitt oppdatert til versjon 1.20.8 (tidligere sendt på 1.18-grenen), som tillot FreeBSD å bruke udev/evdev-backend som standard for håndtering av inndataenheter. Mesa-pakken har blitt byttet til å bruke DRI3-utvidelsen i stedet for DRI2 som standard. Det arbeides med å beholde grafikkdriverne, inndataenhetsstabelen og drm-kmod-komponentene (en port som muliggjør drift av amdgpu, i915 og radeon DRM-moduler, ved å bruke linuxkpi-rammeverket for kompatibilitet med Direct Rendering Manager til Linux-kjernen) oppdatert.

    • KDE Plasma-skrivebordet, KDE Frameworks, KDE-applikasjoner og Qt holdes oppdatert og oppdatert til de siste utgivelsene. En ny applikasjon kstars (stjerneatlas) er lagt til portene.
    • Det har blitt jobbet for å eliminere regressive endringer i xfwm4-vindusbehandleren som dukket opp etter oppdatering av Xfce til versjon 4.14 (for eksempel dukket det opp artefakter ved dekorering av vinduer).
    • Vinporten har blitt oppdatert for å gi ut Wine 5.0 (tidligere ble 4.0.3 tilbudt).
    • Fra og med versjon 1.14 la Go-språkkompilatoren til offisiell støtte for ARM64-arkitekturen for FreeBSD 12.0.
    • OpenSSH på basissystemet har blitt oppdatert til utgivelse 7.9p1.
    • Sysctlmibinfo2-biblioteket har blitt implementert og plassert i porter (devel/libsysctlmibinfo2), og gir en API for tilgang til sysctl MIB og oversettelse av sysctl-navn til objektidentifikatorer (OID).
    • En distribusjonsoppdatering er generert NomadBSD 1.3.1, som er en utgave av FreeBSD tilpasset for bruk som et bærbart skrivebord som kan startes opp fra en USB-stasjon. Det grafiske miljøet er basert på en vindusbehandling Åpen boks. Brukes til montering av drev DSBMD (montering av CD9660, FAT, HFS+, NTFS, Ext2/3/4 støttes), for å konfigurere et trådløst nettverk - wifimgr, og for å kontrollere volumet - DSBMixer.
    • Startet arbeid om å skrive fullstendig dokumentasjon for fengselsmiljølederen pot. Pot 0.11.0 forberedes for utgivelse, som vil inkludere verktøy for å administrere nettverksstakken.

Kilde: opennet.ru

Legg til en kommentar