FreeBSD Development Report för första kvartalet 2020

publiceras rapport om utvecklingen av FreeBSD-projektet från januari till mars 2020. Bland förändringarna kan vi notera:

  • Allmänna och systemiska frågor
    • Tog bort GCC-kompilatoruppsättningen från källträdet FreeBSD-CURRENT, såväl som de oanvända verktygen gperf, gcov och gtc (devicetree compiler). Alla plattformar som inte stöder Clang har bytts till att använda externa byggverktyg installerade från portar. Bassystemet skickade en föråldrad version av GCC 4.2.1, och integration av nyare versioner var inte möjlig på grund av övergången av 4.2.2 till GPLv3-licensen, vilket ansågs olämpligt för FreeBSD-baskomponenterna. Aktuella versioner av GCC, inklusive GCC 9, kan fortfarande installeras från paket och portar.
    • Linux-miljöemuleringsinfrastrukturen (Linuxulator) har lagt till stöd för systemanropet sendfile, TCP_CORK-läge (krävs för nginx) och MAP_32BIT-flaggan (löser problemet med att lansera paket med Mono från Ubuntu Bionic). Problem med DNS-upplösning vid användning av glibc nyare än 2.30 (till exempel från CentOS 8) har lösts.
      Den kontinuerliga integrationsinfrastrukturen ger möjlighet att köra LTP-jobb (Linux Testing Project) som kör Linuxulator för att testa förbättringar av koden för att stödja Linux. Cirka 400 tester misslyckas och kräver korrigering (vissa fel orsakas av falska positiva resultat, vissa kräver triviala korrigeringar, men det finns andra som kräver att man lägger till stöd för nya systemanrop för att fixa). Arbete har gjorts för att rensa upp Linuxulator-koden och förenkla felsökningen. Patchar med stöd för utökade attribut och fexecve-systemanropet har förberetts, men ännu inte granskats.

    • Mötena i den arbetsgrupp som skapats för att utföra migreringen av källkoder från det centraliserade källkontrollsystemet Subversion till det decentraliserade systemet Git fortsätter. En rapport med förslag på migration är under utarbetande.
    • В rtld (runtime linker) förbättrat direktexekveringsläge ("/libexec/ld-elf.so.1 {sökväg} {argument}").
    • Projektet för fuzzing testning av FreeBSD-kärnan med hjälp av syzkaller-systemet fortsätter att utvecklas. Under rapporteringsperioden eliminerades problem i nätverksstacken och koden för att arbeta med filbeskrivningstabeller identifierade med syzkaller. Efter feldiagnosen har ändringar lagts till i SCTP-stacken för att göra felsökningen enklare. Regler har lagts till stress2-uppsättningen för att identifiera möjliga regressioner. Lade till stöd för fuzz-testning av nya systemanrop, inklusive copy_file_range(), __realpathat() och Capsicum subsystem calls. Arbetet fortsätter med att täcka Linux-emuleringsskiktet med fuzz-testning. Vi analyserade och eliminerade fel som noterats i de senaste Coverity Scan-rapporterna.
    • Det kontinuerliga integrationssystemet har gått över till att exekvera alla huvudgrentester endast med clang/lld. Vid testning för RISC-V säkerställs bildandet av en komplett diskavbildning för att köra tester i QEMU med OpenSBI. Lade till nya uppgifter för att testa bilder och virtuella powerpc64-maskiner (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • Arbete pågår med att överföra Kyuas testsvit från portarna (devel/kyua) till bassystemet för att lösa problem (paket installeras mycket långsamt) som uppstår när man använder Kyua på nya arkitekturer, vars utveckling sker med hjälp av en emulator eller FPGA. Integration i bassystemet kommer avsevärt att förenkla testning av inbyggda plattformar och gränssnitt mot kontinuerliga integrationssystem.
    • Ett projekt har lanserats för att optimera prestanda för nätverksbryggans drivrutin if_bridge, som använder en enda mutex för att låsa interna data, vilket inte gör det möjligt att uppnå önskad prestanda på system med ett stort antal fängelsemiljöer eller virtuella maskiner förenade i ett nätverk. I detta skede har tester lagts till i koden för att förhindra att regressioner inträffar under moderniseringen av arbetet med lås. Möjligheten att använda ConcurrencyKit för att parallellisera dataöverföringshanterare (bridge_input(), bridge_output(), bridge_forward(), ...) övervägs.
    • Lade till ett nytt sigfastblock-systemanrop för att tillåta en tråd att specificera ett minnesblock för en snabb signalhanterare för att förbättra prestandan för undantagshanterare.
    • Kärnan lägger till stöd för LSE (Large System Extension) atominstruktioner som stöds av ARMv8.1-system. Dessa instruktioner krävs för att förbättra prestandan när de körs på Cavium ThunderX2 och AWS Graviton 2-kort. De tillagda ändringarna upptäcker LSE-stöd och möjliggör dynamiskt atomimplementering baserat på dem. Under testningen gjorde användningen av LSE det möjligt att minska processortiden vid montering av kärnan med 15 %.
    • Prestandaoptimering har genomförts och funktionaliteten i verktygslådan har utökats för körbara filer i ELF-formatet.
      Lade till stöd för cachelagring av DWARF-felsökningsinformation, löste problem i elfcopy/objcopy-verktygen, lade till DW_AT_ranges-bearbetning,
      readelf implementerar förmågan att avkoda PROTMAX_DISABLE-, STKGAP_DISABLE- och WXNEEDED-flaggorna, såväl som Xen och GNU Build-ID.

  • Безопасность
    • För att förbättra prestandan för FreeBSD i Azure molnmiljöer pågår arbete med att tillhandahålla stöd för HyperV Socket-mekanismen, som tillåter användning av ett socket-gränssnitt för interaktion mellan gästsystemet och värdmiljön utan att sätta upp ett nätverk.
    • Arbete pågår för att tillhandahålla repeterbara versioner av FreeBSD, vilket gör det möjligt att säkerställa att de körbara filerna för systemkomponenterna kompileras exakt från de deklarerade källkoderna och inte innehåller främmande ändringar.
    • Möjligheten att kontrollera inkluderingen av ytterligare skyddsmekanismer (ASLR, PROT_MAX, stack gap, W+X-mappning) på nivån för individuella processer har lagts till i elfctl-verktyget
  • Lagring och filsystem
    • Arbete pågår för att implementera möjligheten för NFS att fungera över en krypterad kommunikationskanal baserad på TLS 1.3, istället för att använda Kerberos (sec=krb5p-läge), som är begränsat till att endast kryptera RPC-meddelanden och endast implementeras i mjukvara. Den nya implementeringen använder TLS-stacken som tillhandahålls av kärnan för att möjliggöra hårdvaruacceleration. NFS över TLS-koden är nästan klar för testning, men kräver fortfarande arbete för att stödja signerade klientcertifikat och anpassa kärnans TLS-stacken för att skicka NFS-data (patchar för mottagning är redan klara).
  • Hårdvarustöd
    • Arbete pågår för att lägga till stöd för kinesiska x86 CPU Hygon baserad på AMD-teknologier;
    • Som en del av CheriBSD, en gaffel av FreeBSD för forskningsprocessorarkitektur CHERI (Capability Hardware Enhanced RISC Instructions), stöd för ARM Morello-processorn fortsätter att implementeras, vilket kommer att stödja CHERI-minnesåtkomstkontrollsystemet baserat på Capsicum-projektets säkerhetsmodell. Morello chip planerar släpps 2021. Arbetet är för närvarande fokuserat på att lägga till stöd för Arm Neoverse N1-plattformen som driver Morello. En första port av CheriBSD för RISC-V-arkitekturen har presenterats. CheriBSD-utvecklingen fortsätter för CHERI-referensprototypen baserad på MIPS64-arkitekturen.
    • FreeBSD-porteringen fortsätter för 64-bitars SoC NXP LS1046A baserad på ARMv8 Cortex-A72-processorn med en integrerad accelerationsmotor för nätverkspaketbearbetning, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 och USB 3.0. För närvarande förbereds drivrutinerna QorIQ och LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI för överföring till den huvudsakliga FreeBSD-kompositionen.
    • Ena-drivrutinen har uppdaterats till version 2.1.1 med stöd för andra generationens ENAv2 (Elastic Network Adapter) nätverksadaptrar som används i Elastic Compute Cloud (EC2)-infrastrukturen för att organisera kommunikation mellan EC2-noder med hastigheter upp till 25 Gb/ s. En uppdatering av ENA 2.2.0 förbereds.
    • Förbättringar av FreeBSD-porten för powerpc64-plattformen fortsätter. Fokus ligger på att tillhandahålla kvalitetsprestanda på system med IBM POWER8- och POWER9-processorer. Under rapporteringsperioden överfördes FreeBSD-CURRENT till att använda LLVM/Clang 10.0-kompilatorn och lld-linker istället för GCC. Som standard använder powerpc64-system ELFv2 ABI och stödet för ELFv1 ABI har upphört. FreeBSD-STABLE har fortfarande gcc 4.2.1. Problem med virtio-, aacraid- och ixl-drivrutiner har lösts. På powerpc64-system är det möjligt att köra QEMU utan stöd för Huge Pages.
    • Arbetet fortsätter med att implementera stöd för RISC-V-arkitekturen. I sin nuvarande form startar FreeBSD redan framgångsrikt på SiFive Hifive Unleashed-kortet, för vilket drivrutiner har förberetts
      UART, SPI och PRCI, stöder OpenSBI och SBI 0.2 firmware. Under rapportperioden har arbetet fokuserats på migration från GCC till clang och lld.

  • Applikationer och hamnsystem
    • FreeBSD-portsamlingen har passerat tröskeln på 39 tusen portar, antalet ostängda PR:er överstiger något 2400, varav 640 PR:er ännu inte har sorterats. Under rapportperioden gjordes 8146 ändringar från 173 utvecklare. Fyra nya deltagare fick committer-rättigheter (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore). Lade till USES=qca-flaggan och tog bort USES=zope-flaggan (på grund av inkompatibilitet med Python 3). Arbete pågår för att ta bort Python 2.7 från portträdet – alla Python 2-baserade portar måste portas till Python 3 eller kommer att tas bort. Pakethanteraren för pkg har uppdaterats till version 1.13.2.
    • Uppdaterade grafikstackkomponenter och xorg-relaterade portar.
      X.org-servern har uppdaterats till version 1.20.8 (levererades tidigare på 1.18-grenen), vilket gjorde det möjligt för FreeBSD att som standard använda udev/evdev-backend för hantering av inmatningsenheter. Mesa-paketet har bytts till att använda DRI3-tillägget istället för DRI2 som standard. Arbete pågår för att behålla grafikdrivrutinerna, inmatningsenhetsstacken och drm-kmod-komponenterna (en port som möjliggör driften av amdgpu, i915 och radeon DRM-moduler, med hjälp av linuxkpi-ramverket för kompatibilitet med Direct Rendering Manager för Linux-kärnan) aktuell.

    • KDE Plasma-skrivbordet, KDE Frameworks, KDE Applications och Qt hålls uppdaterade och uppdaterade till de senaste utgåvorna. En ny applikation kstars (stjärnatlas) har lagts till i portarna.
    • Arbete har gjorts för att eliminera regressiva förändringar i xfwm4-fönsterhanteraren som dök upp efter uppdatering av Xfce till version 4.14 (till exempel artefakter dök upp vid dekoration av fönster).
    • Vinporten har uppdaterats för att släppa Wine 5.0 (tidigare erbjöds 4.0.3).
    • Från och med version 1.14 lade Go-språkkompilatorn till officiellt stöd för ARM64-arkitekturen för FreeBSD 12.0.
    • OpenSSH på bassystemet har uppdaterats till release 7.9p1.
    • Sysctlmibinfo2-biblioteket har implementerats och placerats i portar (devel/libsysctlmibinfo2), vilket ger ett API för åtkomst till sysctl-MIB och för att översätta sysctl-namn till objektidentifierare (OID).
    • En distributionsuppdatering har genererats NomadBSD 1.3.1, som är en utgåva av FreeBSD anpassad för användning som ett bärbart skrivbord som kan startas från en USB-enhet. Den grafiska miljön är baserad på en fönsterhanterare Öppen låda. Används för montering av drivenheter DSBMD (montering av CD9660, FAT, HFS+, NTFS, Ext2/3/4 stöds), för att konfigurera ett trådlöst nätverk - wifimgr, och för att kontrollera volymen - DSBMixer.
    • Började arbete om att skriva fullständig dokumentation för fängelsemiljöchefen kruka. Pot 0.11.0 förbereds för release, som kommer att innehålla verktyg för att hantera nätverksstacken.

Källa: opennet.ru

Lägg en kommentar